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