2015-05-20 31 views
-2

我正在嘗試構建一個小遊戲,當您完成前一個遊戲時,它會在各個級別之間進行轉換。無法使用多種方法更新變量

// The game starts at level 1. 
public int levelCounter = 1; 

//When levelComplete() executes it should increase the counter by 1. 
public int levelComplete() 
{ 

    if (testLevelComplete()) 
    { 
     showWarning("Level Complete!"); 
     levelCounter += 1; 

     return levelCounter; 
    } 
    else 
    { 
     return levelCounter; 
    } 
} 

//This method should check levelCounter for the level number and load the 
//appropriate level. 
public void levelChange() 
{ 

    if(levelCounter == 2) 
    { 
     setLevel(level2, 2); 
    } 
    else if(levelCounter == 3) 
    { 
     setLevel(level3, 3); 
    } 

} 

我的代碼工作,產生2級,但之後當我完成2它只是重新加載2級水平,我似乎不能增加反過去2

我的代碼全部爲在一個循環

編輯執行:對不起你們,第一次海報,wasnt真的知道如何正確地提出我的問題

我testLevelComplete()方法完美的作品,它給了我,當我完成我的水平的警告框。我認爲問題在於兩種方法和我的變量之間的範圍。

private final char[][] level1 = { 
    {'#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' '}, 
    {'#', ' ', '.', '#', ' ', ' ', ' ', ' ', ' ', ' '}, 
    {'#', ' ', ' ', '#', '#', '#', ' ', ' ', ' ', ' '}, 
    {'#', ' ', '@', ' ', ' ', '#', ' ', ' ', ' ', ' '}, 
    {'#', ' ', ' ', '$', ' ', '#', ' ', ' ', ' ', ' '}, 
    {'#', ' ', ' ', '#', '#', '#', ' ', ' ', ' ', ' '}, 
    {'#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' '} 
}; 

private final char[][] level2 = { 
    {'#', '#', '#', '#', '#', ' ', ' ', ' ', ' '}, 
    {'#', '@', ' ', ' ', '#', ' ', ' ', ' ', ' '}, 
    {'#', ' ', '$', '$', '#', ' ', '#', '#', '#'}, 
    {'#', ' ', '$', ' ', '#', ' ', '#', '.', '#'}, 
    {'#', '#', '#', ' ', '#', '#', '#', '.', '#'}, 
    {' ', '#', '#', ' ', ' ', ' ', ' ', '.', '#'}, 
    {' ', '#', ' ', ' ', ' ', '#', ' ', ' ', '#'}, 
    {' ', '#', ' ', ' ', ' ', '#', '#', '#', '#'}, 
    {' ', '#', '#', '#', '#', '#', ' ', ' ', ' '}, 
}; 

private final char[][] level3 = { 
    {'#', '#', '#', '#', '#', '#', ' '}, 
    {'#', ' ', ' ', ' ', ' ', '#', ' '}, 
    {'#', ' ', '#', '@', ' ', '#', ' '}, 
    {'#', ' ', '$', '*', ' ', '#', ' '}, 
    {'#', ' ', '.', '*', ' ', '#', ' '}, 
    {'#', ' ', ' ', ' ', ' ', '#', ' '}, 
    {'#', '#', '#', '#', '#', '#', ' '}, 
}; 

//This executes repeatedly 
public void act() 
{ 

    direction(); 

    levelComplete(); 

    levelChange(); 


} 


public void setLevel(char[][] level, int levelNum) 
{ 
    ClaraWorld nextLevel = new ClaraWorld(level, levelNum); 
    Greenfoot.setWorld(nextLevel); 
} 

public int levelCounter = 1; 

public void levelChange() 
{ 

    if(levelCounter == 2) 
    { 
     setLevel(level2, 2); 
    } 
    else if(levelCounter == 3) 
    { 
     setLevel(level3, 3); 
    } 

} 

public int levelComplete() 
{ 

    if (testLevelComplete()) 
    { 
     showWarning("Level Complete!"); 
     levelCounter += 1; 

     return levelCounter; 
    } 
    else 
    { 
     return levelCounter; 
    } 

} 

方向()方法工作正常,它只是控制我的性格

+0

的行爲表明,'testLevelComplete()'第一級之後返回false,所以你永遠不會遞增'levelCounter'一次。 – MadConan

+0

看起來你在完成一個關卡時調用'levelComplete()'。在這種情況下,如果級別不增加,則表示您的'testLevelComplete()'方法返回false。您是否在任何地方看到「Level Complete!」警告?編輯你的問題,並添加它的'代碼,如果是這種情況,你無法弄清楚它爲什麼返回'false' –

+0

'testLevelComplete()'做什麼? – vikingsteve

回答

0

也許你也應該重新考慮你的「建築師」。你爲什麼不把你的關卡存儲在數組或地圖中?那麼它會是這個樣子:

// declaration 
    private int currentLevel = 0; 
    private List<Level> levels = new ArrayList<Level>(); 

    // constructor 
    levels.add(new Level(level1)); 
    levels.add(new Level(level2)); 
    levels.add(new Level(level3)); 
    levels.add(new Level(level4)); 

    //methods 

    // test if level is completed 
    public boolean levelComplete() 
    { 
     if (testLevelComplete()){ 
      showWarning("Level Complete!"); 
      currentLevel++; 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    // change current level 
    public void levelChange(){ 
     setLevel(levels.get(currentLevel), currentLevel); 
    }