|
发表于 2023-9-17 19:31:42
|
显示全部楼层
这道题目可以用面向对象的思想来解决,需要用到构造器、多态、继承、封装等概念。下面是一个可能的解决方案:
首先,我们可以定义一个角色类 Role ,它包含角色的基本属性和方法:
- public abstract class Role {
- private String name; // 角色名称
- private int hp; // 角色血量
- public Role(String name, int hp) {
- this.name = name;
- this.hp = hp;
- }
- public String getName() {
- return name;
- }
- public int getHp() {
- return hp;
- }
- public void setHp(int hp) {
- this.hp = hp;
- }
- public abstract void attack(Role target); // 攻击方法,由子类实现
- }
复制代码
注意这里使用了抽象类和抽象方法,因为不同的角色有不同的攻击方式,需要由子类实现。
接下来,我们定义三个角色类 Human 、 Monster 和 Ghost ,它们继承自 Role ,并实现各自的攻击方法:
- public class Human extends Role {
- public Human() {
- super("Human", 50);
- }
- @Override
- public void attack(Role target) {
- if (target instanceof Ghost) {
- target.setHp(target.getHp() - 10);
- System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 10 HP.");
- } else {
- target.setHp(target.getHp() - 5);
- System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 5 HP.");
- }
- }
- }
- public class Monster extends Role {
- public Monster() {
- super("Monster", 100);
- }
- @Override
- public void attack(Role target) {
- if (target instanceof Human) {
- target.setHp(target.getHp() - 20);
- System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 20 HP.");
- } else {
- target.setHp(target.getHp() - 10);
- System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 10 HP.");
- }
- }
- }
- public class Ghost extends Role {
- public Ghost() {
- super("Ghost", 40);
- }
- @Override
- public void attack(Role target) {
- if (target instanceof Human) {
- setHp(getHp() + 5);
- System.out.println(getName() + " attacks " + target.getName() + ", " + getName() + " gains 5 HP.");
- } else {
- target.setHp(target.getHp() - 15);
- System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 15 HP.");
- }
- }
- }
复制代码
注意这里使用了 instanceof 运算符来判断攻击对象的类型,从而实现不同的攻击效果。
最后,我们可以编写一个游戏类 Game ,它创建三个角色对象并让它们随机攻击随机对象,直到只剩下一个角色为止:
- import java.util.Random;
- public class Game {
- public static void main(String[] args) {
- Role[] roles = new Role[] {new Human(), new Monster(), new Ghost()};
- Random random = new Random();
- while (true) {
- Role attacker = roles[random.nextInt(3)];
- Role target = roles[random.nextInt(3)];
- if (attacker == target || target.getHp() <= 0) {
- continue;
- }
- attacker.attack(target);
- if (target.getHp() <= 0) {
- System.out.println(target.getName() + " is dead.");
- }
- int aliveCount = 0;
- Role aliveRole = null;
- for (Role role : roles) {
- if (role.getHp() > 0) {
- aliveCount++;
- aliveRole = role;
- }
- }
- if (aliveCount == 1) {
- System.out.println(aliveRole.getName() + " survive.");
- break;
- }
- }
- }
- }
复制代码
注意这里使用了随机数来选择攻击者和攻击对象,以及使用了循环和条件语句来判断游戏结束的条件。
以上就是一个可能的解决方案,希望能够帮助到你。 |
|