首页 > 解决方案 > 如何将游戏升级到下一个级别

问题描述

对于我的项目,我正在设计一个具有三个级别的游戏,每个级别都设置为一个数组。完成每个级别后,游戏应自动进入下一个级别。我目前让它从第 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.");
        }}}}
        
        
    }
    
}```

标签: javaarraysstatic-variables

解决方案


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

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

所以每次你打电话levelComplete,你从零开始。

由于关卡是游戏状态的一部分,因此您应该将其上移以成为游戏对象的属性。只要您的对象存在,这些属性就会存在,例如:

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++;
    }
}

推荐阅读