无法使用多种方法更新变量

时间:2015-05-20 13:39:55

标签: java methods

我正在尝试构建一个小游戏,当你完成前一个游戏时,它会在不同级别之间转换。

// 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级。

我的代码全部在循环中执行

编辑:对不起伙计们,第一次发布海报,并不确定如何正确呈现我的问题

我的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;
    }

}

direction()方法工作正常,它只是控制我的角色

1 个答案:

答案 0 :(得分: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);
    }