Помощь - Поиск - Пользователи - Календарь
Полная версия: Тетрис
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Fang
Захотелось вот попробовать написать тетрис. Думал что просто а вот теперь даже не знаю с чего начать. В сети много исходников, но хотелось бы чтобы объяснили поподробнее. Алгоритм какой нибудь что ли...
Fang
Ну не ужели никто тетрис не делал? huh.gif
volvo
Ну объясни ты мне, зачем тебе ЕЩЕ ОДИН исходник? Их же и так тысячи !!! Ты лучше приведи неясный тебе фрагмент, и скажи, что именно неясно.
klem4
Цитата(Fang @ 2.10.2005 15:35)
Ну не ужели никто тетрис не делал?  huh.gif


Если бы ты воспользовался поиском или просто пролистал раздел игры, то штук 5 разнообразеых тетрисов ты бы точно нашел <_< Что значит алгорим к тетрису ?Найди исходник попроще с комментами, да ковыряйся в нем ...
Guest
Цитата
Что значит алгорим к тетрису ?

Ну не алгоритм, а так... основные понятия. Что такое стакан и т.д. в кратце.

Цитата
Найди исходник попроще с комментами, да ковыряйся в нем ...


Да вот что то попроще найти не могу все с наворотами, с графикой и т.д.
volvo
Ты что, издеваешься? Какой же тетрис БЕЗ ГРАФИКИ? Ты еще без компьютера попробуй сделать... <_<
virt
тетрис без графики ,т.е. по реалу -- игрушки для архитекторов.
AlienEmperor
Ну ладно, ладно... Наскочили на человека... Злые вы все! На самом деле тетрис без графики - это как раз нормально. Короче, слухай сюды: все что происходит на экране всего лишь отображение того, что происходит в памяти: самый простой вариант тетриса: текстовый режим - есть у тебя массив, который и представляет собой "стакан":

|000000| Mas[I,J] = [0,0,0,0,0]
|000000| [0,0,0,0,0]
|000000| [0,0,0,0,0]
|000000| -----
|000000| [0,0,0,0,0]

Далее, есть фигура:
0,0,1,0,0
0,0,1,0,0
0,0,1,0,0 (столько нулей - для "вращения")
0,0,1,0,0

Так вот: берешь фигуру (тоже массив) и заполняешь ей "стакан" ("ставишь наверх"),
затем, с задержкой опускаешь до того момента, когда ниже 1 есть другая 1, или когда фигура достигает самого "дна стакана". Остановилась - присваиваешь в стакане единицы фигуры. Далее - новая фигура. После остановки очередной фигуры проверяешь - есть ли линия в стакане: если есть - обнуляешь ее. В принцыпе, все: как уж ты сделаешь, с графикой, без (может у тебя фигуры будут из "*" состоять это уже не важно.
SmOuk
Люди, подскажите мне как сделать демо режим в тетрисе, т.е. чтоб комп играл сам с собой.... то я уже голову поломал..
Бродяжник
Первое, что пришло в голову.
После того, как сгенерена очередная фигурка, "в уме" проверить все варианты ее падения (с учетом горизонтального положения и разворота). Каждый вариант оценивается по количеству непустых рядов после падения фигурки и упаковки стакана. Выбирается оптимальный вариант и компьютер уже в реал-тайме пытается его провернуть, при необходимости двигая и разворачивая фигуру.
Gothic_Snake
Цитата(SmOuk @ 23.12.2005 16:23) *

Люди, подскажите мне как сделать демо режим в тетрисе, т.е. чтоб комп играл сам с собой.... то я уже голову поломал..

Как вариант:
Пишешь процедурку, которая запоминает последовательность изменений массива твоего "стакана", далее.. Запоминаешь реакцию пользователя (твою реакцию).... Вообщем сам проиграй один уровень и запомни все твои действия в файл... Quake2 так и сделан...
SmOuk
Цитата(Gothic_Snake @ 23.12.2005 17:53) *

Как вариант:
Пишешь процедурку, которая запоминает последовательность изменений массива твоего "стакана", далее.. Запоминаешь реакцию пользователя (твою реакцию).... Вообщем сам проиграй один уровень и запомни все твои действия в файл... Quake2 так и сделан...

Не, мне надо чтобы фигуры выпадали рандомом.....
GoodWind
ИИ писать хочешь ?
Gothic_Snake
Цитата(GoodWind @ 25.12.2005 16:26) *

ИИ писать хочешь ?

Наверное хочет...
SmOuk
Да придётся! Только не подскажите, от чего оттолкнуться? Может где ссылочка на похожую задачу есть?
Meruert
mne nravitsya vse eto! Hochu oznokomitsya poblije!!!!

Ya ne delala! A chto? interesno?
Бродяжник
Meruert
С чем ознакомиться-то? С тетрисом?
SmOuk
Препод разрешил сделать демо мультиком.
Gothic_Snake
Цитата
Как вариант:
Пишешь процедурку, которая запоминает последовательность изменений массива твоего "стакана", далее.. Запоминаешь реакцию пользователя (твою реакцию).... Вообщем сам проиграй один уровень и запомни все твои действия в файл...

Не подскажешь алгоритм процедурки? Или примерчик выложи.. Плиз
Бродяжник
Надо думать, что в любом случае алгоритм включает в себя рисование/выпечатывание пустых или заполненных клеточек стакана. Так вот, можно сделать следующее: всякий раз, когда это происходит, записывать в файл какой-нибудь код, скажем, 1, а после него координаты выводимой клеточки и ее цвет. А там, где в программе стоит задержка, записывать в файл другой код, скажем, 0. Вот и все. Потом считываем этот файл, и если встречаем код 1, то считываем координаты и цвет, и рисуем клеточку. А когда встречаем 0, делаем задержку. И будет вам счастье.
Или еще лучше. Там, где стоит ввод с клавиатуры, записываем код клавиши в файл (или -1, если ничего не нажали). А в демо версии вместо ввода с клавиатуры ставим чтение из файла, или выборку кода из заранее считанного массива. А все остальное оставляем по-старому.
В общем, есть варианты.
SmOuk
Бродяжник
Спасибо... Вроде несложный алгоритм.. Буду пробовать. rolleyes.gif
SmOuk
Цитата
Там, где стоит ввод с клавиатуры, записываем код клавиши в файл (или -1, если ничего не нажали). А в демо версии вместо ввода с клавиатуры ставим чтение из файла, или выборку кода из заранее считанного массива. А все остальное оставляем по-старому.
В общем, есть варианты.

Сделал так... Всё работает,ну в смысле движения повторяет, но фигуры выпадают не так, хотя их тоже в файл записываю! unsure.gif Мож кто исходничёк посмотрит.... подскажет!
Бродяжник
Исходничек я скачал, но посмотреть пока толком не могу - у меня стоит TP 6, а под ним эта игра слегка глючит... видимо, из-за того, что не инициализируются некоторые переменные. А так неплохо смотрится... видно, что человек работал. smile.gif
SmOuk
Ну что, не ужели никто не нашёл ошибку? unsure.gif Или просто всем лень её искать.... Люди, мене срочно надо, выручайте!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.