Java Game升级版

功能:设计一组类和接口,满足如下要求:(编译成功即可)
a.游戏模拟:兵种包括轰炸机、直升机、重型坦克、轻型坦克、音波坦克、步兵、飞行兵
b.轰炸机、直升机、飞行兵属于空军;步兵、轻型坦克、重型坦克属于陆军,音波坦克属于水陆两栖;
(提示:设计时,音波坦克内有标记inWater,在构造时填入,若为true,则表示目前音波坦克在水中,否则就是在陆地上)
c.轻型坦克、步兵只能攻击陆军,音波坦克只能攻击空军,轰炸机可攻击陆军、海军;重型坦克可攻击陆军、空军,直升机、飞行兵可攻击海军、陆军、空军;
并验证设计效果。(即向兵种变量填入海/陆/空军兵种,检测a.attack(b)的输出)

先画图:
在这里插入图片描述

interface 海军{;}
interface 陆军{;}
interface 空军{;}
interface 可对地攻击{
	default void attack(陆军 x) {System.out.print("可以攻击陆军");}
}
interface 可对空攻击{
	default void attack(空军 x) {System.out.print("可以攻击空军");}
}
interface 可对海攻击{
	default void attack(海军 x) {System.out.print("可以攻击海军");}
}
interface 可对地对海攻击 extends 可对地攻击,可对海攻击{;}
interface 可对地对空攻击 extends 可对地攻击,可对空攻击{;}
interface 可对地对海对空攻击 extends 可对地攻击,可对海攻击,可对空攻击{;}

abstract class 兵种{
	private String type;
	public 兵种(String x) { type=x;}
	public String getType() { return type;}
	public abstract void attack(兵种 x);
	public String attackInfo(兵种 x) {
		return type+"遇见"+x.getType();
	}
}
abstract class 飞行器 extends 兵种 implements 空军{
	public 飞行器 (String x) { super(x);}
}
class 轰炸机 extends 飞行器 implements 可对地对海攻击{
	public 轰炸机 () { super("轰炸机");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 音波坦克) {
			if( ((音波坦克)x).getInWater() )
				System.out.print("音波坦克在海里,可以攻击");
			else
				System.out.print("音波坦克在陆地,可以攻击");
			return;
		}
		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 音波坦克) {
			if( ((音波坦克)x).getInWater() )
				System.out.print("音波坦克在海里,可以攻击");
			else
				System.out.print("音波坦克在陆地,可以攻击");
			return;
		}
		if(x instanceof 海军) { attack((海军)x); return;}
		if(x instanceof 陆军) { attack((陆军)x); return;}
		if(x instanceof 空军) { attack((空军)x); return;}
		System.out.print("不能攻击!");
	}
}

abstract class 坦克 extends 兵种{
	public 坦克(String x) { super(x);}
}
class 重型坦克 extends 坦克 implements 陆军,可对地对空攻击{
	public 重型坦克 () { super("重型坦克");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) { 
			if(x instanceof 音波坦克 && ((音波坦克)x).getInWater()) 		
				System.out.print("音波坦克在海里,不能攻击!");
			else
				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 陆军) { 
			if(x instanceof 音波坦克 && ((音波坦克)x).getInWater()) 		
				System.out.print("音波坦克在海里,不能攻击!");
			else
				attack((陆军)x); 
			return;
		}
		System.out.print("不能攻击!");
	}
}
class 音波坦克 extends 坦克 implements 海军,陆军,可对空攻击{
	private int inWater;
	public 音波坦克 (int x) { 
		super("音波坦克");
		inWater = x;
	}	
	public boolean getInWater(){
		if(inWater == 1) return true;
		else return false;
	}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 空军) { attack((空军)x); return;}
		System.out.print("不能攻击!");
	}
}

abstract class 士兵 extends 兵种{
	public 士兵(String x) { super(x);}
}
class 步兵 extends 士兵 implements 陆军,可对地攻击{
	public 步兵 () { super("步兵");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 陆军) {
			if(x instanceof 音波坦克 && ((音波坦克)x).getInWater()) 		
				System.out.print("音波坦克在海里,不能攻击!");
			else
				attack((陆军)x); 
			return;
		}
		System.out.print("不能攻击!");
	}
}
class 飞行兵 extends 士兵 implements 空军,可对地对海对空攻击{
	public 飞行兵 () { super("飞行兵");}
	public void attack(兵种 x) {
		System.out.print("\n"+attackInfo(x)+":");
		if(x instanceof 音波坦克) {
			if( ((音波坦克)x).getInWater() )
				System.out.print("音波坦克在海里,可以攻击");
			else
				System.out.print("音波坦克在陆地,可以攻击");
			return;
		} 
		if(x instanceof 陆军) { attack((陆军)x); return;}
		if(x instanceof 海军) { attack((海军)x); return;}
		if(x instanceof 空军) { attack((空军)x); return;}
		System.out.print("不能攻击!");
	}
}
class App_Game{
	public static void main(String [] args) {
		兵种 [] obj = {new 直升机(),new 轰炸机(),new 音波坦克(1),
				      new 轻型坦克(),new 飞行兵(),new 步兵(),
				      new 重型坦克(),new 音波坦克(0)}; //1表示音波坦克在海里,0表示在陆地
		int i,j;
		for(i=0,j=obj.length-1;i<obj.length;i++,j--)
			obj[i].attack(obj[j]);
	}
}

在这里插入图片描述

//加了个要求,要判断音波坦克在海里还是在陆地
根据不同兵种子类可攻击的类型 ,在兵种子类中进行判断

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值