Java Game初级版

/*游戏模拟:兵种包括轰炸机、直升机、重型坦克、轻型坦克、步兵、飞行兵
轰炸机、直升机、飞行兵属于空军;其他属于陆军
轰炸机、轻型坦克、步兵只能攻击陆军;直升机、重型坦克、飞行兵可对空和对地;
模拟:构造一组兵种(各方混在一起),模拟相互间攻击的可能
*/

把题意用图来表示更为直观:
在这里插入图片描述

interface 陆军{;} //空方法体,仅起到标签作用
interface 空军{;}
interface 可对地攻击{
	default void attack(陆军 x){ //默认方法(至少JDK1.8版)
		System.out.print("可以攻击陆军");
	}
}
interface 可对空攻击{
	default void attack(空军 x) {
		System.out.print("可以攻击空军");
	}
}
interface 可对地对空攻击 extends 可对地攻击,可对空攻击{;}
abstract class 兵种{
	private String type;
	public String getType(){ return type;}
	public 兵种(String s) { type=s;}
	public abstract void attack(兵种 x); //所有兵种都能攻击
	public String attackInfo(兵种 x) { //给出兵种相互攻击时的输出信息
		return type+"攻击"+x.getType();
	}
}
abstract class 飞行器 extends 兵种 implements 空军{
	public 飞行器(String s) { super(s);}
}
class 轰炸机 extends 飞行器 implements 可对地攻击{
	public 轰炸机() { super("轰炸机");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			attack((陆军)x); return;
		}
		System.out.print("不能攻击!");
	}
}
class 直升机 extends 飞行器 implements 可对地对空攻击{
	public 直升机() { super("直升机");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			attack((陆军)x); return;
		}
		if(x instanceof 空军) {
			attack((空军)x); return;
		}
		System.out.print("不能攻击!");
	}
}
abstract class 坦克 extends 兵种 implements 陆军{
	public 坦克(String s) { super(s);}
}
class 重型坦克 extends 坦克 implements 可对地对空攻击{
	public 重型坦克() { super("重型坦克");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			attack((陆军)x); return;
		}
		if(x instanceof 空军) {
			attack((空军)x); return;
		}
		System.out.print("不能攻击!");
	}
}
class 轻型坦克 extends 坦克 implements 可对地攻击{
	public 轻型坦克() { super("轻型坦克");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			attack((陆军)x); return;
		}
		System.out.print("不能攻击!");
	}
}
abstract class 士兵 extends 兵种{
	public 士兵(String s) { super(s);}
}
class 步兵 extends 士兵 implements 陆军,可对地攻击{
	public 步兵() { super("步兵");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			attack((陆军)x); return;
		}
		System.out.print("不能攻击!");
	}
}
class 飞行兵 extends 士兵 implements 空军,可对地对空攻击{
	public 飞行兵() { super("飞行兵");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			attack((陆军)x); return;
		}
		if(x instanceof 空军) {
			attack((空军)x); return;
		}
		System.out.print("不能攻击!");
	}
}
class App{
	public static void main(String [] args) {
		兵种 [] obj = {new 重型坦克(), new 重型坦克(), new 轻型坦克(), 
				new 轰炸机(),new 直升机(), new 步兵(),new 轻型坦克(), 
				new 轰炸机(),new 直升机(), new 步兵()};
		int i,j;
		for(i=0,j=obj.length-1;i<obj.length;i++,j--)
			obj[i].attack(obj[j]);
	}
}


/*注:在轰炸机类中:
 * 接口“可对地攻击”有方法:attack(陆军 x),这个方法不是抽象方法,可缺省
 * 所以,在此类中可以不实现attack(陆军 x)
 * 但,轰炸机是“兵种”的子类,中有抽象方法:attack(兵种 x)
 * 所以在此类中需实现attack(兵种 x)
 * 其它类同理
 * */

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值