20.09.2014 в 22:49 (3671 Просмотров)
Прервался на некоторое время от основной разработки и реализую задумку двухмесячной давности - сделать головоломку в духе "сокобана" на мейкере.
С тех пор вышли кнопки, и я догадался совместить приятное с полезным и приделать к игре старого доброго Джона Донжона.
Сам процесс создания и работы будущей игры довольно занимательный для мейкера, потому и решил потратить толику времени и написать эту статью.
Наверняка всем известна эта головоломка, суть которой в том, что нужно в замкнутом расставить несколько ящиков по нужным местам, при этом их можно только толкать вперед и ничего более. Вариаций сокобана в интернетах кучи, да даже сосед по общаге, помнится на паскале на первом курсе писал свою. А вот на мейкере оно пробегало редко, в качестве отдельных головоломок в различных играх, в том числе и у меня.
Вот, а теперь будет разработка целиком посвященная этой игре.
Вариантов для разработки было два: взять готовый набор головоломок, которые придумали умельцы, либо создать некий генератор, который бы создавал рандомные уровни в некоторых условиях.
Выбрал второй, ибо первый скучный для реализации, а научиться генерить веселей. Итак, процесс разработки был такой:
1) На просторах интернета был найден генератор уровней от нашего соотечественника (находится на этом сайте. У него, в отличие от других есть огромное преимущество: он консольный.
2) У генератора нет особых настроек, и он по данной "комнате" в аски графике, вида
генерит комнату с расставленными ящиками, кнопками и героем тоже в аски графике. Так как автором он задумывался как "идеальный" в плане сложности, то на одну комнату он выдает один и тот же вариант. Поэтому переходим к пункту
3) Генерация комнаты-заготовки. Алгоритм простой - я в экселе задаю комнату 4мя параметрами: ширина, высота, количество препятствий и число кнопок/ящиков, рандомно раскидываю препятствия и кнопки, сохраняю это в файл в отдельную папку, где лежит генератор.
4) Запускаю батник, для удобства сидящий в корневой папки, он заходит в папку с уровнем, запускает генератор с параметром файла комнаты. По наличию файла решения смотрю, отработал ли ген (ведь могут быть нерешаемые комнаты), если нет - повторяю процедуру с п. 3.
5) В итоге у меня есть файл сгенеренной головоломки:
6) Засасываю файл скриптом и генерю по нему комнату. Я нашел скрипт какого-то японца для генерации рамдомных подземелий и переработал его:
- У меня есть несколько карт-шаблонов (4 - по типам подземелий-комнат), в каждом из них есть:
-- 20 видов пола (10 по 2 - обычный и "с трещиной", "с трещиной" выпадает раз на шесть где-то)
-- 5 видов стена+потолок (стены двухтайловые)
-- событие кнопки, событие ящика и 5 событий для препятствий (так проще их расставлять далее)
- Есть карта, на которую происходит генерация, там все и рисуется. На ней стоит событие старта (это FadeIn и фраза в начале уровня через общее событие)
- На событии ящика и кнопки в каждом шаблоне есть реакция на нажатие и толкание, но основная логика происходит в скрипте, который дергается в начале уровня и после каждого толкания. Он проверяет наличие ящиков на кнопках и ставит нужные селфсвитчи, а также обсчитывает победу, дергая другое общее событие (я фразой победы и портом далее)
7) Остальное аналогично недавно вышедшим "кнопкам": живой титульник, междууровние и конец.
8) Забыл добавить, музыка в игре мидишная и тоже рандомится (по пять на каждую тему)
9) Всего в игре 40 уровней разбитых, как и в кнопках, на 4 темы. Естественно при желании, за полчаса можно накидать куда больше, но хотелось бы, чтобы не надоело совсем к концу.
10 Вот, как-то так, а в бонус - скрины сгенеренных карт:
11) Даже после скорого выхода думаю доработать игру, попробовав внедрить разные непростые штуки:
- кривые комнаты (вместо прямоугольника)
- систему баллов (сравнивая с идеальным решением по количеству шагов)
- подсказку
- рестарт левела (пока есть только загрузка)
12) Игра разработана под эгидой и лого CaveMonsters, подборкой и рисованием всей графики занимается MaraMonster.