2015-12-17 50 views
0

我正在製作棋盤遊戲,並且我必須根據滾動的dieRoll int使玩家在棋盤上的位置發生變化。但每次玩家擲骰子時,棋盤上的位置都不會改變。從一些故障排除來看,似乎是實際玩家的X和Y位置沒有改變,而不是板子顯示不正確。調用set方法後,玩家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(); 

我的播放器元素類有兩個靜態變量

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

set和get爲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方法有關,但無法弄清楚。

如果有人有任何想法是什麼問題是非常感謝。

+1

'INT playerPosX = A;'是局部聲明你的'setPosX'方法,這意味着它在你的實例字段沒有任何影響,使其'playerPosX = A;'或'this.playerPosX = A;'而不是 – MadProgrammer

回答

0

您設置本地變量的值,而不是您應該的值。你應該設置的是類變量,即實例變量。局部變量只對函數中的代碼可見,在其他地方不可見。一旦該功能完成,本地的價值就會丟失。這是實例變量和局部變量之間的區別。

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

我知道它必須是簡單的東西,謝謝! – Alkarin