继承和接口的的使用

又是抄代码的一天 每日更新 转载 https://blog.csdn.net/weixin_44170221/article/details/104574963

做一个代码小游戏
创建NamedRole抽象类

package magic;

import aoi.Role;

public abstract class  NamedRole implements Role{
    private  String name;
    private int age;


    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;
    }

    @Override
    public int attack() {
        return 0;
    }

    @Override
    public void practise() {

    }
}

创建Role 接口

package aoi;

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

}

先写法师
创建MagicStick 接口

package aoi;

public interface MagicStick {
    public  int fire(); //表示法师使用法杖
}

在创建BlackStick和GreenStick类
用来判段一年之内什么时间段来修炼的若如果6到8月份修炼等级加2级
其他就加1级

package magic;

import aoi.MagicStick;

import java.util.Date;

public class BlackStick implements MagicStick {
Date d=new Date();

    @Override
    public int fire() {
        if (d.getMonth() %2==0){
            return 2;
        }
        return 1;
    }



}

```bash

import aoi.MagicStick;

import java.util.Date;

public class GreenStick implements MagicStick {
    Date d=new Date();

    @Override
    public int fire() {
        if (d.getMonth()>=6&&d.getMonth()<=8){
            return 2;
        }
        return 1;
    }
}

创建Magicer类来在测试界面传入值
写了判断法师是否装备法杖如果装备 攻击力等于修炼后的等级*5也就是如果装备法杖法师的修炼等级会提高从而攻击力增加。

package magic;

import aoi.MagicStick;

    public class Magicer extends NamedRole{
    private int level;//等级
    private MagicStick stick;//是否佩戴法杖

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

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

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

    }


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

    public void practise() {
        level++;
        if (stick != null) {
            level += stick.fire();
        }
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        if (level<1||level>10){
            System.out.println("等级错误");
            return;
        }
        this.level = level;
    }

    public MagicStick getStick() {
        return stick;
    }

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

测试类法师

   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()+"\t"+"等级"+magicer1.getLevel());
       System.out.println(magicer2.getName() + "\t" + "年龄:" + magicer2.getAge() + "\t" + "初始攻击伤害:" + magicer2.attack()+"\t"+"等级"+magicer2.getLevel());
       magicer1.practise();
       magicer2.practise();
       System.out.println(magicer1.getName() + "\t" + "年龄:" + magicer1.getAge() + "\t" + "修炼后的攻击伤害:" + magicer1.attack()+"\t"+"等级"+magicer1.getLevel());
       System.out.println(magicer2.getName() + "\t" + "年龄:" + magicer2.getAge() + "\t" + "修炼后的攻击伤害:" + magicer2.attack()+"\t"+"等级"+magicer2.getLevel());

结果

基拉法师 年龄:21 初始攻击伤害:50 等级10
光鳞龙 年龄:15 初始攻击伤害:25 等级5
基拉法师 年龄:21 修炼后的攻击伤害:65 等级13
光鳞龙 年龄:15 修炼后的攻击伤害:40 等级8

这是是7月的修炼经验
为什么是3级因为修炼就会加一级在加上应为月份增加的2个等级所以就是三级

战士

创建Weapon接口和法师的一样就是战斗力的增加变成了根据年龄和姓名

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

创建两个兵器类
Pike和Bolo类
大刀

package magic;

import aoi.Weapon;

import java.nio.file.Watchable;

public class Bolo implements Weapon { //武器大刀

private  Soldier s;//武器持有者

    //private int age;
    @Override
    public void setSoldier(Soldier s) {
        this.s=s;
    }

    public Soldier getS() {
        return s;
    }

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


    @Override
    public int fire() {

        if (s.getAge() >= 18) {
            return 100;
        } else {
            return 50;
        }

    }
}
   
  

创建长矛类Pike

package magic;

import aoi.Weapon;

public class Pike implements Weapon {
    private  Soldier s;//武器持有者
    private String name;//要输入的武器名称

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

    public Soldier getS() {
        return s;
    }

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

    public String getName() {
        return name;
    }

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

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

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


    }

}

创建Soldier类

package magic;

import aoi.Weapon;

public class Soldier  extends NamedRole{

    private Weapon weapon; //兵器名字
    private  int hurt;//伤害

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

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



    public Weapon getWeapon() {
        return weapon;
    }

    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }

    public int getHurt() {
        return hurt;
    }

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

    @Override
    public int attack() {
        int result = hurt;
        if (weapon != null) {
            result += weapon.fire();
        }
        return result;
    }

    @Override
    public void practise() {
        hurt += 10;
    }

}

创建战士测试类


Soldier soldier1 = new Soldier("Ziph", 21, 200);
Soldier soldier2 = new Soldier("狂战士", 30, 150);
Weapon weapon1 = new Bolo();
Weapon weapon2 = new Pike("Ziph");
soldier1.setWeapon(weapon1);
soldier1.setWeapon(weapon2);
soldier2.setWeapon(weapon1);
soldier2.setWeapon(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());

战士结果

Ziph 年龄:21 佩戴了大刀和矛之后的攻击伤害:1200
狂战士 年龄:30 佩戴了大刀和矛之后的攻击伤害:1150
Ziph 年龄:21 佩戴了大刀和矛,加以修炼后的攻击伤害:1210
狂战士 年龄:30 佩戴了大刀和矛,加以修炼后的攻击伤害:1160
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值