当对象的变量变成特定条件时,Java中的OOP是否可能自动调用方法?

olhwl3o2  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(85)

我很抱歉在先进的如果这是一个愚蠢的问题,只是要理解的事实,我是一个初学者,所以请不要太苛刻,我如果我问这样的东西。
我正在练习如何理解对象的属性如何相互作用(OOP)我试着模仿一个游戏场景作为我的练习想法,我在每个物体创建时初始化生命值和攻击值,我创造了一个攻击方法,只是减少被攻击实体的生命值,我想完成的是,每当被攻击实体的生命值变为零或更少,它会自动将其值重新赋值为0,并打印一条消息“敌人已被消灭”

这就是我的班级'

public class Character {
    
    int HP;
    int ATK;
    
}

class Player extends Character {
    
    // default values
    public Player() {
        HP = 100;
        ATK = 40;
    }
    
    // attack method
    public void attack(Enemy a) {
        a.HP -= this.ATK;
    }
    
    
}

class Enemy extends Character {
    
    public Enemy() {
        HP = 50;
        ATK = 10;
    }
    
    public void attack(Player a) {
        a.HP -= this.ATK;
    }
}

`

在main方法中使用它:

`

public class Main {
    
    public static void main(String[] args) {
        
        // instantiation
        Player p = new Player();
        Enemy e1 = new Enemy();
        
                
        System.out.println("Player's HP: " + p.HP); // 100
        System.out.println("Enemy's HP: " + e1.HP + "\n"); // 50
    
        
        System.out.println("*Enemy attacking Player*");
        e1.attack(p);
        System.out.println("Player's HP: " + p.HP); // 90
        System.out.println("Enemy's HP: " + e1.HP + "\n"); // 50

        System.out.println("*Player attacking Enemy*");
        p.attack(e1);
        System.out.println("Player's HP: " + p.HP); // 90
        System.out.println("Enemy's HP: " + e1.HP + "\n"); // 10

        p.attack(e1); 
        /* when I did it again, it will turn enemy's HP to -30 */
    }
}

`
就像我在前一句话里说的,我想要完成的不是让这个值继续递减到负数,我想把它的值设为零,并打印一条关于敌人灭亡的消息。
我不知道这是不是一种愚蠢的练习方式(我先道歉)
我试过这样做,但感觉不对。(但没有成功)[编辑]该值不受if语句的影响,即使敌人的生命值小于或等于0,也会发生同样的情况。

class Player extends Character {
    
    // default values
    public Player() {
        HP = 100;
        ATK = 40;
    }
    
    // attack method
        public void attack(Enemy a) {
                if (!(this.HP <= 0)) {
                a.HP -= this.ATK;
        } else {
            a.HP = 0;
            System.out.println("An enemy was terminated.");
        }
    }
    
}

`
我也试过用构造函数来做,但我觉得这也是错误的,因为构造函数是用来初始化对象的,而不是用来等待特定的条件。
我很抱歉,如果这个问题是愚蠢的,我发誓我不知道如果你会笑这个想法“你为什么要去编程这样的东西?",我只是一个初学者,所以请容忍我。

4ioopgfo

4ioopgfo1#

class Player extends Character {
    
    // default values
    public Player() {
        HP = 100;
        ATK = 40;
    }
    
    // attack method
    public void attack(Enemy a) {
        a.HP -= this.ATK;
        if(a.HP<=0){
            
            System.out.println("Enemy is Terminated");
            a.HP=0;
        }
    }
    
    
}
vojdkbi0

vojdkbi02#

class Player extends Character {
    
    // default values
    public Player() {
        HP = 100;
        ATK = 40;
    }
    
    // attack method
        public void attack(Enemy a) {
                if (!(this.HP <= 0)) {
                a.HP -= this.ATK;
        } else {
            a.HP = 0;
            System.out.println("An enemy was terminated.");
        }
    }
    
}`a.HP=12 , b.HP=12 , p.HP=32 System.out.println("");`

相关问题