java - 一种文字冒险游戏战斗系统的方法

标签 java oop tags

我正在尝试为文本冒险游戏创建一个战斗系统,该系统会生成一个具有随机生命值池的随机敌人,但生成的每个敌人似乎没有自己的生命值池,相反,“主要”敌人生命值变量不断递减当受到攻击时。因此输出显示具有负生命值的新敌人,而不是新的生命值池。 到目前为止我的代码:

 public class Combat{

    //enemy variables
    private int enemyHealth = (int) (Math.random()*75);
    private int maxEnemyDamage = 25;
    private String enemyName;
    //player variables
    private int playerHealth = 100;
    private int playerDamage = 50;
    //health potion variables
    private int numHealthPotions = 3;
    private int healAmount = 30;
    private int dropChance = 50; //percentage

    public String getEnemyName() {
        String[] enemy = {"Zombie", "Witch", "Hell Dog", "Skeleton"};
        int i = (int) (Math.random() * 4);
        this.enemyName = enemy[i];
        return this.enemyName;
    }
    public int getEnemyHealth(){
        return enemyHealth;
    }
    public void enemyAppears(){
        String enemy = getEnemyName();
        System.out.println("A " + enemy + " has appeared with " + enemyHealth + " health.");
    }
    public void attack() {
        int damageTaken =(int) (Math.random() * maxEnemyDamage);
        int damageDealt =(int) (Math.random() * playerDamage);
        enemyHealth -= damageDealt - getEnemyHealth();
        playerHealth -= damageTaken;
        System.out.println("You strike for " + damageDealt);
        System.out.println("You have been hit for " + damageTaken);
        System.out.println("You have " + playerHealth + " hp left.\n The enemy has " + enemyHealth + " hp left.");
        if (playerHealth < 0){
            System.out.println("You died.");
            System.exit(15);
        }

调用这些方法的main方法:

 Combat combat = new Combat();
    Scanner input = new Scanner(System.in);
    System.out.println("Welcome to the dungeon");
    boolean running = true;
    GAME:
    while(running){

        combat.enemyAppears();

        System.out.println("Choose:\n1. To Attack \n2. To Heal \n3. To Run");
        String choice = input.next();
        if(choice.equals("1")) {
            combat.attack();
        } else if (choice.equals("2")){
            combat.heal();
        } else {
            combat.run();
            break;
        }
    }
}

我想将敌人作为对象生成(我只是随机生成名称),因为我认为这可以解决这个问题,但我不太清楚我的构造函数需要什么。我可以猜测为什么我的代码不起作用,但我也无法修复它。是否有一个简单的构造函数或 setter 可以解决这个问题?

最佳答案

你只有变量enemyHealth。如果您希望每个敌人都有自己的生命值变量,则必须使用 int[]。除了真正的 OOP 方法之外,还将敌人实现为对象。小注意事项:您也可以使用 java.util.Random 类来创建随机数。该类还将提供在给定范围内直接创建随机 int 的方法。

关于java - 一种文字冒险游戏战斗系统的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525207/

相关文章:

java - 如何让 onStart() 方法等到 onCreate() 方法完成

java - 我想将 excel 转换为 xml

c# - C# 中的一个接口(interface)和两个实现类(代理)

php - 如何从字符串中快速检索数组中的标签?

tags - OSM 标签中星号的含义

java - 不同类型骰子的骰子总和概率

java - 来自另一个类的多个 JButton Action 监听器

java - Java中的关键字 "new"是必要的吗

python - 正在定义的类型对象的类型提示

asp.net - 这些<% ... %>是什么?以及在页面中可以通过哪些方式使用它们