在java中开发国际象棋游戏时,我的棋盘对象没有得到正确修改
所以我对Java语言相当陌生,所以这里一定有一些东西我忘记了。所以作为家庭作业,我必须用Java创建一个国际象棋游戏。到目前为止,我已经为一个“棋子”创建了一个类,以及另一个名为“GameState”的类,其中包含游戏的棋盘。Pawn类有一个名为move()的方法,该方法获取棋盘上要移动的点的x和y坐标以及当前游戏状态对象,move()函数将把棋子移动到棋盘上的该点。pawn类是从一个名为“Piece”的抽象类扩展而来的,我创建的所有其他特定Piece类都将继承自该类 我的问题是move()方法没有在GameState类中正确修改棋盘 下面是pawn类的move()方法的相关代码片段:在java中开发国际象棋游戏时,我的棋盘对象没有得到正确修改,java,object,scope,chess,Java,Object,Scope,Chess,所以我对Java语言相当陌生,所以这里一定有一些东西我忘记了。所以作为家庭作业,我必须用Java创建一个国际象棋游戏。到目前为止,我已经为一个“棋子”创建了一个类,以及另一个名为“GameState”的类,其中包含游戏的棋盘。Pawn类有一个名为move()的方法,该方法获取棋盘上要移动的点的x和y坐标以及当前游戏状态对象,move()函数将把棋子移动到棋盘上的该点。pawn类是从一个名为“Piece”的抽象类扩展而来的,我创建的所有其他特定Piece类都将继承自该类 我的问题是move()方法
public GameState move(GameState state, int xDest, int yDest) {
//Make sure that the destination coordinates are not outside of the board
if (xDest < 0 || yDest < 0 || xDest >= state.getBoardCols() || yDest >= state.getBoardRows())
return null;
/*
* A black piece moves forward on the downward pointing y
* axis, and a a white piece moves up. Thus, we assign a
* +1 to the variable if the piece is white, and -1 if the
* piece is black.
*/
int dir = (color.equals("black")) ? -1 : 1;
//In the case that the pawn is moving forward 2 spaces
if (firstMove == true && xCurr == xDest && yDest == yCurr + dir * 2) {
if (state.insertPiece(xDest, yDest, this)) {
firstMove = false;
//Null the old coordinates the Pawn was at
state.nullCoordinates(xCurr, yCurr);
return state;
} else
return null;
}
现在,在这个场景中,我有一个棋子,最初放在棋盘上的x=4,y=1(它的索引为[1][4],但不管怎样)。因此,这里的第一个move()调用将把它向前移动到x=4,y=3。现在,我已经通过调试器验证了,在pawntest.move()调用中,x=4,y=3的电路板确实包含了pawn。但是,当程序退出该方法的控制时,典当不再位于该位置,因此第二个断言等于失败。为什么董事会没有得到适当的修改
编辑:nvm,我发现了这个错误,原来我没有正确更新典当的位置,愚蠢的我:p你能给我们看看你的
insert()
函数吗?听起来你的Pawn
实例没有被更新。尽管我发现了这个bug,但事实证明Pawn的x和y坐标被提前更新了,谢谢@卡马尔你可能想考虑让你的游戏状态对象不变。
state = pawnToTest.move(state, 4, 1 + dir * 2);
assertEquals(false, pawnToTest.firstMove());
assertEquals(pawnToTest, state.getPiece(4, 1 + dir * 2));
assertEquals(null, state.getPiece(4, 1));