【发布时间】:2015-11-17 14:40:28
【问题描述】:
虽然还有许多其他关于克隆的问题,但我一直在阅读他们的答案,据我所知,我似乎已经完成了人们所说的大部分内容。
在我的 Checkers Java 游戏中,棋盘状态表示为包含 Checker 类对象的 2D 数组。为了实现 MiniMax AI,您需要创建一个搜索树来遍历可能的游戏状态并评估它们。由于某种原因,我的克隆技术没有奏效。
目前发生的情况是,MiniMax 算法不断在主要游戏数组中移动 Checkers,因此一旦它决定了要进行的最佳移动,Checker 将不再移动,并引发空指针错误。
我想知道是否有人可以看看我的克隆并告诉我哪里出错了:
游戏板构造器:
public PlaySpace(Chequer[][] chequerBoard)
{
setState(chequerBoard);
}
设置状态方法:
public void setState(Chequer[][] state)
{
Chequer[][] newBoard = new Chequer[8][8];
for(int i = 0; i < state.length; i++){
newBoard[i] = state[i];
}
chequerBoard = newBoard;
}
创建一个新的游戏板并将当前状态的值克隆到其中:
PlaySpace child = new PlaySpace(board.returnState());
child.setState(board.returnState());
child.moveChequer(move.returnCurrentX(),move.returnCurrentY(),move.returnDestX(),move.returnDestY());
提前非常感谢您! 如果我能提供更多信息,请告诉我。
干杯, 路易斯
【问题讨论】:
-
您能否详细说明您认为它将“克隆”某些东西的地方?
-
在您的构造函数中,您将覆盖参数的值;您也可以根本不传递参数。在您的
setState方法中,您将state中的引用复制到一个局部变量中,然后该变量被丢弃。 -
我也认为a read through this 可能会让你自己修复错误。
-
感谢您的反馈,在编辑中产生了细微的差异:1) chequerBoard = newBoard;以设置状态添加。 2) 构造函数改为简单地调用 setState 方法。尽管如此,在 MiniMax 搜索期间,当前的板正在更改,而不是预期的克隆板......感谢您迄今为止的帮助!
标签: java artificial-intelligence clone minimax cloning