如何将游戏推进到下一个关卡



在我的项目中,我正在设计一款包含三个关卡的游戏,每个关卡都以数组的形式呈现。在完成每个关卡后,游戏将自动进入下一个关卡。我现在让它从第1个关卡升级到第2个关卡,但在完成第2个关卡后,它只是重新加载第2个关卡。我的老师说我应该使用一个变量来决定我当前的关卡,并随着我进入下一个关卡而增加它,我也确实这么做了,所以我不确定为什么游戏会卡在第2个关卡上。他提到我应该使用一个静态变量,但我不明白这与我现在所做的有什么不同。

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

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

private char[][] level3 = {
{'#', '#', '#', '#', '#', '#', ' '},
{'#', ' ', ' ', ' ', ' ', '#', ' '},
{'#', ' ', '#', '@', ' ', '#', ' '},
{'#', ' ', '$', '*', ' ', '#', ' '},
{'#', ' ', '|', '*', ' ', '#', ' '},
{'#', ' ', ' ', ' ', ' ', '#', ' '},
{'#', '#', '#', '#', '#', '#', ' '},
};
public void act() {
\game code here
if (testLevelComplete() == true) {
levelComplete();   
}

}


public void levelComplete()
{
int currentLevel = 0;
currentLevel = currentLevel + 1;
showWarning("Level Complete! Current level is " + currentLevel);
if (currentLevel == 1) {
loadLevel(level1);
} else {
if (currentLevel == 2) {
loadLevel(level2);
} else {
if (currentLevel == 3) {
loadLevel(level3);
} else {
if (currentLevel > 3) {
showWarning("Level Complete! No more levels.");
}}}}


}

}```

当您检查下一个级别时,您将重新启动到0,然后重新添加1,因为currentLevel变量包含在方法中。

我建议你这样做:

private int currentLevel = 0; // make the variable global
// to update always the same and not restarting all time
public void levelComplete() { // your method
currentLevel++; // go to next level
showWarning("Level Complete! Current level is " + currentLevel);
if (currentLevel == 1) { // set lvl1
loadLevel(level1);
} else if (currentLevel == 2) { // set lvl2
loadLevel(level2);
} else if (currentLevel == 3) { // set lvl3
loadLevel(level3);
} else if (currentLevel > 3) { // completed
showWarning("Level Complete! No more levels.");
}
}

同时,与其使用else { if(...) },不如使用else if(...)

当你调用levelComplete方法,变量currentLevel将再次赋值为0。
如果你想保持变量的状态,你应该设置currentLevel变量作为类的成员变量。

和大多数主流编程语言一样,Java中的变量都是作用域的。通常用花括号{开始或结束一个作用域。

public void levelComplete()
{
int currentLevel = 0; // starts living here
// ... your code ...
} // `currentLevel` dies here and is gone

所以每次调用levelComplete,都从0开始。

因为关卡是你游戏状态的一部分,你应该将其移动为游戏对象的属性。这些属性和你的对象一样存在,例如:

public class Game {
// Lives as long as the containing Game object does
private int level = 0;
public void levelComplete() // shouldn't this rather be private?
{
this.level++;
}
}

最新更新