Итак, я искал Mini-max для игры в крестики-нолики, но не мог понять, как работает рекурсия? Итак, в основном, вот мои вопросы:
- Как минимакс узнает, чья сейчас очередь? Как лучше всего указать игрока, чей ход он генерирует?
- Как вы генерируете возможные ходы?
- Как узнать, что вы находитесь в терминальном узле, и как вы генерируете конечные узлы?
Например, в этом псевдокоде
function integer minimax(node, depth)
if node is a terminal node or depth <= 0:
return the heuristic value of node
α = -∞
for child in node: # evaluation is identical for both players
α = max(α, -minimax(child, depth-1))
return α
node
правильная ли плата? И это глубина, на сколько слоев должен пройти код в рекурсии? Также что такое функция max
и откуда генерируются узлы?
Теперь у меня есть этот код для создания доски:
class Board{
public:
Board();
~Board(){};
public: // The board
// In the board, 1 is x, 2 is o, 0 is empty square.
int board[3][3];
};
Но откуда мне знать, чья сейчас очередь? И как мне сгенерировать дочерние узлы для платы?