我正在尝试用 Java 编写一个小型 AI 算法来实现 miniMax 算法。
以此为基础的游戏是两人游戏,其中两名玩家每回合移动一次,每个棋盘位置导致每个玩家得分。玩家 X 的位置的“质量”是通过从玩家 X 在该位置的得分中减去对手的得分来评估的。每一步都用一个整数表示(即输入 1 移动一,输入 2 移动二等)
我知道 miniMax 应该使用递归来实现。目前我有:
一种evaluate()
方法,它将表示棋盘状态的对象(即“BoardState”对象和称为“max”的布尔值(签名将是evaluate(BoardState myBoard, boolean max))作为参数。
轮到玩家 X 时 max 为真。给定一个棋盘位置,它将评估所有可能的移动并返回对玩家 X 最有利的移动。如果轮到对手,max 将为 false,该方法将返回对玩家 X 最不利的移动(即:对玩家 y 最有利)
但是,我在编写实际miniMax
方法时遇到了困难。我的一般结构是这样的:
public int miniMax(GameState myGameState, int depth)
因此我提交了初始的游戏状态和我希望它研究的“深度”。
然后我会有类似的东西:
int finalMove = 0;
while(currentDepth < depth) {
GameState tmp = myGameState.copy();
int finalMove = evaluate(tmp, true or false);
iniMax(tmp.makeMove(finalMove));
}
return finalMove;
这听起来像是一个合理的实现吗?有什么建议么?:)
谢谢!