调用 set 方法后玩家 X 和 Y 的位置没有改变

Player X and Y position not changing after calling set method

我正在制作棋盘游戏,我必须根据滚动的 dieRoll int 更改棋盘上的玩家位置。但每次玩家掷骰子时,棋盘上的位置都不会改变。从一些故障排除来看,似乎是实际玩家的 X 和 Y 位置没有改变,而不是面板显示不正确。

我的掷骰子和移动玩家方法

public void rollDiceAndMovePlayer(){
    setDice();
    throwField.setText(String.valueOf(getDice()));
    //player1.setPosX(2) to test PosX change, doesn't work.
    player1.setPosX(2);
    if(player1.getPosY() == BOARD_SIZE - 1){
        if(player1.getPosX() < BOARD_SIZE - 1 ){
            player1.setPosX(player1.getPosX()+getDice());
        } else {
            //only accepting winning roll
            if(player1.getPosX() + getDice() == BOARD_SIZE - 1){
                //CHANGE TO JOPTIONPANE ##################################
                System.out.println("You win!");
            }
        }
    }
    else if(player1.getPosX()+getDice() > BOARD_SIZE -1){
        player1.setPosY(player1.getPosY()+1);
        player1.setPosY(player1.getPosY()+getDice() - BOARD_SIZE);
    }
    else{
        player1.setPosX(player1.getPosX()+getDice());
    }
    display();

我的播放器元素 class 有两个静态变量

private int playerPosX = 0;
private int playerPosY = 0;

X 和 Y 的设置和获取方法:

public void setPosX(int a){
    int playerPosX = a;
}
public int getPosX(){
    return playerPosX;
}

我已经确保板的显示方法确实移除旧板并重新打印。我在 rollDiceAndMovePlayer 方法中玩了一个 JOptionPane 来测试 dieRoll 和玩家 X 和 Ys,看起来 X 和 Ys 保持在 0。我什至让我的教授看过我的代码,他也找不到问题。我倾向于认为这是 setPosX/Y 方法的问题,但无法弄清楚。

如果有人知道问题出在哪里,我们将不胜感激。

您设置的是局部变量的值,而不是您应该设置的值。您应该设置的是 class 变量,即实例变量。局部变量仅对函数中的代码可见,其他任何地方都看不到。一旦该函数完成,本地的值就会丢失。这就是实例变量和局部变量的区别。

public void setPosX(int a){
    //int playerPosX = a;   incorrect
    this.playerPosX = a;    correct
}