我正在尝试构建一个小游戏,当你完成前一个游戏时,它会在不同级别之间转换。
// 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()方法工作正常,它只是控制我的角色
答案 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);
}