【问题标题】:How to progress game to next level如何将游戏升级到下一个级别
【发布时间】:2021-11-24 03:12:03
【问题描述】:

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

【问题讨论】:

    标签: java arrays static-variables


    【解决方案1】:

    当您检查下一个级别时,您重新开始为 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(...)

    【讨论】:

    • 我尝试了这段代码,但仍然无法正常工作。它仍然不会超过 1。
    • “过去 1”是什么意思?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我尝试了这段代码,但仍然无法正常工作。它仍然不会超过 1。
      • 请用您当前的代码更新您的问题(尽量保持简短)。否则我不知道出了什么问题。
      猜你喜欢
      • 2023-03-09
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多