Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2014, 15:58   #111
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию

Слушайте, ну что вы друг на друга бросаетесь?

Перестаньте. Это неприятно читать

Все ваши выпады точно не имеют отношения к тетрису
marenko.lilia вне форума Ответить с цитированием
Старый 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
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Гром
Цитата:
Ну написали... Ассемблеры, ОпенГЛы...
...
Куда здесь совать видеопамять - не представляю. Наверное, я совсем не умею программировать. Ушел писать ХеллоуУорлд.
Ну ты ваще ниче не знаешь и не понимаешь. Я тоже не знал и не понимал, но в теме меня научили и обучили. Если коротко:
- тетрис пишется ГОРАЗДО ПРОЩЕ чем ты можешь себе представить, если использовать опенгл и рисовать прямоугольники из двух треугольников. - Это реально ключевой момент тетриса, иначе ты напишешь тетрис неправильно, будешь мучаться и т.п.
- с другой стороны, ты конечно можешь не использовать опенгл - но тогда ты просто обязан использовать ассемблер. Как бэ это обяъснить почему.... потому что видеопамять тебе стопудово нужна - ведь вот как ты пишешь про вывод элементов массива - это НЕВОЗМОЖНО. Потому что даже экран без ассемблера очистить не возможно. Ну как бэ не только возможно, но даже очень просто. Просто не возможно. (Кошу под боксера, но иначе не могу объяснить - тут показывать надо).

Короче 2 варианта - опенгл или ассемблер. Как меня убедили участники ветки - самый простой вариант - с опенглом. Ну а если ты не исопльзуешь опенгл - то у тебя неизбежно возникнут проблемы, которые магическим образом решит ассемблер. Просто пишешь на ассемблере и нет проблем. Вот так как-то.

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

Убедил? - Если нет - перечитай тему.
rrrFer вне форума Ответить с цитированием
Старый 20.09.2014, 22:42   #114
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
да хоть бы массив длины 4 - координаты клеток фигуры
До селе я как-то не задумывался, что все фигуры в тетрисе состоят из четырех элементов, но с другой стороны, такая реализация не позволяет сделать гибрид тетриса и змейки, что было бы гораздо интересней.
waleri вне форума Ответить с цитированием
Старый 20.09.2014, 22:56   #115
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

waleri
Ну... в разных тетрисах по разному. В китайских девайсах-тетрисах были всякие монстры-фигуры. Там был како-йто таймер, по которуму надо было очки набирать. Если не успел набрать вываливается что-то такое:
Код:
**
***
 *  ****
 **    **
   *****
Ну или типа того, много их разных там было.
rrrFer вне форума Ответить с цитированием
Старый 21.09.2014, 07:43   #116
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,324
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
гибрид тетриса и змейки
Я и не знал, что такое бывает! Вот нагуглил, здесь онлайн можно сыграть: http://www.freeworldgroup.com/games8...etrissnake.htm
8Observer8 вне форума Ответить с цитированием
Старый 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
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Я и не знал, что такое бывает!
Да я тоже не знал...
waleri вне форума Ответить с цитированием
Старый 22.09.2014, 11:35   #119
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,324
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Да я тоже не знал...
Можно такое нафантазировать! Первая мысль, которая мне пришла после твоего сообщения - это совмещать известные игры (судя по совмещению змейки с тетрисом - это уже не ново)

Совместить, например, змейку и танчики:

- задача у змейки съесть орла
- змейка может плеваться и разрушать кирпичи (при попадании в орла он парализуется на время)
- задача у танчиков уничтожить змейку, для этого они отстреливают звенья
- змейка может кушать специальные блоки, чтобы восстановить звенья
- если забор вокруг орла разрушен, то он может убежать (в сетевом варианте можно играть за орла и змейку)
- орёл может добежать до специального пункта и вызвать подмогу (на случай, если все танчики уничтожены)

P.S.

Последний раз редактировалось 8Observer8; 22.09.2014 в 11:47.
8Observer8 вне форума Ответить с цитированием
Старый 23.09.2014, 09:30   #120
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,324
По умолчанию

Давайте правда "отделим логику от GUI", как говорит waleri. Пусть у нас будет какой-то абстрактный отрисовщик и не важно, что это: GDI, DirectX, OpenGL, символы консоли, какие-то средства рисования в консоле и т.д. Этот отрисовщик (рендер) рисует элементы, зная их координаты.

Самый простой вариант тетриса - это строительные блоки из четырёх элементов.

Для начала так набросал:

1) Создаём класс Square, объект которого будет хранить свои координаты
2) Придумываем названия для строительных блоков:

- Крючок
- Зигзаг
- Блок
- Стержень

3) Создаём соответствующие классы для строительных блоков. Каждый объект этих классов будет хранить массив своих квадратов и цвет.

Названия классов строительных блоков:

- Hook
- Zigzag
- Block
- Bar

P.S. Может вместо "Hook" другое название?. Остальные, по-моему, хорошие.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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