我正在嘗試用alpha-beta修剪實現tic tac腳趾的minimax算法。現在我的程序正在運行,但它似乎沒有工作。每當我運行它似乎在所有的廣場輸入垃圾。我已經實現了這個功能,這樣我的極大極小功能就進入了一個電路板狀態,並修改了這個狀態,這樣當電路板完成時,電路板狀態就包含了下一個最好的移動。然後,我將「this」設置爲等同於修改過的電路板。這裏是我的功能極大極小算法:用於Tic Tac腳趾失敗的MiniMax算法
void board::getBestMove() {
board returnBoard;
miniMax(INT_MIN + 1, INT_MAX -1, returnBoard);
*this = returnBoard;
}
int board::miniMax(int alpha, int beta, board childWithMaximum) {
if (checkDone())
return boardScore();
vector<board> children = getChildren();
for (int i = 0; i < 9; ++i) {
if(children.empty()) break;
board curr = children.back();
if (curr.firstMoveMade) { // not an empty board
board dummyBoard;
int score = curr.miniMax(alpha, beta, dummyBoard);
if (computerTurn && (beta > score)) {
beta = score;
childWithMaximum = *this;
if (alpha >= beta) break;
} else if (alpha < score) {
alpha = score;
childWithMaximum = *this;
if (alpha >= beta) break;
}
}
}
return computerTurn? alpha : beta;
}
vector<board> board::getChildren() {
vector<board> children;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (getPosition(i, j) == '*') { //move not made here
board moveMade(*this);
moveMade.setPosition(i, j);
children.push_back(moveMade);
}
}
}
return children;
}
,這裏是我的全部文件,如果有人想嘗試運行它:
的.cpp:http://pastebin.com/ydG7RFRX .H:http://pastebin.com/94mDdy7x
我固定在你的代碼的縮進和按摩它變成一個更緊湊的格式。請在下次發帖之前親自完成。 – Richard
推測董事會的建設者將在這裏感興趣。請包括它。 – Richard
類構造函數包含在粘貼文件夾中。感謝您的幫助!這是我第一次問一個問題。 – gacharya