Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

Тетрис в консоли на чистом ООП. Не могли бы покритиковать мою архитектуру? - C++

01.12.2011, 20:03. Просмотров 2421. Ответов 0
Метки нет (Все метки)

Хочу написать тетрис на чистом ООП в консоли.
Тетрис будет представляться в виде вектора векторов размером 20x10.

Теперь надо разработать архитектуру.
Я представляю основу архитектуры так:
будет большой главный цикл, в котором будут считываться данные с клавиатуры, вызываться соответствующие методы классов, перерисовываться консоль( я думаю, это тоже будет методом),
будет происходить задержка( фигуры падают постепенно, а не мгновенно).
Думаю, что, если составить классы и методы к ним, то этот главный цикл сделать уже не составит труда.

Следующим шагом будет выявление классов и методов. Вроде как это часть архитектуры.
Как пишут в книгах, классы отражают сущности обычных вещей в реальном мире. (вроде так)
Теперь смотрим на описание тетриса( с википедии ):
Правила
Случайные фигурки тетрамино падают сверху в прямоугольный стакан шириной 10 и высотой 20 клеток. В полёте игрок может поворачивать фигурку и двигать её по горизонтали. Также можно «сбрасывать» фигурку, то есть ускорять её падение, когда уже решено, куда фигурка должна упасть. Фигурка летит, пока не наткнётся на другую фигурку либо на дно стакана. Если при этом заполнился горизонтальный ряд из 10 клеток, он пропадает и всё, что выше его, опускается на 1 клетку. Темп игры постепенно увеличивается. Название игры происходит от количества клеток, из которых состоит каждая фигура. Игра заканчивается, когда новая фигурка не может поместиться в стакан. Игрок получает очки за каждую фигурку, поэтому его задача — заполнять ряды, не заполняя сам стакан как можно дольше, чтобы таким образом получить как можно больше очков.
Делаю по примеру в книге Дейтелов( как программировать на С++ ).
Берем все существительные:
фигурки
игрок
стакан
дно
ряд
темп
игра
очки
задача

Представим себе эти слова классами и выкинем лишние слова.
Остается:
фигурки
стакан
темп?
очки?

+добавим класс Тетрис, который управляется остальными классами.
Классы:

Тетрис:
управляет фигурками, подсчитывает очки, перерисовывает тетрис и т.д.
Стакан:
вектор векторов размером 20х10
Можно вообще обойтись без него, засунув вектор векторов в класс тетрис.
Фигурка:
Генерирует рандомную фигуру или фигурку можно разбить на классы отдельных фигур: I, J, L, O, S, T, Z.
Класс темп и очки думаю можно не делать. Достаточно двух переменных типа unsigned int для темпа и очков, которые будут находится в классе Тетрис.

Методы:

Фигурка:
Допустим, что каждый вид фигурки будет представлен своим классом.
Значит фигурки будут обрабатываться полиморфно.
Фигурки сами себя будут поворачивать.
Фигурки будут представляться в виде вектора векторов. Если есть другие идеи как представлять фигурки, то мне бы было интересно услышать эти идеи.
При создании фигурки, надо инициализировать вектор векторов.


Тетрис:
Конструктор с параметром для темпа игры. Создает или объект класса Стакан или вектор векторов размером 20х10. Инициализирует очки нулем, а темп игры тем, что было передано конструктору.
Метод перерисовки. Перерисовывает не все, а только то, что изменилось. При первом вызове этого метода, нарисуется весь тетрис, ибо в консоли будут находится только пробелы и вроде бы символы перехода на новую строку.
Метод генерирования фигурки.
Метод передвижения в лево/право фигурки.
Метод поворота фигурки. Вызывает метод поворота у фигуры и еще делает одно действие, которое описано ниже.
Метод падения фигурки.

В 4 предыдущих методах будет проверка на свободное место для фигурки. Боковые стенки и верхняя стенка стакана учитываются иначе, чем дно стакана и фигурки, лежащие на дне.
В этих 4 методах будет удаляться фигурка, если свободного места не оказалось, т.е. фигурка упала на самую верхнюю лежащую фигурку.
Сервисный метод проверки на заполнение горизонтального ряда в тех местах, в которых касается только-что упавшая фигура.

Хочу послушать критику о том, что я написал выше.
PS
Отправлять меня смотреть готовые тетрисы желательно не надо. Я хочу сам написать тетрис.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2011, 20:03     Тетрис в консоли на чистом ООП. Не могли бы покритиковать мою архитектуру?
Посмотрите здесь:

C++ Тетрис
Тетрис C++
C++ Задача на Архитектуру ПК
C++ Тетрис на C++
Тетрис на c++ C++
C++ Задача на чистом Си. Массивы
Тетрис на С++ C++
Не могли бы вы подсказать блок схему? C++
C++ Хочу понять архитектуру C++
C++ Разработать архитектуру программы управления роботом
Имеет ли смысл учить архитектуру ЭВМ программисту? C++
Как лучше спроектировать систему и какую архитектуру разработки приложения использовать? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 09:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru