ищите оценочную функцию в tictactoe 3d игре - PullRequest
0 голосов
/ 14 апреля 2010

Я пытаюсь применить минимаксный алгоритм для игры tictactoe 3D в c ++. Я изо всех сил пытаюсь найти хорошую функцию оценки для этого.

Кто-нибудь знает, где есть хороший ресурс для поиска функции оценки?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 14 апреля 2010

Эвристика не нужна. Есть только 3 ^ 27 состояний, вы можете перечислить их все и вычислить оптимальную игру.

0 голосов
/ 14 апреля 2010

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

0 голосов
/ 14 апреля 2010

Вот что я бы использовал:

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

Пример (псевдокод):

const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board
//The above values are arbitrary - adjust to what you think makes sense.

score = 0;
for all rows in all directions:
    count Xs and Os
    if (xs>0 && os==0)
        score += markScore[xs];
    else if (os>0 && xs==0)
        score -= markScore[os];
return score;

Это должно работать хорошо, потому что любая строка с оценками только одного игрока дает этому игроку шанс на победу.

...