在java中开发国际象棋游戏时,我的棋盘对象没有得到正确修改

在java中开发国际象棋游戏时,我的棋盘对象没有得到正确修改,java,object,scope,chess,Java,Object,Scope,Chess,所以我对Java语言相当陌生,所以这里一定有一些东西我忘记了。所以作为家庭作业,我必须用Java创建一个国际象棋游戏。到目前为止,我已经为一个“棋子”创建了一个类,以及另一个名为“GameState”的类,其中包含游戏的棋盘。Pawn类有一个名为move()的方法,该方法获取棋盘上要移动的点的x和y坐标以及当前游戏状态对象,move()函数将把棋子移动到棋盘上的该点。pawn类是从一个名为“Piece”的抽象类扩展而来的,我创建的所有其他特定Piece类都将继承自该类 我的问题是move()方法

所以我对Java语言相当陌生,所以这里一定有一些东西我忘记了。所以作为家庭作业,我必须用Java创建一个国际象棋游戏。到目前为止,我已经为一个“棋子”创建了一个类,以及另一个名为“GameState”的类,其中包含游戏的棋盘。Pawn类有一个名为move()的方法,该方法获取棋盘上要移动的点的x和y坐标以及当前游戏状态对象,move()函数将把棋子移动到棋盘上的该点。pawn类是从一个名为“Piece”的抽象类扩展而来的,我创建的所有其他特定Piece类都将继承自该类

我的问题是move()方法没有在GameState类中正确修改棋盘

下面是pawn类的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));