|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.09.2014, 18:34 | #131 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Если хочется классов, то кто же их начинает с названий, да еще и с вспомогательных классов, а не основных. Перед созданием классов нужно хорошо и долго думать, а точнее проектировать, чтобы потом не лепить костыли. В данном случае нас волнует чисто игровая логика и ничего более.
Логично создать класс Игра, который будет рулить всем игровым процессом. Создали экземпляр класса и автоматом получили набор из пустого стакана и кучи методов для процесса игры. Стакан - тупо двумерный массив. Можно взять простой вариант с булевыми данными (занята ячейка или свободна), можно хранить цвет ячейки и 0 (чёрный цвет) будет означать свободную ячейку, можно создать свой тип для этого. Я бы не парился и хранил цвет (одноцветный вариант не сильно легче, чтобы стоило делать такую некрасивую игру). Игра должна давать информацию по падающей фигуре и давать возможность повернуть, подвинуть, а так же обрабатывать "ход" (когда фигура падает на одну позицию вниз или она уже упала и нужно сгенерировать новую). скорость игры, имя игрока и прочие гадости так уж откровенно к механике игры не относятся и в принципе их можно в этот класс не пихать, но пусть тоже будут в куче, дабы впоследствии не плодить сущности. Под фигуру тоже можно выделить класс удобства ради. В принципе, это тупой двумерный массив, по типу стакана в "Игре", но есть подозрение, что нужно еще добавить координату центра фигуры (для вращений). Под разные фигуры я бы классы не лепил, а создал конструктор Фигура(Тип, Цвет, Поворот). Можно и как "фабрику" оформить: Игра.Фигура = Фигура.СоздатьПалку(Красный, ВертикальнаяПалка). Позиция фигуры в стакане фигуру совершенно не волнует, поэтому её логичнее также в игре хранить. В общем, почти всё попадает в один класс Игра или Тетрис или как там его назовёте. В Фигуре только заполнение нужных ячеек в двумерном массиве и его повороты будут. Дальше думайте как лучше сделать проверки на предмет уже упавшей фигуры, как не давать двигать фигуру за пределы стакана и прочие мелочи. Вообще, учитесь - учитесь на своих ошибках. Пишите как думается, там либо поймёте как надо было и что не так или не поймёте. То, что я написал тут, другой человек распишет совсем иначе и у него всё будет не менее кошерно, еще и паттерны может будут активно применяться. На начальном этапе набивайте шишки своими собственными классами, да сюда заходите с готовыми набросками, а мы охотно поругаем, если сами в процессе не поймёте что где не так. Последний раз редактировалось pu4koff; 23.09.2014 в 18:37. |
23.09.2014, 20:06 | #132 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Я бы сделал клетки в стакане указателями на класс который будет выдавать фигура. Таким образом можно будет заполнять клетки по разному - кружочками, квадратиками, картинками и т.д.
Таким образом у нас 5 классов - Тетрис, Стакан, Фигура, Клетка и Рисователь. Рисователь - аналог HDC и будет выводить графичные примитивы на разные устройства - конзоль, DirectX, OpenGL, tty printer... |
23.09.2014, 22:22 | #133 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Код:
Код:
Последний раз редактировалось rrrFer; 23.09.2014 в 23:18. |
|
23.09.2014, 22:57 | #134 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
24.09.2014, 00:25 | #135 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Цитата:
Идея такова: Код:
Код:
Последний раз редактировалось waleri; 24.09.2014 в 00:28. |
|
24.09.2014, 07:39 | #136 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Неправильная связь нарисовалась. Современный тренд в том, что стакан вообще не должен знать, что его кто-то рисует. Он находится в слое Model, а рисовать его нужно в слое View. Рисовальщик может знать о стакане, а стакан вообще о его существовании не должен подозревать, даже на уровне абстрактных классов и интерфейсов.
|
24.09.2014, 07:50 | #137 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
09.10.2014, 18:12 | #138 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Почитал вас и то же решил написать свой Тетрис.
У меня уже были попытки, написать в консоли, я тогда кроме условий циклов и массивов ни чего не знал. Змейка получилась, а вот тетрис не осилил, завяз в собственном коде. Ну вот попытка номер два, вроде работает. Но еще тестирую. Писал в Qt Creator, под Linux, можете под винду собрать. Ни какого Open GL. К стати возник вопрос- почему при каждом запуске программы функция rand выдает разные значения? Последний раз редактировалось SAMOUCHKA; 09.10.2014 в 19:01. |
09.10.2014, 19:02 | #139 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Замечательно! Тут можно смело добавить репутации!
Исполняемый файл для Windows (5 MБайт): https://yadi.sk/d/3R9pzIrPbuQZT Управление. Перемещение: стрелки. Поворот: клавиши Z, X. Начало игры: пробел. Пауза: пробел А можно было бы в меню сделать пункт "Помощь" и пункт новая игра У вас простые фигуры. Мне кажется, что крутить лучше в одну сторону с помощью пробела. У меня рука так и тянется на пробел Было бы отлично что-то внести. 10 уровней, например. Чтобы скорость увеличивалась. И чтобы что-то менялось. Например, новые фигуры появлялись или ещё что-то. Какой-нибудь финал бы Последний раз редактировалось 8Observer8; 09.10.2014 в 19:04. |
09.10.2014, 19:05 | #140 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
я отредактировал пост заменил файл, там косяк один был.
Да надо ввести новые уровни. Пока я просто добивался правильной работы |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C тетрис | Цукер | Помощь студентам | 0 | 21.11.2011 22:53 |
Тетрис на си | фыф123 | Помощь студентам | 1 | 22.06.2011 10:48 |
Тетрис | Александр123456 | Общие вопросы C/C++ | 1 | 02.12.2010 23:15 |
Тетрис | k1r1ch | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 02.01.2010 12:20 |
массив и тетрис | sid | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 04.04.2007 14:41 |