【问题标题】:How to Generate Random Damage Points for Game? - Java如何为游戏生成随机伤害点? - 爪哇
【发布时间】:2019-09-27 14:30:37
【问题描述】:

我正在构建一个迷你游戏,其中两个怪物互相战斗(一个对手和玩家)。当回合开始时,怪物应该战斗并且他们的健康点减少1、2、3、4或5。

我正在使用 Math.random 来随机化对每个怪物造成的伤害。

程序运行和回合开始时如何减少每个怪物的生命值?

这是我目前的代码(Monster.java 文件):

import java.util.Random;

public class Monster {
    // Monster properties
    private String name;
    private int health;
    private int damage;

    // Random damage points that vary from 1 to 5
    int randomDamagePoints = (int)(Math.random() * 1 + 5);

    // Constructor
    public Monster(String name, int health, int damage) {
        this.name = "Monster";
        this.health = 50;
        this.damage = 2;
    }

    // Opponent attacks Monster 1 - Player
    public void AttackPlayer(Monster player) {
        while(health > 0) {
            // Part I need help with
        }
    }

    // Player attacks Monster 2 - Opponent
    public void AttackOpponent(Monster opponent) {
        while(health > 0) {
            // Part I need help with
        }
    }
}

感谢您的帮助!

【问题讨论】:

  • 有什么问题?将int randomDamagePoints = (int)(Math.random() * 1 + 5); 放入函数AttackOpponent 并返回计算值并从健康或其他东西中减去它。
  • 另外,您现在实际上并没有使用他们的damage stat。例如,您可以生成一个随机值,例如 1 到 5,然后将其乘以它们的伤害,这样您就可以调整怪物的强度。例如,使用更大的数字可能会很有用,以免强度从13(或小数)。

标签: java random


【解决方案1】:

首先,关于你的伤害公式:

int randomDamagePoints = (int)(Math.random() * 1 + 5);

这总是会导致 5。你想要

int randomDamagePoints = (int)(Math.random() * 5 + 1);

如果你想让伤害逐轮变化,你应该把它放在它自己的函数或攻击函数中。另外,我建议您只有一个attack 函数,称为attackMe,并带有损坏参数。然后从生命值中减去伤害,比如

public boolean attackMe(int damage) {
  health -= damage;
  return hitPoints > 0;
}

【讨论】:

  • 感谢您纠正我的伤害公式!我很感激。 +1
【解决方案2】:

您似乎正在尝试确定在这两种情况下他们会在 1 到 5 之间互相造成伤害时谁会赢。

为此,您可以使用以下内容:

import java.util.Random;

public class Monster {
  // Monster properties
  private String name;
  public int health; //public so that Monsters hitting each other can manipulate health.
  private int damage;

  public int getRandomDamage() {
    return (int)(Math.random() * 5 + 1);
  }

  public void Fight(Monster opponent) {
    while (this.health > 0 && opponent.health > 0) {
      opponent.health -= this.getRandomDamage();
      this.health -= opponent.getRandomDamage();
    }
    if (opponent.health>this.health) {
      System.out.println(this.name + " lost!");
    } else {
      System.out.println(opponent.name + " lost!");
    }
  } 

}

希望这会有所帮助!

【讨论】:

  • 感谢您的帮助!这对我也有用;感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2015-04-05
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
相关资源
最近更新 更多