有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将游戏升级到下一个级别

在我的项目中,我正在设计一个有三个关卡的游戏,每个关卡都以数组的形式排列。完成每一关后,游戏将自动进入下一关。我现在让它从第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.");
        }}}}
        
        
    }
    
}```

共 (3) 个答案

  1. # 1 楼答案

    与大多数主流编程语言一样,变量在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++;
        }
    }
    
  2. # 2 楼答案

    调用levelComplete方法时,变量currentLevel将再次分配给0
    如果要保持变量状态,应将currentLevel变量设置为类的成员变量

  3. # 3 楼答案

    检查下一个级别时,将重新启动到0,然后重新添加1,因为currentLevel变量是include in method

    我建议你这样做:

    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(...)