|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.09.2014, 15:58 | #111 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
Слушайте, ну что вы друг на друга бросаетесь?
Перестаньте. Это неприятно читать Все ваши выпады точно не имеют отношения к тетрису |
15.09.2014, 22:17 | #112 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Ну написали... Ассемблеры, ОпенГЛы... Особенно порадовали невозможность консольного ассемблера и какие-то непонятные загоны про потроха видны не то компов от человека, не умеющего программировать.
Тетрис - это реально просто. Всех сущностей, которые нужны - игровое поле (двумерный массив клеток - занято/свободно), падающая фигура (да хоть бы массив длины 4 - координаты клеток фигуры). Функция отрисовки (очистить экран, пройтись по игровому полю, нарисовать занятые клетки), функция смещения фигуры на клетку вниз (прибавить единички ко всем игрекам), функция проверки коллизии (проверить 4 координаты фигуры на то, есть ли на поле занятые клетки с такими координатами), функция движения клетки влево-вправо (вычесть/прибавить единички к иксам), функция поворота (относительно сложная, но можно тупо для каждой фигуры забить всевозможные ориентации прямо в код), функция очистки заполненных линий (если горизонтальная линия заполнена целиком - все вышележащие клетки перенести вниз на одну), функция добавления фигурки к полю при падении (просто в двумерном массиве объявляем все четыре клетки с нужными координатами как занятые), функция генерации новой фигуры (через рандом выбираем одну из списка, пишем в фигурку начальные координаты). Плюс основной цикл - какой-нибудь таймер (хотя бы бесконечный цикл с простейшей проверкой системного времени), считывание нажатой клавиши. Допустим, каждые 100мс смотрим, какие клавиши нажали, вызываем соответствующие функции влево-вправо-вращение. Каждые 500мс дополнительно смещаем фигуру вниз. При каждом движении/повороте не применяем их сразу, а находим новые координаты фигуры, и проверяем столкновение между новой фигурой и полем. Если нет столкновения, то записываем эти новые координаты вместо старых. Если есть столкновении при движении влево-вправо или при повороте - просто ничего не делаем. Если есть столкновение при движении вниз - сначала добавляем фигурку к полю, потом генерим новую фигурку. Каждые 100мс перерисовываем поле. ВСЕ! Где тут хоть что-то сложное, кроме как для новичка? Функция рисования реализуется как угодно. Самые простые варианты - WinAPI (GDI), Canvas в C++ Builder, чуть более замороченный - Qt. Консольное рисование - целых два варианта - через GotoXY (досовский или аналог WinAPI) или тупо всех элементов массива подряд. Куда здесь совать видеопамять - не представляю. Наверное, я совсем не умею программировать. Ушел писать ХеллоуУорлд.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
20.09.2014, 22:09 | #113 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Гром
Цитата:
- тетрис пишется ГОРАЗДО ПРОЩЕ чем ты можешь себе представить, если использовать опенгл и рисовать прямоугольники из двух треугольников. - Это реально ключевой момент тетриса, иначе ты напишешь тетрис неправильно, будешь мучаться и т.п. - с другой стороны, ты конечно можешь не использовать опенгл - но тогда ты просто обязан использовать ассемблер. Как бэ это обяъснить почему.... потому что видеопамять тебе стопудово нужна - ведь вот как ты пишешь про вывод элементов массива - это НЕВОЗМОЖНО. Потому что даже экран без ассемблера очистить не возможно. Ну как бэ не только возможно, но даже очень просто. Просто не возможно. (Кошу под боксера, но иначе не могу объяснить - тут показывать надо). Короче 2 варианта - опенгл или ассемблер. Как меня убедили участники ветки - самый простой вариант - с опенглом. Ну а если ты не исопльзуешь опенгл - то у тебя неизбежно возникнут проблемы, которые магическим образом решит ассемблер. Просто пишешь на ассемблере и нет проблем. Вот так как-то. Ну кроме очистки экрана тебе нужен ассемблер потому, что на древних компутерах (а именно тогда появился тетрис) был прямой доступ к видеопамяти. А значит, если ты напишешь тетрис без этого, то тетрис будет неправильным. Я не понял каким образом ассемблер даст прямой доступ к видеопамяти, но ребята сказали - что даст и показали свои глубокие знания (процитировали мне какую-то книжку по кольцам защиты) - короче им можно верить. Убедил? - Если нет - перечитай тему. |
|
20.09.2014, 22:42 | #114 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
20.09.2014, 22:56 | #115 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
waleri
Ну... в разных тетрисах по разному. В китайских девайсах-тетрисах были всякие монстры-фигуры. Там был како-йто таймер, по которуму надо было очки набирать. Если не успел набрать вываливается что-то такое: Код:
|
21.09.2014, 07:43 | #116 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Я и не знал, что такое бывает! Вот нагуглил, здесь онлайн можно сыграть: http://www.freeworldgroup.com/games8...etrissnake.htm
|
22.09.2014, 07:43 | #117 | ||
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Цитата:
Цитата:
P.S. Дек вместо массива, конечно, позволит отцу русской демократии сделать даже змейкотетрис (наверное, не видел такое). Но новички обычно боятся STL, хотя и зря.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же Последний раз редактировалось Гром; 22.09.2014 в 07:46. |
||
22.09.2014, 09:29 | #118 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
22.09.2014, 11:35 | #119 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Можно такое нафантазировать! Первая мысль, которая мне пришла после твоего сообщения - это совмещать известные игры (судя по совмещению змейки с тетрисом - это уже не ново)
Совместить, например, змейку и танчики: - задача у змейки съесть орла - змейка может плеваться и разрушать кирпичи (при попадании в орла он парализуется на время) - задача у танчиков уничтожить змейку, для этого они отстреливают звенья - змейка может кушать специальные блоки, чтобы восстановить звенья - если забор вокруг орла разрушен, то он может убежать (в сетевом варианте можно играть за орла и змейку) - орёл может добежать до специального пункта и вызвать подмогу (на случай, если все танчики уничтожены) P.S. Последний раз редактировалось 8Observer8; 22.09.2014 в 11:47. |
23.09.2014, 09:30 | #120 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Давайте правда "отделим логику от GUI", как говорит waleri. Пусть у нас будет какой-то абстрактный отрисовщик и не важно, что это: GDI, DirectX, OpenGL, символы консоли, какие-то средства рисования в консоле и т.д. Этот отрисовщик (рендер) рисует элементы, зная их координаты.
Самый простой вариант тетриса - это строительные блоки из четырёх элементов. Для начала так набросал: 1) Создаём класс Square, объект которого будет хранить свои координаты 2) Придумываем названия для строительных блоков: - Крючок - Зигзаг - Блок - Стержень 3) Создаём соответствующие классы для строительных блоков. Каждый объект этих классов будет хранить массив своих квадратов и цвет. Названия классов строительных блоков: - Hook - Zigzag - Block - Bar P.S. Может вместо "Hook" другое название?. Остальные, по-моему, хорошие. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |