三目並べゲームの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 α
Anode
ボードは正しいですか?そして、コードが再帰的に下がらなければならない層の深さはどれくらいですか?また、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];
};
しかし、誰の番かをどうやって知ることができますか?また、ボードの子ノードを生成するにはどうすればよいですか?