s15443 2021-05-21 14:45 采纳率: 100%
浏览 108
已采纳

用java语言编写程序,不会写,跪求大佬帮忙看看这道题该怎么写?

表示射手的接口名为Adc,包含名为shoot的行为,表示一次射击造成若干伤害。不同的射手shoot造成的伤害不同,弓箭手每次伤害为10,飞镖客每次伤为12,害枪手每次为18,炮手每次伤害为30。

定义一个静态方法Kill表示不同射手攻击某目标的过程,设定目标的生命值,射手循环进行射击,直到目标生命值为0。

用类分别表示不同类型的射手,并用多态定义和调用Kill方法。

  • 写回答

3条回答 默认 最新

  • hweiyu00 2021-05-21 16:27
    关注
    /**
     * ADC
     */
    public abstract class Adc {
    
        /**
         * 伤害
         */
        public abstract Integer getHurt();
    
        /**
         * 射击
         * @param life 生命值
         */
        public void shoot(int life) {
            int hurt = this.getHurt();
            int count = 0;
            for (int i = 0; i < life; i += hurt) {
                System.out.println("第" + (++count) + "次射击");
            }
        }
    }
    
    /**
     * 弓箭手
     */
    public class Archer extends Adc {
    
        @Override
        public Integer getHurt() {
            return 10;
        }
    
        @Override
        public void shoot(int life) {
            System.out.println("弓箭手开始射击");
            super.shoot(life);
            System.out.println("弓箭手结束射击");
        }
    }
    
    /**
     * 飞镖客
     */
    public class FlyingEscort extends Adc {
    
        @Override
        public Integer getHurt() {
            return 12;
        }
    
        @Override
        public void shoot(int life) {
            System.out.println("飞镖客开始射击");
            super.shoot(life);
            System.out.println("飞镖客结束射击");
        }
    }
    
    /**
     * 炮手
     */
    public class Gunner extends Adc {
    
        @Override
        public Integer getHurt() {
            return 30;
        }
    
        @Override
        public void shoot(int life) {
            System.out.println("炮手开始射击");
            super.shoot(life);
            System.out.println("炮手结束射击");
        }
    }
    
    /**
     * 害枪手
     */
    public class Shooter extends Adc {
    
        @Override
        public Integer getHurt() {
            return 18;
        }
    
        @Override
        public void shoot(int life) {
            System.out.println("害枪手开始射击");
            super.shoot(life);
            System.out.println("害枪手结束射击");
        }
    }
    
    /**
     * Kill
     */
    public class Kill {
    
        public static void kill(int life, Adc adc) {
            adc.shoot(life);
        }
    
        public static void main(String[] args) {
            int life = 100;
            
            kill(life, new Archer());
    
            System.out.println();
            
            kill(life, new FlyingEscort());
    
            System.out.println();
    
            kill(life, new Gunner());
    
            System.out.println();
    
            kill(life, new Shooter());
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来