用接口,写一个简单的小游戏

role接口:角色攻击跟修炼

  public interface Role {
    int attack();//表示攻击,返回值表示对敌人的伤害
    void practise();// 表示练习。练习之后对敌人的伤害会增加
}

MagicStick 接口:法师用的法杖

public interface MagicStick {
    int fire();
}

Weapon 接口:战士适用的武器

public interface Weapon {
    void setSoldier(Soldier s);// 该方法表示设置武器的使用者
    int fire(); //该方法的返回值表示战士使用该武器时,对敌人的伤害值
}

法师所使用的两种法杖类

public class GreenStick implements MagicStick {
    //获取当前时间
    Calendar calendar = Calendar.getInstance();
    //获取当前月份
    int month = calendar.get(Calendar.MONTH)+1;
    /**
     *   判断月份是否为夏天
     *      如果为夏天(6-8)则返回:2;
     *      正常时间返回:1
     */
    public int fire() {
        if(month >=6 && month <=8){
            return 2;
        }else {
            return 1;
        }
    }
public class BlackStick implements MagicStick {
    Calendar calendar = Calendar.getInstance();
    int month = calendar.get(Calendar.MONTH)+1;

    @Override
    public int fire() {
        if(month % 2 == 0){
            return 2;
        }else {
            return 1;
        }
    }

法师类:法师的一些基本信息

public class Magicer extends NamedRole {

    private MagicStick stick;
    private int level = 0;

    /**
     * 返回的伤害量
     *      伤害量为等级*5
     */

    @Override
    public int attack() {
        return level * 5;
    }

    @Override
    public void practise() {
        //如果法师的stick为空,则法师等级+1
        //如果不为空,则等级为:原本等级+1+stick属性中fire方法的返回值
        if(stick == null){
            level++;
        }else {
            level = level + 1 + stick.fire();
        }
    }

    public Magicer(String name, MagicStick stick, int level) {
        super(name);
        this.stick = stick;
        this.level = level;
    }

    public Magicer(int age, MagicStick stick, int level) {
        super(age);
        this.stick = stick;
        this.level = level;
    }

    public Magicer(String name, int age, int level) {
        super(name, age);
        this.level = level;
    }

    public Magicer(String name) {
        super(name);
    }

    public Magicer(int age) {
        super(age);
    }

    public Magicer(String name, int age) {
        super(name, age);
    }

    public MagicStick getStick() {
        return stick;
    }

    public void setStick(MagicStick stick) {
        this.stick = stick;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }
}

战士的武器类1

public class Bolo implements Weapon {
    private Soldier s;
    private int age;
    @Override
    public void setSoldier(Soldier s) {
        this.s = s;
    }
    @Override
    public int fire() {
        s = new Soldier(age);
        if(s.getAge()>=18){
            return 100;
        }else {
            return 50;
        }
    }

    public Soldier getS() {
        return s;
    }

