调用 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
}
我正在制作棋盘游戏,我必须根据滚动的 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
}