基础作战单元抽象类
实训需求
1、创建作战单元
2、大兵 实现 地对地攻击
2、防空兵 可以开启地对空,地对地模式切换
3、飞行兵 可以空对空,空对地
4、对象间攻击防御值不同
package test;
public abstract class CombatUnit {
public String name;
public int health;
public int attackvalue;
public int defense;
public int domain;
public abstract void attack(CombatUnit c); //定义攻击方法
public abstract void defense(CombatUnit s,CombatUnit d,Result r); //定义防御方法
public String toString() {
return name;
}
}
定义结果返回实体类
package test;
public class Result {
public int code=0;
public String msg="攻击失败";
}
定义人类实体类
package test;
public class Human extends CombatUnit{
public Human() {
health=400;
domain=0; // 0陆地,1水上,2空中
}
public void attack(CombatUnit c) {
Result r= new Result();
c.defense(this,c,r);
System.out.println(r.msg);
};
public void defense(CombatUnit s,CombatUnit d,Result r) {
int h=d.health;
d.health=d.health-s.attackvalue+d.defense;
r.msg="["+s.name+"]攻击["+d.name+"]对方生命值从"+h+",被去掉"+s.attackvalue+" ,防御:"+d.defense+"还剩"+s.health;
r.code=1;
};
}
定义飞行兵
package test;
public class FlySoldier extends Human implements IFligth {
public FlySoldier() {
name="飞行兵";
attackvalue=80;
this.defense=10;
}
public void defense(CombatUnit s,CombatUnit d,Result r) {
if(s.domain!=0) {
super.defense(s, d, r);
r.code=1;
}else{
r.msg="["+s.name+"]攻击["+d.name+"]地面打不到空中";
r.code=0;
}
}
@Override
public int flyhigh() {
// TODO Auto-generated method stub
return 0;
};
}
定义大兵
package test;
public class Soldier extends Human{
public Soldier() {
this.name="大兵";
this.attackvalue=50;
this.defense=20;
}
}
定义防空接口
package test;
public interface IAirDefense {
public void airDefense(); //打开对空模式
public void closeAirDefense(); //关闭对空,开启对地模式
}
定义防空兵
package test;
public class AirDefenseSoldier extends Soldier implements IAirDefense {
public AirDefenseSoldier() {
this.name="防空兵";
this.attackvalue=80;
this.defense=10;
this.airDefense();
}
@Override
public void airDefense() {
this.domain=1;
}
@Override
public void closeAirDefense(){
this.domain=0;
}
}
运行调用类
package test;
public class test02 {
public static void main(String[] args) {
Soldier s1,s2;
s1=new Soldier();
s2=new Soldier();
FlySoldier fs1=new FlySoldier();
AirDefenseSoldier ads1=new AirDefenseSoldier();
s1.attack(fs1);
s1.attack(s2);
s2.attack(s1);
fs1.attack(s1); //飞行兵攻击大兵
ads1.attack(fs1);
ads1.closeAirDefense(); //关闭防空模式
ads1.attack(fs1);
}
}
运行结果
[大兵]攻击[大兵]对方生命值从400,被去掉50 ,防御:20还剩370
[大兵]攻击[大兵]对方生命值从400,被去掉50 ,防御:20还剩370
[飞行兵]攻击[大兵]对方生命值从370,被去掉80 ,防御:20还剩310
[防空兵]攻击[飞行兵]对方生命值从400,被去掉80 ,防御:10还剩330
[防空兵]攻击[飞行兵]地面打不到空中