![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
![]()
Давайте рассмотрим общий алгоритм, в гугле тем много, а толкового ни чего так и не удалось найти.
Рассмотрим хотябы такие вопросы: 1) Что взять за основу фигуры тетриса 2) Как организовать движение фигур 3) Как организовать поворот фигуры 4) Как организовать столкновение фигуры (когда она упала) Ну и прочие вопросы. В приемере на картинке за основу я взял шейп и имагу. (ли что-то другое удобнее будет?) Алгоритм движения фигуры у меня представляется таким образом. Если фигура состоит из четырех компонентов типа "шейп" то в качестве передачи движения фигуры мы передаем координаты Left и Top нижнему шейпу, а этот шейп автоматически уже связан с остальными своими "соседями". Ну что-то на подобие примера кораблик из книги Культина метод (базовой точки) Поворот, что значит поворот для фигуры из шейпов? Я так понимаю это просто задание шейпам принять новые координаты на форме? Верно нет? Поворот для имаги я думаю проще организовать проще сменой ее картинки на другую, уже повернутую. Столкновение, Фигура упала. К шейпу ладно можно привязаться и к координатам, но к имаге к координатам уже непривяжешся, если имга упала то это незначит что фигура уже упала... Кто-то может уже создавал подобное и столкнулся с какими-то проблемами, а кто-то уже и создал и все получилось. Ваше мнение и предложения по реализации данной игры? |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,871
|
![]()
на, не мучайся. скачай архив, попробуй игрушку и скажи, надо ли тебе исходник. пробел - пауза. управляющие кнопки - стрелки
PS. белая точка заполняет пустоту, чёрная - прожигает всё до низа. я всегда играю на 11-м уровне, но больше 245 очков сам не смог набрать PPS. я просто взял чужой написанный код, находящийся в свободном доступе, разобрался в нём, немного свихнулся, немного добавил своего в геймплей и доработал количество фигур, добавил уровни и ещё пару штучек.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
Последний раз редактировалось NetSpace; 12.01.2015 в 17:42. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
![]()
NetSpace
Ага скачал нормальная игра, жалко исходника нету ![]() |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,871
|
![]()
держи исходник. вот там и разберёшься: как они сталкиваются, как поворачиваются и прочие вопросы. на при мерах - самое то изучать. если помог - жми на весы
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
Последний раз редактировалось NetSpace; 12.01.2015 в 17:57. |
![]() |
![]() |
![]() |
#5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Какие шейпы, какие имейджи ? Для игр на дельфи эти вещи практически бесполезны.
Делать такое стоит на массивах и структурном программировании - на процедурах по сути. Скинутый код, конечно, неплох в этом плане, но в нём есть много других косяков, в основном по стилю, но и по архитектуре и инфраструктуре не очень. Поэтому, лучше для образовательных целей писать с нуля, максимум изучив код и реализовывая его суть, но своими конструкциями. А вообще теме место в игровом разделе. Будет неплохо , если Вы туда переместитесь (согласовав с модератором) и будете освещать ход работы, чтобы народ как раз мог поправлять и направлять. |
![]() |
![]() |
![]() |
#6 | ||||
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
![]() Цитата:
Цитата:
Цитата:
Цитата:
|
||||
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
![]()
Хорошая идея была вот эта например:
Заливка каких-то областей компонента Image, что-ли которые и прорисовывают фигуру. Решил ее воссоздать в примитивном виде, получилось примерно следующее, пока просто по клику мыши рисую фигуры, левой кнопки простая заливка, правой заливка картинкой. Разлинеил область Image так же программно и прописал цифры в каждой получившейся ячейке. Код:
|
![]() |
![]() |
![]() |
#8 | ||||
Пользователь
Регистрация: 18.09.2014
Сообщений: 32
|
![]() Цитата:
Цитата:
Цитата:
Нужно менять значение (x,y) массива в нужном вам направлении. То есть переворачивать массив. Цитата:
Вот я бы начал примерно так : Код:
|
||||
![]() |
![]() |
![]() |
#9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Ну-с, начнём-с.
Для игры понадобится: форма - 1 штука, таймер - одна штука. Из области визуальной разработки - всё. По желанию можно, конечно, добавить кнопочку или мейнменю, но это если не охота гуй делать самому. Всё остальное - чистый код. В коде лучше сразу принять концепцию, подобную шаблону MVC (см вики, если какие термины непонятны из поста), а именно - есть данные, есть отображение этих данных, и есть сущность по управлению и изменению данных. Т.е., поясняю, никакого рабочего кода в обработчиках формы, никаких глобальных переменных, данные лучше вообще вынести в отдельный модуль и спрятать в секцию implementation и наружу модуля выставлять только редкие функции/процедуры, без которых ну никак. В итоге, должно быть минимум 2 модуля, а лучше 3. Один из них форма, второй - данные с управлением оными, либо последнее ещё на 2 модуля разбивается. Данные это, по сути, некая структура/запись (а лучше класс) с кучей приватных членов для именно хранения данных и несколькими публичными методами для воздействия. В случае структур приватность и публичность можно формировать через механизм модуля, в случае классов это модификаторы доступа. Эта "защита" нужна в первую очередь от себя самого, так как проследить, нет ли какого кода, который я писал месяц назад, меняющего что-то в обход логики (хоть существовавшей, хоть новой) из-за легкодоступности - очень сложно и приводит к часам дебага "волшебных ошибок", и более того, фикс такой ошибки, может приводить к ещё более тяжким последствиям, из-за "технических долгов". Форма же это очень простая вещь в такой архитектуре - она имеет только несколько обработчиков событий - кнопки, мышка, создание и уничтожение, срабатывание таймера и онпейнт. В событиях (кроме онпейнт, креэйт, дестрой) форма только лишь даёт сигнал объекту управления (о нём позже), что произошло такое событие. В онпейнте же происходит прорисовка буфера изображения (его обычно тоже хранит управляющий) на канвас формы (сразу реализуется двойная буфферизация). Креэйт и дестрой - обычно только лишь вызов создать и уничтожить управляющего. Самый интересный это управляющий – он как раз и отвечает за все операции. По смыслу он хранит буфер изображения, на котором производит отрисовку всей модели данных, он понимает сигналы от пользователя и т.п. (мышь, клава, таймер) и меняет данные по конкретным правилам, в результате этих изменений формирует изменения на изображении и его можно рисовать пользователю. Также стоит отдельно хранить картинки всякие в виде списка объектов Tbitmap (никаких имейджей опять же) и рисовать их через canvas.draw, для таких задач обычно выделяют т.н. менеджер ресурсов. Работу с мышкой можно сделать через проверку координат (мышка попала на картинку – сделать реакцию). Кнопки таким образом можно сделать красивые. Сами принципы тетриса по сути не отличаются от оригинальных. Также хочу заметить, что выложенный код имеет дублирование , намешаны задачи, которые выполняет одна подпрограмма, опять же глобалки. Константы надо переделать в свойства объектов. Последний раз редактировалось phomm; 13.01.2015 в 14:06. |
![]() |
![]() |
![]() |
#10 | ||
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
![]()
disbnt
Цитата:
phomm Цитата:
Сейчас попробую показать визуально, вот есть картинка, слева- это графическое поле игры (Image это), справа- это та матрица которая эту игру и делает, каждое значение матрицы что справа соответствует графическому отображению в Image что слева. После движения персонажа в одну из сторон следует полная прорисовка графического изображения каждой клеточки в цикле (значение которой берется из массива). Как бы по подобному алгоритму нужно действовать? Последний раз редактировалось NIKOLAYY2; 13.01.2015 в 20:10. |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Идея создания онлайн игры | Некромант | Свободное общение | 11 | 20.02.2011 01:32 |
Есть идея для создания игры!!! | Mb666 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 8 | 01.04.2009 23:59 |
Набираю команду для создания игры | Лён | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 13 | 13.07.2007 16:06 |