Искусственный интеллект для карточной битвы на основе игры

Я хочу сделать карточную игру, основанную на битве. В этой карте есть определенные атрибуты, которые могут увеличить hp / атаку / защиту игрока или атаковать врага, чтобы уменьшить его hp / атаку / защиту

Я пытаюсь сделать ИИ для этой игры. ИИ должен предсказать, какую карту он выберет, исходя из текущих ситуаций, таких как hp / attack / defense AI и hp / attack / defense врага. Поскольку ИИ не может видеть карту противника, следовательно, он не может предсказывать будущие ходы

Я искал несколько методов ИИ, таких как minmax, но я думаю, что minmax не подойдет, так как ИИ не может предсказать дальнейшие движения.

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

Можете ли вы предложить методику для такой игры. Спасибо

2 ответа

Решение

Это не тема ActionScript 3 как таковая, но я думаю, что это довольно интересно.

Сначала я бы предложил выбрать Чемпионат мира по ускорению Stardust Yu-Gi-Oh 2009 для Nintendo DS или аналогичной игры.

В игре достаточно продвинутая система компьютерного ИИ, которая имеет дело не только с ожидаемым преимуществом или недостатком с точки зрения очков жизни, но также с преимуществом карты и комбинациями. Если вы принимаете такой вызов, я определенно рекомендую вам провести необходимое исследование (плюс, когда игра в видеоигры является исследованием, кто может жаловаться?)

Мое предложение по созданию ИИ заключается в следующем: когда компьютер решит свое движение, создайте массив объектов Move. Затем попросите его создать новый объект Move для каждого возможного перемещения, которое он может видеть.

Для каждого объекта перемещения подсчитайте, сколько HP будет иметь противника, сколько у него карт, сколько существ и т. Д.

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

Более сложные ИИ также подумают на несколько ходов заранее и, возможно, "увидят" ходы, которые другие не видят.

Я предлагаю вам взглянуть на эту игру Реверси, которую я построил несколько недель назад для развлечения во Flash. Здесь реализован очень базовый ИИ, но основы могут быть применены к вашей ситуации.

По сути, способ работы игры - после каждого хода (игрок или процессор, поэтому я могу определить, сделал ли игрок правильный ход по сравнению с тем, что сделал бы процессор), я создаю вектор для каждого возможного легального хода. Затем я решаю, какое движение обеспечивает наибольшее изменение счета, и устанавливаю это как лучший ход. Однако я также проверяю, не приведет ли этот ход к тому, что другой игрок будет иметь доступ к углу (если вы никогда не играли, игрок, который захватывает углы, обычно побеждает). Если это произойдет, я скажу процессору избежать этого хода и проверим второй лучший ход и так далее. Конечным результатом является процессор, который действительно может сражаться.

Имейте в виду, что это всего лишь один день работы (для всей игры, от дрянного графического интерфейса пользователя до функциональности для ИИ), поэтому он очень простой, и я мог бы делать такие вещи, как запуск будущих возможных ходов через последовательность проверок, а также, Забавный факт, однако, мои ходы (на которых я основывал ИИ, очевидно) - это те, которые ЦП будет делать почти в 80% случаев. Единственный случай, когда это не так, - это когда я играю в игру, как вы играете в шахматы, где ваш ход сделан исключительно для позиционирования хода на четыре поворота вниз по линии.

Для вашей игры у вас есть куча переменных, которые нужно учитывать, а не одна шкала, как у меня. Я бы предложил перечислить каждую вещь и применить значение балла к каждой вещи, чтобы вы могли применить значения важности к каждой из них. Я сделал нечто подобное для системы кеширования, которая автоматически определяет, какой файл является наиболее важным для хранения, в зависимости от возраста, использования, размера и т. Д. Затем вы смотрите на каждую карту в руке процессора, рассчитываете значение каждой карты и разыгрываете эту карту. (конечно, при условии, что это законно).

Как только вы поймете это, вы можете посмотреть на вещи, например, что каждый ход может сделать в следующем ходу (то есть значения "урона" для каждого хода). И как только это будет сделано, вы можете добавить к нему функциональность, которая позволит процессору делать стратегические шаги, которые позволят им использовать более мощную карту или выполнить "завершающий" ход, или, тем не менее, он будет работать в конце.

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

Я прошу прощения за длину этого ответа, но я надеюсь, что это поможет в некотором роде.

Другие вопросы по тегам