Функция оценки абстрактной стратегии игры - PullRequest
1 голос
/ 02 декабря 2010

Я пишу абстрактную стратегическую игру на C # и XNA. Что касается ИИ, в настоящее время я использую Negascout и глубину 5. Ниже приводится описание игры:

Игра состоит из доски 6х7 шестиугольных локаций, 42 шестиугольных фишек и 6 фигур (1 король и 5 пешек) для каждого игрока (максимум 2 игрока).

Во время первой фазы игры игроки поочередно помещают случайную плитку в пустое место на доске. Каждая плитка может иметь максимум 6 стрелок, указывающих по краям. Некоторые стрелки могут быть двухточечными. Стрелки обозначают направление / направление движения от этой плитки. Двойная стрелка заставляет фигуру перемещаться / прыгать на 2 локации, если есть корректная локация. Игрокам не разрешается размещать плитки в ряду противника, если на доске все еще остаются пустые места.

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

Хорошо, теперь к моей функции генерации хода.

  1. Этап укладки плитки а) Поместите плитку в ближайший ряд. Плитка вращается, чтобы найти оптимальное вращение. б) Как только ближайший ряд заполнен, поместите плитку в пустое место, окруженное участками со всех сторон (т.е. без края доски). Вращайте плитку, чтобы найти оптимальное вращение. c) Если места не найдены, добавьте все оставшиеся пустые места, пытаясь найти оптимальное вращение.

  2. Стадия размещения короля а) Найдите место с лучшей плиткой и поместите туда короля. б) Поместите оставшиеся пешки в оставшиеся пустые места в ряду.

  3. этап движения а) Если король атакован, попытайтесь атаковать атакующую фигуру, если эта фигура не защищена. б) Добавить ходы для всех фигур игрока, которые подвергаются нападению. c) Добавьте все фигуры противника, которые игрок может атаковать. d) Добавить все места, в которые игрок может перейти.

Теперь к функции оценки.

  1. Этап укладки плитки счет = количество плиток, размещенных текущим игроком + плитки текущего игрока в ближайшем ряду - нет. плиток противника, размещенных до сих пор - плитки противника в самом дальнем ряду (ближайшем к противнику).

  2. Этап размещения короля счет = плитки текущего игрока в ближайшем ряду - плитки противника в дальнем ряду (ближайшем к противнику).

  3. этап движения счет = значение фигур текущего игрока - значение фигур противника.

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

ценность фигуры = тип фигуры (король = 10000, пешка = 1000) + мобильность + защита - атакован - проницательность - заблокирован

, где: мобильность = нет. узел локаций может перемещаться в (свободный или занятый противником) * 1000 защищенный = нет. текущих фигур игрока, окружающих эту фигуру, которые могут фактически перемещаться в это место * 1000 атаковал = нет. фигуры противника, окружающие эту фигуру, которые действительно могут переместиться в эту локацию Часть заблокирован = (король = -10000, пешка = -1000) не может двигаться, потому что все стрелки указывают на недопустимые локации, и у фигуры нет шансов снова двигаться в этой игре.

Довольно долго, но вот мои проблемы:

  1. При размещении плиток ИИ иногда размещает плитку, используя неправильное вращение (т. Е. Размещает плитку в том месте, где стрелки указывают на недопустимые места). Иногда это происходит в его «домашнем» ряду.

  2. При перемещении фигур ИИ игнорирует безопасность короля. Ходит в основном королем и захватывается примерно за 4-6 ходов.

У кого-нибудь, особенно с опытом шахматного ИИ, есть идеи и предложения о том, как улучшить мой ИИ, в частности мои функции генерации и оценки ходов?

Спасибо Иван

Кстати ... Если кто-то заинтересован в том, чтобы попробовать почту, просто дайте мне знать, и я загрузлю настройки на моем сайте.

1 Ответ

2 голосов
/ 04 декабря 2010

Довольно долго, но вот мои проблемы:

Довольно долго, действительно.

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

Другими словами, в вашем коде есть ошибка. Нет никакого способа ответить на этот вопрос, даже со всей этой обширной преамбулой. Этот вопрос должен быть в отдельном, кратко сформулированном вопросе, который включает копию соответствующего кода.

При перемещении фигур ИИ игнорирует безопасность короля. Ходит в основном королем и захватывается примерно за 4-6 ходов.

То же, что и выше. На этот вопрос нельзя ответить, даже если вы написали обширную преамбулу.

Мой вам совет: будьте более лаконичны со своими вопросами, публикуйте только детали, относящиеся к проблеме, а не объединяйте несколько вопросов в один пост.

У кого-нибудь, особенно с опытом шахматного ИИ, есть идеи и предложения о том, как улучшить мой ИИ, в частности мои функции генерации и оценки ходов?

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

...