我正在进行棋盘游戏,我必须根据掷出的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();
我的播放器Element类有两个静态变量
private int playerPosX = 0;
private int playerPosY = 0;
X和Y的set和get方法:
public void setPosX(int a){
int playerPosX = a;
}
public int getPosX(){
return playerPosX;
}
我已经确保电路板的显示方法确实会删除旧电路板并重新打印。我在rollDiceAndMovePlayer方法中玩了一个JOptionPane来测试dieRoll和玩家X和Ys,看起来X和Ys保持在0.我甚至让我的教授查看我的代码,他也找不到问题。我倾向于认为它与setPosX / Y方法存在问题,但无法弄明白。
如果有人知道这个问题是什么,我非常感激。
答案 0 :(得分:0)
您设置的是局部变量的值,而不是您应该的值。您应该设置的是类变量,即实例变量。局部变量只对函数中的代码可见,而不是其他地方。一旦该函数完成,本地的值就会丢失。这是实例变量和局部变量之间的区别。
public void setPosX(int a){
//int playerPosX = a; incorrect
this.playerPosX = a; correct
}