用于井字游戏故障的最小最大算法
MiniMax Algorithm for Tic Tac Toe failure
我正在尝试通过 alpha-beta 修剪为井字实现最小最大值算法。现在我正在运行该程序,但它似乎不起作用。每当我运行它时,它似乎都会在所有方块中输入垃圾。我已经实现了它,以便我的 minimax 函数采用板状态并修改该状态,以便在完成后,板状态包含下一个最佳移动。然后,我将"this"设置为等于修改后的电路板。以下是我针对最小最大值算法的函数:
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
您的代码可能存在许多问题...你肯定发布了很多。因为你在问你的问题,所以你有责任先自己尝试一切,然后将你的问题减少到澄清正在发生的事情所需的最小数量的代码。事实上,我觉得你没有花太多精力来问这个问题。
但也许我仍然可以提供一些帮助:
void board::getBestMove() {
board returnBoard;
miniMax(INT_MIN + 1, INT_MAX -1, returnBoard);
*this = returnBoard;
}
看看你怎么说*this = returnBoard
.
那一定意味着你想从miniMax
那里拿回一块板子。
但是看看miniMax
是如何定义的!
int board::miniMax(int alpha, int beta, board childWithMaximum)
它通过传递值接受childWithMaximum
,因此无法以这种方式返回板。
你想说的可能是:
int board::miniMax(int alpha, int beta, board & childWithMaximum)
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 在C++游戏中与库存系统作斗争
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 井字游戏具有奇怪行为的最小最大值算法(C++)
- 用于井字游戏故障的最小最大算法
- 实现井字游戏的极大极小算法
- 游戏的匹配算法
- 在C++中实现井字游戏的最小最大值算法
- 自动多人游戏中的坑洞,玩家可以使用自己的算法
- C++中的文字搜寻游戏算法
- 允许测试AI算法的游戏
- 2d游戏引擎裁剪算法