【问题标题】:Simple Java text based game loop简单的基于 Java 文本的游戏循环
【发布时间】:2017-02-10 22:36:05
【问题描述】:

所以我创建了一个简单的基于文本的游戏,但我的循环有问题。所以我的角色与同一个敌人进行了 3 场战斗,但战斗直到一个角色死亡才结束。使用我当前的代码,它只循环第一场战斗,但将战斗 2 和 3 留空。 玩家的生命值从一场战斗转移到另一场战斗,但敌人的生命值在随后的每场战斗中重置为 25。 以及如何让我的循环在角色死亡时立即停止? 我究竟做错了什么?

    Scanner keyboard = new Scanner(System.in);
    Random rand = new Random();
    int characterHP = 0, characterStrength = 0, weaponMin = 0, weaponMax = 0;
    int enemyHP = 0, enemyStrength = 0, enemyWeaponMin = 0, enemyWeaponMax = 0;
    boolean running = true, characterHasntDied = true, enemyHasntDied = true;
    int choice;
    String characterChoice = null;
    String enemyChoice = null;
    int ATK = 0, enemyATK = 0;



    for (int i = 1; i <= 3; i++) {
            ATK = rand.nextInt((weaponMax - weaponMin) + 1) + weaponMin;
            enemyATK = rand.nextInt((enemyWeaponMax - enemyWeaponMin) + 1) + enemyWeaponMin;

            int valueOfAttack = (ATK + characterStrength);
            int enemyValueOfAttack = (enemyATK + enemyStrength);



                enemyHP -= valueOfAttack;
                characterHP -= enemyValueOfAttack;

                if (enemyHP < 1) {
                    characterHasntDied = false;
                    System.out.println(characterChoice + " has defeated Goblin " + i);
                    break;

                } else if (characterHP < 1) {
                    characterHasntDied = false;
                    System.out.println(characterChoice + " is defeated in battle!");
                    break;
                }
            }
        }

【问题讨论】:

  • 似乎有些代码没有显示,例如。 characterHasntDied 在哪里定义?您能否在运行代码时包含它和实际输出。
  • 你会在战斗结束后重置数值(hp、characterHasntDied 等)吗?请提供所有重要的代码,请参阅stackoverflow.com/help/mcve。例如,删除代码中不改变值的部分(如 System.out.printlns),以便您的代码更易于理解。

标签: java if-statement for-loop while-loop


【解决方案1】:

不要使用break,因为它会脱离它的loop

   if (enemyHP < 1) {
    /*... */

  } else if (characterHP < 1) {
    /*... */
  }

模拟两个玩家之间的三场战斗

Scanner keyboard = new Scanner(System.in);
Random rand = new Random();
int PowerPlayer1 =200;
int PowerPlayer2 = 200;
boolean winner=false;
int ATKPlaayer1 = 0, ATKPlaayer2 = 0;
String Player1 = "Rogue";
String Player2 = "Goblin";    

for (int i = 1; i <= 3; i++) { // i many battles

        while(!winner) /*while there is no winner*/
        {
            /* The Random method can improve it*/
          ATKPlaayer1 = rand.nextInt(200);
          System.out.println(Player1+ "  Attack : " + ATKPlaayer1);
          PowerPlayer2-= ATKPlaayer1;
          System.out.println(Player2 + " Power Diminished by the Attack "+ Player1 + " of "+ PowerPlayer2);
          ATKPlaayer2 = rand.nextInt(200);
          System.out.println(Player2+ "  Attack : " + ATKPlaayer2);
          PowerPlayer1-=ATKPlaayer2;
          System.out.println(Player1 + " Power Diminished by the Attack "+ Player2 + " of "+ PowerPlayer1);
          if(PowerPlayer1<=0)
          {
                System.out.println(Player2  + " has Winner");
                winner=true;
          }
          else if(PowerPlayer2<=0)
          {
                System.out.println(Player1 + " has Winner");
                winner=true;
          }

        }
        /* Reset Variables */
         winner = false; 
         PowerPlayer1 =200;
         PowerPlayer2 =200;
      }

【讨论】:

  • 如何在满足条件后立即结束循环?例如,在我的输出中: ATK = 6 + 4 = 10 的地精攻击现在是 34 - 10 = 24 攻击力 = 3 + 8 = 11 地精的攻击现在是 14 - 11 = 3 地精攻击的 ATK = 6 + 4 = 10 盗贼生命值现在是 24 - 10 = 14 盗贼攻击,攻击力 = 3 + 8 = 11 地精生命值现在是 3 - 11 = -8 end here \n 而不是此处允许额外的敌人攻击 使用 ATK = 6 + 4 = 10 盗贼生命值的哥布林攻击现在为 14 - 10 = 4 盗贼已击败哥布林 2 盗贼与哥布林之战 3
  • 有一个休息退出论坛,所以你这样做的第一次迭代:)
猜你喜欢
  • 2021-06-25
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多