пятница, 16 сентября 2016 г.

О новых уровнях Wappo 2

В оригинальной игре Wappo 2 было ровно 100 уровней разной сложности, и при определенной сноровке ее можно пройти за неделю-другую в обеденный перерыв. А что дальше? Спасибо Елене Волчек, которая неделю назад поинтересовалась, когда будут новые уровни. Елена также рассказала мне про игру про Минотавра (похожую на Wappo 2), в которую она играла на Nokia.
Я нашел описание той игры, и нашел генератор уровней к ней. И хотя игра в Минотавра проще, чем Wappo 2, она позволила мне понять, что генератор уровней для подобных игр возможен.
Первым делом мне пришлось сделать приложение на Java, которое находит решение на стандартных уровнях Wappo 2. За основу я взял свою игру, выкинув из нее все, относящееся к графике и звуку.
Этому приложению я "скормил" прекрасные 86 и 87 уровни, решения по которым он нашел. Правда, решения не оптимальные, но иного и не ждешь от последовательного перебора. Можно, конечно, усовершенствовать алгоритм, чтобы он искал все возможные решения и выбирал кратчайшее, но я этого делать пока не стал.
Затем я добавил генератор карт на основе случайных чисел и заставил его работать с решателем в тандеме, генератор генерирует случайные карты, производится поиск решения. Если оно не найдено, карта отбрасывается, если решение найдено, и оно короткое, то тоже отбрасывается. Из пары сотен сгенерированных карт порой подходящей кажется лишь одна.
Результат я вывожу в консоль, которую впоследствии перенаправил в файл.
Вот пример карты, созданной моим генератором:
┌─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │
├─┼─┼─┼─┼─┼─┤
│ │█│ │ │X│ │
├─┼─┼─┼─┼─┼─┤
│ │ │ │ │█│W│
├─┼═┼═┼═┼─┼─┤
│ │ │ │ │ ║ │
├─┼═┼─┼═┼─┼─┤
│ │ │ │ │ │ │
├─┼═┼─┼─┼─┼─┤
│░║ ║ │ │ ║ │
└─┴─┴─┴─┴─┴─┘

Здесь в левом нижнем углу дверь выхода, W - главный герой, X - монстр, черные прямоугольники - телепортеры, одиночные линии на сетке обозначают клетки игрового поля, двойные линии играют роль неразрушимых стен.
Завтра потестирую карты на игре, и если они заставят меня поломать голову, добавлю их в игру сверх стандартных уровней!

Комментариев нет:

Отправить комментарий