    public void setS(Soldier s) {
        this.s = s;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

战士的武器类2

public class Pike implements Weapon {
    private String name;
    private Soldier s;


    @Override
    public void setSoldier(Soldier s) {
      this.s = s;
    }

    @Override
    public int fire() {
       s = new Soldier(name);
       if(s.getName() == name){
           return 1000;
       }else{
           return 25;
       }
    }


    public Pike(String name, Soldier s) {
        this.name = name;
        this.s = s;
    }

    public Pike(Soldier s) {
        this.s = s;
    }

    public Pike(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Soldier getS() {
        return s;
    }

    public void setS(Soldier s) {
        this.s = s;
    }

战士类:用来存放战士的基本信息

public class Soldier extends NamedRole {
    private int hurt;
    private Weapon w;


    @Override
    public int attack() {
        return hurt+w.fire();
    }

    @Override
    public void practise() {
        hurt += 10;
    }
    public Weapon getW() {
        return w;
    }

    public void setW(Weapon w) {
        this.w = w;
    }

    public Soldier(String name, Weapon w) {
        super(name);
        this.w = w;
    }

    public Soldier(int age, Weapon w) {
        super(age);
        this.w = w;
    }

    public Soldier(String name, int age, Weapon w) {
        super(name, age);
        this.w = w;
    }

    public Soldier(int age, int hurt, Weapon w) {
        super(age);
        this.hurt = hurt;
        this.w = w;
    }

    public Soldier(String name, int age, int hurt, Weapon w) {
        super(name, age);
        this.hurt = hurt;
        this.w = w;
    }

    public Soldier(String name, int age, int hurt) {
        super(name, age);
        this.hurt = hurt;

    }

    public Soldier(String name) {
        super(name);
    }

    public Soldier(int age) {
        super(age);
    }

    public Soldier(String name, int age) {
        super(name, age);
    }

    public int getHurt() {
        return hurt;
    }

    public void setHurt(int hurt) {
        this.hurt = hurt;
    }

NamedRole 类:两种角色的父类

public abstract class NamedRole implements Role {
    private String name;//角色名
    private int age;//年龄

    /**
     * 父类的两个方法
     * @return
     */
    @Override
    public int attack() {
        return 0;
    }

    @Override
    public void practise() {

    }

    public NamedRole(String name) {
        this.name = name;
    }

    public NamedRole(int age) {
        this.age = age;
    }

    public NamedRole(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

测试类;

  public static void main(String[] args) {
        //实例化法师武器
        MagicStick magicStick1 = new GreenStick();
        MagicStick magicStick2 = new BlackStick();
        //添加法师数据
        Magicer magicer1 = new Magicer("基拉法师", 21, 10);
        Magicer magicer2 = new Magicer("光鳞龙", 15, 5);
        //将法杖给予法师
        magicer1.setStick(magicStick1);
        magicer2.setStick(magicStick2);
        //打印法师初始信息和伤害
        System.out.println(magicer1.getName() + "\t" + "年龄:" + magicer1.getAge() + "\t" + "初始攻击伤害:" + magicer1.attack());
        System.out.println(magicer2.getName() + "\t" + "年龄:" + magicer2.getAge() + "\t" + "初始攻击伤害:" + magicer2.attack());
        //法师修炼,调用Role接口中practise();
        magicer1.practise();
        magicer2.practise();
        //打印修炼后的信息和伤害
        System.out.println(magicer1.getName() + "\t" + "年龄:" + magicer1.getAge() + "\t" + "修炼后的攻击伤害:" + magicer1.attack());
        System.out.println(magicer2.getName() + "\t" + "年龄:" + magicer2.getAge() + "\t" + "修炼后的攻击伤害:" + magicer2.attack());
        System.out.println("-----------------------------------------------------------------");
        //添加战士信息
        Soldier soldier1 = new Soldier("Ziph", 21, 200);
        Soldier soldier2 = new Soldier("狂战士", 30, 150);
        //实例化武器
        Weapon weapon1 = new Bolo();
        Weapon weapon2 = new Pike("Ziph");
        //将武器给予战士
        soldier1.setW(weapon1);
        soldier1.setW(weapon2);
        soldier2.setW(weapon1);
        soldier2.setW(weapon2);
        //展示信息
        System.out.println(soldier1.getName() + "\t" + "年龄:" + soldier1.getAge() + "\t" + "佩戴了大刀和矛之后的攻击伤害:" + soldier1.attack());
        System.out.println(soldier2.getName() + "\t" + "年龄:" + soldier2.getAge() + "\t" + "佩戴了大刀和矛之后的攻击伤害:" + soldier2.attack());
        //修炼
        soldier1.practise();
        soldier2.practise();
        //修炼成果
        System.out.println(soldier1.getName() + "\t" + "年龄:" + soldier1.getAge() + "\t" + "佩戴了大刀和矛,加以修炼后的攻击伤害:" + soldier1.attack());
        System.out.println(soldier2.getName() + "\t" + "年龄:" + soldier2.getAge() + "\t" + "佩戴了大刀和矛,加以修炼后的攻击伤害:" + soldier2.attack());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值