Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Single Unix Specification http://www.cyberforum.ru/cpp-beginners/thread396713.html
Добрых лет. Вопрос:можно ли получить разрешение(вроде частной лицензии) от The Open Group на установку расширений POSIX.1(SUSv3) для домашнего использования, "либо получить полный набор X/Open...
C++ Разложение натурального числа на квадраты Сабж.... Причем разложить надо наиболее коротким способом Ну вот к примеру: 32 = 4(2)+4(2); 23=3(2)+3(2)+2(2)+1(2); Ну я думаю всем понятно:) Итак... Теперь самое интересное)... Моя идея... http://www.cyberforum.ru/cpp-beginners/thread396710.html
Ошибка с памятью C++
Здравствуйте! Пытаюсь преобразовать картинки одного из векторов в серые. (имеются 2 вектора с одинаковыми изображениями) vector<BYTE*> A1; vector<BYTE*> A2; //вектор для серого vector...
Массивы в С++ C++
Помогите пожалуйста, очень нужно. Дана последовательность из n действительных чисел: Вывести на экран номера всех минимальных элементов. (С++)
C++ функция getline() в dev_C++ http://www.cyberforum.ru/cpp-beginners/thread396677.html
Помогите пожалуйста, не могу разобраться с функцией getline() Пишу на dev_C++ и не понемаю смысл работы функции. Она читает, пока не встретит символ конца строки?Почему у меня в выходном файле...
C++ Сформировать целочисленный массив A(75), элементами которого являются случайные числа из диапазона [-5, 20] помогите решить плз,прост сам препод много задал,а этот номер я как то не одупляю!!! "Сформировать целочисленный массив A(75), элементами которого являются случайные числа из диапазона . Найти среди... подробнее

Показать сообщение отдельно
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133

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

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

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

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

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

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

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

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

Методы:

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


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

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

Хочу послушать критику о том, что я написал выше.
PS
Отправлять меня смотреть готовые тетрисы желательно не надо. Я хочу сам написать тетрис.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru