gpt4 book ai didi

java - 即使返回后函数也会重复

转载 作者:行者123 更新时间:2023-11-30 06:14:54 24 4
gpt4 key购买 nike

我正在与电脑玩家制作井字游戏。但是,每当我调用计算机的 makeMove 方法时,计算机都会继续播放,而用户无法执行任何操作。为了确保该函数停止,我让它在每次移动后返回,但它仍然可以在没有用户输入的情况下玩整个游戏。

以下是相关部分:

类:

public String addToBoard(char c, int square) {
if (!spaceFull(board, square)) {
int[] coords = getRowAndColumn(square);
//System.out.println("[" + coords[0] + "][" + coords[1] + "]");
board[coords[0]][coords[1]] = c;
return "VALID";
} else {
System.out.println("Space Is Occupied");
return "OCCUPIED";
}
}
public boolean spaceFull(char[][] b, int square) {
return (twoDimenToOneDimen(b).get(square - 1) == 'X' || twoDimenToOneDimen(b).get(square - 1) == 'O');
}

计算机类

public void makeMove() {
int square;
//Checks For Any Winning Computer Moves
System.out.println("Here");
if ((square = nextMoveWinCheck(playerChar)) != 0) {
board.addToBoard(playerChar, square);
return;
//Checks For Any Opponent Winning Moves
} else if ((square = nextMoveWinCheck(opponentChar)) != 0) {
board.addToBoard(playerChar, square);
return;
} else {
//Checks If Computer Has First Move
if (boardEmpty()) {
board.addToBoard(playerChar, 9);
return;
} else {
//Moves Into Opposite Corner if Bottom Corner is Occupied By Itself
if (!board.spaceFull(board.board,1) && board.board[2][2] == playerChar) {
board.addToBoard(playerChar, 1);
return;
//Move Into Center If Second Move or Possible
} else if (!board.spaceFull(board.board,5)) {
board.addToBoard(playerChar, 5);
return;
} else if ((square = emptyCorner()) != 0) {
board.addToBoard(playerChar, square);
return;
} else {
board.addToBoard(playerChar, randomEmptySpot());
return;
}
}
}
}

如果你想要完整的代码,它是:

最佳答案

您的问题出在您的计算机类Computer上。在第 57 行,您将 board.board 分配给 tempBoard。然而 tempBoard 仍然保留对对象 board.board 的引用,因此您所做的任何修改都会反射(reflect)在实际的板上。要解决此问题,请将板值复制到临时板: http://www.java2s.com/Code/Java/Collections-Data-Structure/clonetwodimensionalarray.htm

关于java - 即使返回后函数也会重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49442488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com