我在GameBoard课程中。在这个课程中,我试图创建一个GameTree,它返回一个列表,列出所有可能的下一步动作。当代码的这一部分运行时,它会影响GameBoard这个代码被包含它,导致所有动作实际上都是在GameBoard上进行的,我只是试图通过一次移动来返回它们。以下是GameBoard中的代码:
for(int i = 1; i < 7; i++)
{
for(int j = 1; j < 7; j++)
{
//if valid move, add a board with this move to the list
if(isValidMove(i, j))
{
GameBoard tempBoard = new GameBoard(slots);
//printout to make sure both object references are different, which they always are
System.out.println("this board: " + this + " temp: " + tempBoard);
tempBoard.makeMove(2, i, j); //use 2 as it is for the AI's move
tempBoard.rotateA();
tempBoard.setLastMove(i + " " + j + " " + "A");
System.out.println("Board with move " + tempBoard.getLastMove());
tempBoard.printBoard();
returnList.add(tempBoard);
}
}
}
我无法弄清楚为什么这不仅仅是创建一个新的GameBoard对象,播放有效的移动,并将其添加到列表中。相反,在这个for循环结束时,GameBoard充满了所有可能的动作。
编辑:Slots是GameBoard类的私有int [] []。
答案 0 :(得分:1)
最有可能的问题是,新游戏手柄还使用插槽和旧游戏手柄。 因此,当新游戏板在插槽上执行操作时,它会更改它们,并且因为旧游戏板也使用它们,其状态也会发生变化。
我不知道插槽的结构,但我假设您还应该为新游戏板创建一个新的插槽对象
答案 1 :(得分:-1)
一旦找到有效的移动,你需要突破循环。如果这是一个独立的方法,你可以使用return;将临时板添加到列表后。