我很抱歉在先进的如果这是一个愚蠢的问题,只是要理解的事实,我是一个初学者,所以请不要太苛刻,我如果我问这样的东西。
我正在练习如何理解对象的属性如何相互作用(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.");
}
}
}
`
我也试过用构造函数来做,但我觉得这也是错误的,因为构造函数是用来初始化对象的,而不是用来等待特定的条件。
我很抱歉,如果这个问题是愚蠢的,我发誓我不知道如果你会笑这个想法“你为什么要去编程这样的东西?",我只是一个初学者,所以请容忍我。
2条答案
按热度按时间4ioopgfo1#
vojdkbi02#