0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 16
|
||||||
1 | ||||||
Паттерн Strategy + paintEvent31.03.2015, 18:12. Показов 1609. Ответов 9
Метки нет (Все метки)
Здравствуте. В универе задали создать игру Тетрис. Прорисовку окон сказали осуществить с использованием шаблона Strategy. Тоесть у меня есть один виджет на котором все прорисовывается в зависимости какой должен быть экран. Не могу понять каким образом переопределять paintEvent и правильно ли будет наследовать класс унаследованный от QWidget. Зарание прошу прощения если влопрос поставлен некоректно,с шаблонами только начал ознакамливатся.
Вообщем нужно переделать Стратегию так что бы вместо virtual void use(void) = 0; был paintEvent()
0
|
31.03.2015, 18:12 | |
Ответы с готовыми решениями:
9
паттерн strategy Паттерн Strategy и игрушка Почему паттерн абстрактная фабрика - паттерн уровня объектов, если в нём могут быть статические отношения? Source Strategy |
66 / 66 / 18
Регистрация: 31.03.2015
Сообщений: 253
|
||||||
31.03.2015, 19:02 | 2 | |||||
Я бы посоветовал использовать QGraphicsView, а не рисовать прямо на виджете. Виджет не совсем для этого предназначен.
Если же нужно именно так, то вызвать repaint() нужного виджета в теле функции use. А переопределить paintEvent:
0
|
31.03.2015, 19:19 | 3 |
Не советуйте дурно, все как раз таки и наоборот. Назначение QGraphicsView это реализация механизмов манипуляции с объектами, а не просто рисование.
van4esco, Думаю не стоит привязывать механизмы твоей игры, к виджету. Переопределение paintEvent нужно тебе только для возможности рисования, не вижу смысла что бы наследовать и плодить свои классы. Имеется ввиду размер экрана? Т.е. что будет в игре меняться при разных размерах экрана?
0
|
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 16
|
|
31.03.2015, 19:22 [ТС] | 4 |
Тогда как по-вашему лучше поступить в таком случае?
Добавлено через 3 минуты Имеется ввиду,что у игры есть пускай Н экранов, например Главное меню,Таблица,Результатов,Загрузка... Так вот эти все окна должны прорисовыватся на одном виджете методом paintEvent() по шаблону Strategy
0
|
31.03.2015, 19:42 | 5 | |||||
Ну приблизительно такой код:
Какое отношение это имеет к паттерну Strategy ? Стратегия это класс определяющий поведение другого класса. В данном примере поведение прорисовки в игре: каким цветом будут прорисовываться, линии фигур, какие края, стиль итп.
2
|
66 / 66 / 18
Регистрация: 31.03.2015
Сообщений: 253
|
|
01.04.2015, 09:18 | 6 |
Это тетрис, а не програма а-ля MS Paint
Выгоднее передвинуть готовую нарисованую фигурку, чем заново ее рисовать.
0
|
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 4
|
||||||||||||||||||||||||||
03.04.2015, 11:09 | 7 | |||||||||||||||||||||||||
Avazart, у меня почти такая самая ситуация .Нужно реализировать паттерн State для смены состояний игрыдля начало только два) Loading - загрузка игры, Menu - меню игры.Всю прорисовку состояний должен делать GameWidget.Перейти нужно с Loading в Menu. Есть клас Game сделаный с помощью Singleton'a.
Game.h
Game.cpp
State.h
0
|
03.04.2015, 12:48 | 8 |
http://cpp-reference.ru/patter... rns/state/
http://rsdn.ru/article/patterns/State.xml Добавлено через 15 минут Вероятно можно где-то по лучше найти описание паттерна, но я с ним не имел дела не могу подсказать.
1
|
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 4
|
|
03.04.2015, 22:04 | 9 |
Avazart, Спасибо !
Добавлено через 4 часа 58 минут Avazart, еще один вопрос. Как с помощью QList'a передать обьекты для отрисовки с класса состояния или стратегии в класс GameWidget ( унаследованного от QWidget ), а именно отрисовать paintEvent'ом ?
0
|
04.04.2015, 12:34 | 10 |
А зачем их передавать?
Передавай QPainter внутрь метода draw объекта Game как в моем примере со стратегией.
0
|
04.04.2015, 12:34 | |
04.04.2015, 12:34 | |
Помогаю со студенческими работами здесь
10
strategy pattern Использование паттерна Strategy EJB read mostly strategy Design Pattern - Strategy Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |