鱼C论坛

 找回密码
 立即注册
查看: 1454|回复: 3

[已解决]遇到这样一个题目 半天没有头绪 来这碰碰运气

[复制链接]
发表于 2023-9-17 19:31:42 | 显示全部楼层
这道题目可以用面向对象的思想来解决,需要用到构造器、多态、继承、封装等概念。下面是一个可能的解决方案:

首先,我们可以定义一个角色类  Role ,它包含角色的基本属性和方法:

  1. public abstract class Role {
  2.     private String name; // 角色名称
  3.     private int hp; // 角色血量

  4.     public Role(String name, int hp) {
  5.         this.name = name;
  6.         this.hp = hp;
  7.     }

  8.     public String getName() {
  9.         return name;
  10.     }

  11.     public int getHp() {
  12.         return hp;
  13.     }

  14.     public void setHp(int hp) {
  15.         this.hp = hp;
  16.     }

  17.     public abstract void attack(Role target); // 攻击方法,由子类实现
  18. }
复制代码


注意这里使用了抽象类和抽象方法,因为不同的角色有不同的攻击方式,需要由子类实现。

接下来,我们定义三个角色类  Human 、 Monster  和  Ghost ,它们继承自  Role ,并实现各自的攻击方法:

  1. public class Human extends Role {
  2.     public Human() {
  3.         super("Human", 50);
  4.     }

  5.     @Override
  6.     public void attack(Role target) {
  7.         if (target instanceof Ghost) {
  8.             target.setHp(target.getHp() - 10);
  9.             System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 10 HP.");
  10.         } else {
  11.             target.setHp(target.getHp() - 5);
  12.             System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 5 HP.");
  13.         }
  14.     }
  15. }

  16. public class Monster extends Role {
  17.     public Monster() {
  18.         super("Monster", 100);
  19.     }

  20.     @Override
  21.     public void attack(Role target) {
  22.         if (target instanceof Human) {
  23.             target.setHp(target.getHp() - 20);
  24.             System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 20 HP.");
  25.         } else {
  26.             target.setHp(target.getHp() - 10);
  27.             System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 10 HP.");
  28.         }
  29.     }
  30. }

  31. public class Ghost extends Role {
  32.     public Ghost() {
  33.         super("Ghost", 40);
  34.     }

  35.     @Override
  36.     public void attack(Role target) {
  37.         if (target instanceof Human) {
  38.             setHp(getHp() + 5);
  39.             System.out.println(getName() + " attacks " + target.getName() + ", " + getName() + " gains 5 HP.");
  40.         } else {
  41.             target.setHp(target.getHp() - 15);
  42.             System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 15 HP.");
  43.         }
  44.     }
  45. }
复制代码


注意这里使用了  instanceof  运算符来判断攻击对象的类型,从而实现不同的攻击效果。

最后,我们可以编写一个游戏类  Game ,它创建三个角色对象并让它们随机攻击随机对象,直到只剩下一个角色为止:

  1. import java.util.Random;

  2. public class Game {
  3.     public static void main(String[] args) {
  4.         Role[] roles = new Role[] {new Human(), new Monster(), new Ghost()};

  5.         Random random = new Random();

  6.         while (true) {
  7.             Role attacker = roles[random.nextInt(3)];
  8.             Role target = roles[random.nextInt(3)];

  9.             if (attacker == target || target.getHp() <= 0) {
  10.                 continue;
  11.             }

  12.             attacker.attack(target);

  13.             if (target.getHp() <= 0) {
  14.                 System.out.println(target.getName() + " is dead.");
  15.             }

  16.             int aliveCount = 0;
  17.             Role aliveRole = null;
  18.             for (Role role : roles) {
  19.                 if (role.getHp() > 0) {
  20.                     aliveCount++;
  21.                     aliveRole = role;
  22.                 }
  23.             }

  24.             if (aliveCount == 1) {
  25.                 System.out.println(aliveRole.getName() + " survive.");
  26.                 break;
  27.             }
  28.         }
  29.     }
  30. }
复制代码


注意这里使用了随机数来选择攻击者和攻击对象,以及使用了循环和条件语句来判断游戏结束的条件。

以上就是一个可能的解决方案,希望能够帮助到你。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表