{{notification.text}}

MirGames

Похождения Василия Пупкина

Почти классический сокобан на Delphi
0
 
 

Описание проекта

Управление и игровой процесс

Всё, что можно сделать с помощью мыши, можно сделать и с помощью клавиатуры, т.е. управление выбранным пунктом в меню, переход в меню, подтверждение ввода и т.д. Управление сокобаном с помощью мыши я хотел сделать, но потом забил, т.к. влом писать алгоритм поиска кратчайшего пути.

В игре сокобан управляется с помощью стрелок. Нажатие Enter или Esc воспринимается как выход в меню. Клавиша "R" используется для рестарта уровня. Кстати, рестарт можно сделать нажав на кнопку рестарт в игре или в меню. Клавиша "0" (NumPad 0) - отмена хода.

Ход можно отменить не более 20 раз

Рестарт уровня накладывает штраф в -100 очков.

При выходе из игры сохраняется текущий прогресс и игрок имеет возможность возобновить игру с непройденного уровня

Авторы

Программированием занимался разумеется я (т.е. MeF).

Часть графики(интерфейс, стены и пол уровня) были нарисованы за пару часов мной же.

Главный герой(тов. Пупкин), а также ящики(торт и пиво) были нарисованы Beta-X'ом, за что ему огромное спасибо! :)

Автором модуля x_tga.pas является XProger, хотя у меня есть и свой модуль, но мой слишком тяжеловесный ;)

Автор заголовков для zlib.dll, т.е. модуля zlib.pas - Daniel Neville.

Модуль OpenGL15.pas принадлежит Delphi OpenGL Community.

Немного об игре

Игра представляет собой сокобан с видом сверху. От классического отличается несколькими типами ящиков:

  1. есть обычные ящики, которые нужно поместить в определенную позицию;
  2. есть ящики-пустышки, т.е. неквестовые ящики, которые просто мешают;
  3. есть ящики, которые нужно собирать в кучу, т.е. считается, что ящик стоит на месте, если рядом(сверху, снизу, слева или справа) есть такой же ящик.

У меня была куча идей насчёт других типов ящиков, но, к сожалению, я не успел их добавить. Кроме того, нужно ещё уровни с этими ящиками придумать... Может быть, если я буду дальше совершенствовать игру, то я ввиду новые типы ящиков.

Разработка

Игра написана на BDS2006 с использованием OpenGL и WinAPI. Из стандартных модулей используются только System, SysInit, Windows, Messages и Types, т.к. я не хотел тянуть за собой SysUtils и Classes.

Я старался писать более-менее качественный код, хотя сейчас понимаю, что мне это не удалось, но рефакторить код, увы, нет ни времени, ни желания.

В качестве ядра игры использовались собственные наработки

Реализовал в качестве эксперимента хранения текстур и шрифтов в хэш-таблице и вообще активно использовал хэширование.

Также для интереса использовал некоторые фичи BDS2006, т.е. inline, class helpers, процедуры у record'ов, перегрузку операторов и т.п.

В ходе реализации патерна синглетон я лучше узнал язык Delphi :) Т.к. я раньше и не думал, что можно перегрузить NewInstance у класса для управления выделением памяти под экземпляр класса.

Впервые практиковал использование default свойств, например, загрузка шрифта выглядела не так:

var Font: TFont;
...
Font := Fonts.Load('fontname.mff');

А немного проще и, как мне кажется, логичнее:

var Font: TFont;
...
Font := Fonts['fontname.mff'];

Я пытался отделить модель игры от её вывода, чтобы в случае необходимости, можно было достаточно быстро переделать вывод из 2д в 3д. Получилось вроде не плохо, хотя теперь я знаю, как можно сделать намного лучше, проще и логичнее.

В целом на разработку ушло не более 70 часов

Репозиторий

Адрес репозитория: Скачать ZIP архив

Галерея

История

03.12.14 01:54
Added log file
mefcorvi
03.12.14 01:52
Initial commit
mefcorvi