Я использую игровое дерево в C++ для моего tictactoe.Реализация tictactoe tree
Идея такова: минимаксное дерево может иметь любое количество детей, в зависимости от ситуации с игрой. Уровни дерева обычно называются слоями. На каждом слое возможность играть («поворот») переключается на другого игрока.
Теперь важно: дерево начинается с текущего положения на плате, так как оно s root node. So each tree node consists of a list. The possible moves (from the computer
с точки зрения) являются членами этого списка.
Мой вопрос: как я могу построить это дерево? Очевидно, что текущее состояние платы должно быть каким-то образом определено, так что функция оценки знает, с чего начать поиск.
Struct node
{
Node* successors
// get available movecount
int count()
{
for (int count=0; count< free cells)
++count
}
Node* curr_board_state= root;
}
Node * root(Board b, int depth)
{
node.successorCount = int count();
node.value = board.GetValue;
if (depth > 0 && node.childCount > 0)
{
node.children = new Node * node.SuccessorCount;
for (int i = 0; i <= node.SuccessorCount; ++i)
node.Successor[i] = CreateTree(board.Move(i), depth - 1);
}
else
{
node.children = NULL;
}
return node;
}
Есть некоторые идеи. Надеюсь, кто-то может мне помочь.
возможно, это поможет: https://github.com/gosom/tic-tac-toe-gametree/blob/master/main.cpp – gosom
вы найдете полезные методы оптимизации, если будете искать альфа-бета-отсечку – sp2danny