首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java战斗模拟器-我想模拟1000场战斗,以跟踪英雄赢/输的次数

Java战斗模拟器-我想模拟1000场战斗,以跟踪英雄赢/输的次数
EN

Stack Overflow用户
提问于 2019-03-14 17:03:38
回答 2查看 190关注 0票数 1

我真的是java世界的新手,我现在正在学习,IFs/FORs/WHILEs等等。为了保持对这个主题的兴趣,我让我的书呆子那一面自由了:)

我想模拟1000场战斗,一个英雄和一个地精之间的战斗。两者都有他们的属性和d20投掷来决定他们是否击中((d20+bonus)>敌人护甲)。如果他们击中,他们处理相关的dmg,并不断交换爆炸,直到两人中的一人死亡。每次地精的HPs降到0以下时,英雄的得分为“胜利”,相反的情况下,英雄的得分为“失败”。

当循环重复1000次时,模拟中断,显示英雄有多少胜利和失败。

这是我失败的code.It继续无限计算胜利的数量,没有重置小精灵和英雄的生命,也没有计算失败的数量。有人能用简单的结构来帮助我理解哪里出了问题吗?

代码语言:javascript
复制
import java.util.Random;
public class Random2 {
    public static void main(String[] args) {

        Random rand = new Random();

        int wins = 0, defeats = 0;
        int hpHero = 20, armorHero = 8, dmgHero = 4, bonusHero = 1;
        int hpGoblin = 10, armorGoblin = 5, dmgGoblin = 3, bonusGoblin = 1;

        for (int played = 0; played <= 1000; played++) {

            while (hpHero > 0 || hpGoblin > 0) {
                int d20Hero = rand.nextInt(19);
                d20Hero += 1;

                if ((bonusHero + d20Hero) > armorGoblin) {
                    System.out.println("You hit the goblin with a die result of " + (bonusHero + d20Hero));
                    hpGoblin -= dmgHero;
                    System.out.println("HP Goblin: " + hpGoblin);
                    if (hpGoblin > 0) {
                        int d20Goblin = rand.nextInt(19);
                        d20Goblin += 1;

                        if ((bonusGoblin + d20Goblin) > armorHero) {
                            System.out.println("Goblin hit the human with a die result of " + (bonusGoblin + d20Goblin));
                            hpHero -= dmgGoblin;
                            System.out.println("HP Hero: " + hpHero);

                            if (hpHero < 1) {
                                defeats++;
                                System.out.println("Defeats are: " + defeats);
                            }
                        }
                    } else {
                        wins++;
                        System.out.println("Wins are: " + wins);
                    }
                }


            }
        }

    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-03-14 17:20:59

有一件事我可以相对肯定地说,您的程序似乎缺少一种在每次战斗之间恢复hpHerohpGoblin的机制。您可以按如下方式执行此操作。

代码语言:javascript
复制
    for (int played = 0; played <= 1000; played++) {
        hpHero = 20;
        hpGoblin = 10;
        while (hpHero > 0 || hpGoblin > 0) {

然而,我认为可能还有更多的问题。

票数 1
EN

Stack Overflow用户

发布于 2019-03-14 17:30:49

我试着尽可能少地修改你的代码,但是我建议花点时间重新考虑一下,因为它有点太复杂了。

我注意到的两件事是

  • 你永远不会重置战斗人员的HP
  • 地精的攻击取决于英雄的攻击(嵌套的if表示除非英雄有一次成功的攻击否则地精不会攻击)

这是更新后的版本

代码语言:javascript
复制
public class Random2 {

  public static void main(String[] args) {

    Random rand = new Random();

    int wins = 0, defeats = 0;
    int armorHero = 8, dmgHero = 4, bonusHero = 1;
    int armorGoblin = 5, dmgGoblin = 3, bonusGoblin = 1;

    // fight 1000 times
    for (int played = 0; played <= 1000; played++) {
      // start with full stats after each fight
      int hpHero = 20;
      int hpGoblin = 10;

      // while both combatants are still alive
      while (hpHero > 0 || hpGoblin > 0) {
        // hero rolls
        int d20Hero = rand.nextInt(19);
        d20Hero += 1;
        // if hero can hit then do the dmg
        if ((bonusHero + d20Hero) > armorGoblin) {
          System.out.println("You hit the goblin with a die result of " + (bonusHero + d20Hero));
          hpGoblin -= dmgHero;
          System.out.println("HP Goblin: " + hpGoblin);
        }

        // if the goblin is still alive then it rolls
        if (hpGoblin > 0) {
          int d20Goblin = rand.nextInt(19);
          d20Goblin += 1;

          // if the goblin can hit then do the dmg
          if ((bonusGoblin + d20Goblin) > armorHero) {
            System.out.println("Goblin hit the human with a die result of " + (bonusGoblin + d20Goblin));
            hpHero -= dmgGoblin;
            System.out.println("HP Hero: " + hpHero);

            // if hero died then count defeat
            if (hpHero < 1) {
              defeats++;
              System.out.println("Defeats are: " + defeats);
            }
          }
        } else { // if goblin did not survive then count a win for the hero
          wins++;
          System.out.println("Wins are: " + wins);
        }
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55158513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档