У меня есть игра-головоломка на основе сетки, основанная на состояниях. Мне нужен алгоритм, который может найти решение для каждого игрового уровня. Уровень игры начинается в определенном состоянии и заканчивается в уникальном, хорошо известном состоянии, поэтому мне нужно найти путь перехода из начального состояния в конечное.
Каждый объект в игровой сетке можно перемещать в 4 направлениях и останавливать только при столкновении с другим объектом; и каждый ход представляет собой уникальное, четко определенное состояние. Уровень игры решен, когда все объекты расположены в заранее определенных местах, что является частью игры-головоломки. Правила игры чрезвычайно просты, но найти решение для уровня кажется очень сложным.
Итак, перед лицом такой проблемы существует ли алгоритм, который является хорошим кандидатом для поиска решений для этих игровых уровней? Я полагаю, что для этого хорошо подошли бы подходы глубокого обучения, но это было бы слишком для этой игры, поскольку аппаратные ресурсы несколько ограничены.
Игра, которую я делаю, по идее похожа на эту игру. Эта игра основана на игре под названием Q, которую я знаю только по старому сотовому телефону Sony Ericsson — одной из первых моделей сотовых телефонов с цветным экраном. Игра, которую я привожу в качестве примера, находится в Microsoft Store и является единственной копией, которую я смог найти; Я не мог найти онлайн-версию, извините за это. Игра, над которой я работаю, имеет те же правила, но имеет дополнительные объекты, которые добавляют другие правила, чтобы сделать игру более интересной (например, объекты, которые заставляют шары останавливаться, объекты, которые заставляют шары менять направление и т. д.).
Если вы играете в нее, вы можете заметить, что человек решает ее, в основном, используя разум, потому что каждый уровень имеет разную геометрию стен, некоторые шары нужно вставлять в свои слоты в определенном порядке, чтобы уровень можно было решить, и т. д. , С дополнительными объектами, которые добавляют больше сложности, решение уровней требует от человека понимания некоторых ключевых ингредиентов, характерных для этого уровня. Например, иногда мяч застревает в каком-то месте, и ключ может использовать один из других шаров вместе, чтобы вытащить его оттуда. Есть несколько основных стратегий, которые полезны для большинства уровней, но сами по себе они не могут решить уровни. Самые простые уровни довольно легко решить, но есть такие (обычно самые интересные), которые требуют от человека сообразительности, разума и некоторого творчества, чтобы поместить все шарики в соответствующие слоты.
К сожалению, игра, над которой я работаю, находится в стадии разработки и еще не работает в визуальной части, поэтому я пока не могу использовать ее в качестве примера.
Мне удалось сделать несколько фотографий некоторых уровней для игры. Они следующие, в порядке жесткости (ну, более или менее):
Этот уровень достаточно прост. Шарики можно забивать в квадраты соответствующего цвета, как в примере игры стороннего производителя выше.
Этот уровень не очень сложный, но мина в центре усложняет его. Мины — это объекты, над которыми нельзя перемещаться, иначе вы проиграете.
Этот уровень сложен, потому что шары застревают в геометрии уровня, и ключом к успеху является избегание забивания шаров. Чтобы решить этот уровень, необходимо тесное сотрудничество между всеми шарами.
Этот уровень ограничен максимум 60 ходами. Это то, что делает это немного сложнее. Магниты заставляют шары останавливаться при перемещении, но они расходуются (т.е. одноразовое использование). Квадрат в центре — это слот Iris — в него можно забить любой шар. Ключом к решению этого уровня за максимальное количество ходов является разумный выбор маршрутов мячей.
Это самый сложный уровень в этих примерах. Сапоги (выбираемый предмет) после использования добавляют 10 дополнительных ходов к лимиту ходов. Три предмета ботинка добавляют в общей сложности 30 дополнительных ходов. Чтобы решить уровень, вам нужно их потреблять, иначе у вас закончатся ходы. Но если вы пойдете за ботинками, вам также придется потратить несколько ходов, так что это требует тщательной стратегии. Маленькие мозги и X2 — это просто необязательные предметы, которые дают некоторый балл.
Я рассматривал (но не пробовал) некоторые алгоритмы поиска пути, такие как A*, но они полагаются на вопрос «насколько мы близки к цели?» свойство, которого эта проблема на самом деле не имеет.
Я хочу бросить вам вызов здесь. Что вам нужно, так это хорошая эвристика, чтобы дать вам нижнюю границу количества ходов, необходимых для перехода к решению.
Предполагая, что ваша игра похожа на эту игру, существуют разные способы использования эвристик, обеспечивающих более низкие оценки.
Некоторые из них могут включать в себя более простые алгоритмы решения проблем.
Одной из таких эвристик может быть:
Для каждой фигуры рассчитайте минимальное количество ходов, чтобы довести ее до целевого состояния, при условии, что все остальные фигуры расставлены наиболее удобным образом.
Сумма ходов, необходимых для каждой фигуры, является нижней границей общего количества необходимых ходов.
Будет ли этого достаточно, чтобы найти решение в вашем конкретном случае, трудно сказать без конкретного примера.