コードのスニペットは、tictactoe ゲームでの位置の bestMove を計算するために作成されます。minRating != LOSING_POSITION という for ループの条件を除いて、コードのほぼすべての部分を取得しました。このコードは、指定された疑似コードの実装に由来します。
moveT FindBestMove(stateT state, int depth, int & rating) {
for (*each possible move or until you find a forced win*) {
*Make the move.
Evaluate the resulting position, adding one to the depth indicator.
Keep track of the minimum rating so far, along with the corresponding move.
Retract the move to restore the original state.*
}
*Store the move rating into the reference parameter.
Return the best move.*
}
for ループの 2 番目の条件を、forced win が見つかるまで指定されたコードと一致させることができませんでした。この事実とその minRating != LOSING_POSITION との類似点を見つけることができませんでした
moveT FindBestMove(stateT state, int depth, int & rating) {
Vector<moveT> moveList;
GenerateMoveList(state, moveList);
int nMoves = moveList.size();
if (nMoves == 0) Error("No moves available");
moveT bestMove;
int minRating = WINNING_POSITION + 1;
for (int i = 0; i < nMoves && minRating != LOSING_POSITION; i++) {
moveT move = moveList[i];
MakeMove(state, move);
int curRating = EvaluatePosition(state, depth + 1);
if (curRating < minRating) {
bestMove = move;
minRating = curRating;
}
RetractMove(state, move);
}
rating = -minRating;
return bestMove;
}
int EvaluatePosition(stateT state, int depth) {
int rating;
if (GameIsOver(state) || depth >= MAX_DEPTH) {
return EvaluateStaticPosition(state);
}
FindBestMove(state, depth, rating);
return rating;
}