飞机大战的简单实现

在进行编写程序时,进行一个方法前写好方法的作用,这样查看也比较方便
一下是具体代码类,,图片自己找
//测试类
package day1_16;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;



public class PlaneGame extends JPanel{
//	定义两个常量设置窗口的宽高
	public static final int WIDTH=380;
	public static final int HEIGHT=670;
//	加载背景图片
	public static BufferedImage bg;
//	加载爱心
	public static BufferedImage life;
//	加载Boss血条
	public static BufferedImage Bosslife;
//	定义一个变量来统计敌机的死亡数
	int number=0;
//	定义一个变量来统计敌机打中英雄机的子弹个数
	int bulletBossNumer=0;
//	定义一个变量来统计分数
	int score=0;
//	定义一个变量来统计打中boss的子弹
	int bossBlutteNumber=0;
	public static int state=0;//标记游戏状态
	public static final int RUNNING=1;
	public static final int START=0;
	public static final int STOP=3;
	public static final int GAMEOVER=4;
	public static final int WIN=5;
	public static BufferedImage skill;
	public static BufferedImage start;
	public static BufferedImage stop;
	public static BufferedImage gameover;
	public static BufferedImage win;
	public static BufferedImage parachute;
	public static BufferedImage shield;
	static{
		try{
			bg=ImageIO.read(PlaneGame.class.getResource("background.png"));
			life=ImageIO.read(PlaneGame.class.getResource("life.png"));
			Bosslife=ImageIO.read(PlaneGame.class.getResource("Bosslife.png"));
			start=ImageIO.read(PlaneGame.class.getResource("start.png"));
			stop=ImageIO.read(PlaneGame.class.getResource("stop.png"));
			gameover=ImageIO.read(PlaneGame.class.getResource("gameover.png"));
			win=ImageIO.read(PlaneGame.class.getResource("win.png"));
			parachute=ImageIO.read(PlaneGame.class.getResource("parachute.png"));
			skill=ImageIO.read(PlaneGame.class.getResource("skill.png"));
			shield=ImageIO.read(PlaneGame.class.getResource("shield.png"));
		}catch(Exception e){
			System.out.println("图片加载失败.........");
		}
	}
//	定义一个数组接受飞行器
	AirCraft[] AirC={};
//	定义一个变量接受英雄机
	Hero hero=new Hero();
//	定义一个数组接受Boss
	Boss[] boss={};
//	定义一个数组接受子弹
	Bullet[] bullet={};
//	定义一个数组接受Boss子弹
	AirCraft[] bulletBosses={};
	//画小敌机的子弹
	smallBullet[] smallBul={};


	Skill[] skills={};//大招数组
	Shield hd=new Shield();//护盾
	boolean shields=false;//标记护盾是否生成
	int createIndex=0;
//	创造飞行器
	public void createAirCraft(){
		if(createIndex++%50==0){
	   AirC=Arrays.copyOf(AirC, AirC.length+1);
	   AirC[AirC.length-1]=nextAirCraft();
		}
	}

	
//	设置蜜蜂和敌机的比例
	public AirCraft nextAirCraft(){
		int type=(int)(Math.random()*6);
		if(type==0){
			return new Parachute();
		}
		if(type==1){
			return new Bee();
		}
		return new AirPlane();
	}
//	英雄机发射子弹
	int shootIndex=0;
	public void shootBullet(){
		if(shootIndex++%20==0){
			Bullet[] b=hero.shoot();
			for(int i=0;i<b.length;i++){
			bullet=Arrays.copyOf(bullet, bullet.length+1);
			bullet[bullet.length-1]=b[i];
		}}
	}
//英雄机发射一次skill大招
	public void competeSkills(){
		Skill[] s=hero.doSkill();
		skills=Arrays.copyOf(skills, skills.length+s.length);
		System.arraycopy(s, 0, 
				skills, skills.length-s.length,s.length);		
 }
	//敌机发射一次子弹
	int indexSmall=0;
	public void competeSmallBul(){
		if(score>=100&&indexSmall++%40==0){
			for(int i=0;i<AirC.length;i++){
				AirCraft f=AirC[i];
				if(f instanceof AirPlane){
					AirPlane sm=(AirPlane)f;
					smallBullet[] s=sm.shoot();
					smallBul=Arrays.copyOf(smallBul, smallBul.length+s.length);
					System.arraycopy(s, 0, 
							smallBul, smallBul.length-s.length,s.length);		
				}
			}
		}
		
 }
	

			
			
	

//	创造一个Boss
	public void creatBoss(){
		if( boss.length==0 && number>30){
			boss=Arrays.copyOf(boss, boss.length+1);
			boss[boss.length-1]=new Boss();
		}
	}
//  Boss发射子弹
	int shootBossIndex=0;
	public void shootBulletsFromBoss(){
		if(shootBossIndex++%20==0){
			for(int i=0;i<boss.length;i++){
				AirCraft b=boss[i].shoot();
				bulletBosses=Arrays.copyOf(bulletBosses, bulletBosses.length+1);
				bulletBosses[bulletBosses.length-1]=b;
		}}
	}
	
	
	//	画背景,飞行器,英雄机,子弹
	public void paint(Graphics g){
		super.paint(g);
		g.drawImage(bg, 0, 0, null);
		for(int i=0;i<AirC.length;i++){
			AirCraft ac=AirC[i];
			g.drawImage(ac.image, ac.x, ac.y, null);
		}
		g.drawImage(hero.image, hero.x, hero.y, null);
		for(int i=0;i<bullet.length;i++){
			Bullet b=bullet[i];
			g.drawImage(b.image, b.x, b.y,null);
		}
		for(int i=0;i<smallBul.length;i++){
			smallBullet sm=smallBul[i];
			g.drawImage(sm.image, sm.x, sm.y,null);
		}
		if(boss.length!=0){
		for(int i=0;i<boss.length;i++){
			Boss Bo=boss[i];
			g.drawImage(Bo.image, Bo.x, Bo.y,null);
		}}
		for(int i=0;i<bulletBosses.length;i++){
			AirCraft b=bulletBosses[i];
			g.drawImage(b.image, b.x, b.y,null);
		}

		//画大招
		for(int i=0;i<skills.length;i++){
			Skill s=skills[i];
			g.drawImage(s.image, s.x,s.y,null);
		}
		//画开始,暂停,结束
		if(state==START){
			g.drawImage(start,WIDTH/3,bg.getHeight()/3,null);
		}
		if(state==STOP){
			g.drawImage(stop,WIDTH/3, bg.getHeight()/3,null);
		}
		if(state==GAMEOVER){
			g.drawImage(gameover,WIDTH/3, bg.getHeight()/3,null);
		}
		if(state==WIN){
			g.drawImage(win,WIDTH/3, bg.getHeight()/3,null);
		}
		
		//画护盾
		hd.x=hero.x-15;
		hd.y=hero.y;
		if(shields){
			g.drawImage(shield, hd.x,hd.y,null);	
		}
		
		
		g.drawString("分数:"+score, 20, 20);
		g.drawString("生命值:", 20, 40);
		g.drawString("大招个数:"+skillNum,20,80);
			for(int i=0;i<hero.life;i++){
				g.drawImage(life,70+i*20 ,28,null);
			}
	
		g.drawString("火力:"+bullet.length, 20, 60);
		if(boss.length!=0){
			for(int i=0;i<boss.length;i++){
			g.drawString("Boss生命值:", 20,100);
			for(int j=0;j<boss[i].life;j++){
				g.drawImage(Bosslife,95+j*10 ,108,null);
			}
		}}
		
		
	}
//	让飞行器,英雄机,Boss,各种子弹走一步
	public void stepAction(){
		for(int i=0;i<AirC.length;i++){
			AirCraft ac=AirC[i];
			ac.step();
		}
		hero.step();
		for(int i=0;i<bullet.length;i++){
			Bullet b=bullet[i];
			b.step();
		}
		//大招走
		for(int i=0;i<skills.length;i++){
			Skill s=skills[i];
			s.step();
		}
		if(boss.length!=0){
			for(int i=0;i<boss.length;i++){
				Boss Bo=boss[i];
				Bo.step();
			}}
		for(int i=0;i<bulletBosses.length;i++){
			AirCraft b=bulletBosses[i];
			b.step();
		}
		for(int i=0;i<smallBul.length;i++){
			smallBullet sm=smallBul[i];
			sm.step();
		}
	}
//	检查飞行器是否有越界
	public void checkOutAir(){
		AirCraft[] temp=new AirCraft[AirC.length];
		int index=0;
		for(int i=0;i<AirC.length;i++){
			AirCraft ac=AirC[i];
			if(ac.y<=PlaneGame.HEIGHT){
				temp[index++]=ac;
			}
			if(ac.y>PlaneGame.HEIGHT){
				score-=2;
			}
		}
		AirC=Arrays.copyOf(temp, index);
	}
//	检查子弹是否有越界
	public void checkOutBullet(){
		Bullet[] temp=new Bullet[bullet.length];
		int index=0;
		for(int i=0;i<bullet.length;i++){
			Bullet b=bullet[i];
			if(b.y>-b.height){
				temp[index++]=b;
			}
		}
		bullet=Arrays.copyOf(temp, index);
		//检查小敌机的子弹越界
		smallBullet[] type=new smallBullet[smallBul.length];
		int indexBul=0;
		for(int i=0;i<smallBul.length;i++){
			smallBullet sm=smallBul[i];
			if(sm.y>-sm.height){
				type[indexBul++]=sm;
			}
		}
		smallBul=Arrays.copyOf(type, indexBul);
		//检查大招越界
		Skill[] s=new Skill[skills.length];
		int checkIndexSkill=0;
		for(int i=0;i<skills.length;i++){
			Skill skil=skills[i];
			if(skil.y>-skil.height){
				s[checkIndexSkill++]=skil;
			}
		}
		skills=Arrays.copyOf(s, checkIndexSkill);
	}


//	遍历子弹,进行消灭
	public void shootAir(){
		int AirIndex=-1;
		for(int i=0;i<bullet.length;i++){
			Bullet b=bullet[i];
			AirIndex=i;
			shootBeePlane(b,AirIndex);
			shootBoss(b);
		}
	}

	
//	消灭碰撞的飞行器和敌机,消灭蜜蜂,子弹加倍
	int skillNum=0;
	int killNum=0;
	public void shootBeePlane(Bullet b,int airIndex){
		int shootIndex=-1;
		for(int i=0;i<AirC.length;i++){
			AirCraft ac=AirC[i];
			if(ac.shootBy(b)){
				shootIndex=i;
				killNum++;
				if(ac instanceof Award ){//奖励
					 Award a=(Award)ac;
					 //随机获取火力值跟生命
					 if(a.getType()==Award.DOUBLE_FIRE){
						 hero.doubleFire+=10;
					 }
					 if(a.getType()==Award.LIFE){
						 hero.life++;
					 }
					 
					 
				 }
				if(ac.code().equals("airplane")){
					number+=1;
					score+=6;
				}
				
				if(ac.code().equals("parachute")){
					 Skills d=(Skills)ac;//System.out.println("大招");
					 if(d.getIndex()==Skills.BIG_SKILL&&skillNum!=1){
						 skillNum=1;
						MouseAdapter mad=new MouseAdapter(){
							
								//点击鼠标开始游戏,将游戏状态改成开始
								public void mouseClicked(MouseEvent e){
									if(skillNum==1){
										competeSkills();
										skillNum=0;
									}
								}
							
							};
							this.addMouseMotionListener(mad);
							this.addMouseListener(mad);
					 } 
					 
					 if(d.getIndex()==Skills.SHIELD&&shields==false){
						 //System.out.println("大招");
						 shields=true;
						 hero.life+=Shield.LIFE;
					 }
						
					 
				 }
				break;
			}
		}
		if(shootIndex!=-1){
			if(killNum%40==0){//没击败40个敌机再加20分
				score+=20;
				//System.out.println("加20分"+score);
			}
		AirC[shootIndex]=AirC[AirC.length-1];
		AirC=Arrays.copyOf(AirC, AirC.length-1);
		bullet[airIndex]=bullet[bullet.length-1];
		bullet=Arrays.copyOf(bullet, bullet.length-1);
	}
		
	}
	//大招跟飞行物的碰撞,加分
		public void skillAction(){
			for(int i=0;i<skills.length;i++){
				Skill b=skills[i];
					int skillIndex=-1;
					for(int j=0;j<AirC.length;j++){
						AirCraft flying=AirC[j];
						if(flying.shootBy(b)){
							skillIndex=j;
							break;
						}
					}
					if(skillIndex!=-1){
						 score+=10; 
						 AirCraft f=AirC[skillIndex]; 
						 AirC[skillIndex]=AirC[AirC.length-1];
						 AirC=Arrays.copyOf(AirC, AirC.length-1); 
					}
					
				}
					
			
			
		}
		//大招与BOSS相撞
		public void skillActions(){
			int skillIndexs=-1;
			for(int i=0;i<skills.length;i++){
				Skill b=skills[i];
					int skillIndex=-1;
					//System.out.println("减分");
					for(int j=0;j<boss.length;j++){
						Boss bosses=boss[j];
						//System.out.println("减分");
						if(bosses.shootBy(b)){
							//System.out.println("减分");
							skillIndex=j;
							skillIndexs=i;
							break;
						}
					}
					if(skillIndex!=-1){
						 score+=10; 
						 Boss f=boss[skillIndex];
						 f.life-=1;
						 skills[skillIndexs]=skills[skills.length-1];
						 skills=Arrays.copyOf(skills, skills.length-1); 
					}
					
					
				}
					
			
			
		}
//敌机跟英雄机相撞减分
int live=3;
public void bangAir(){
	
	int indexFlying=-1;
	for(int j=0;j<AirC.length;j++){
		AirCraft flying=AirC[j];
			if(hero.shootBy(flying)){
				hero.life-=1;
				indexFlying=j;
				break;
		}
	}
	if(indexFlying!=-1){
		AirCraft f=AirC[indexFlying];
		//护盾生成且碰到的是敌机或者boss机的导弹则消失
		 if(!(f instanceof Parachute)&&shields){
				//hero.life-=Shield.LIFE;
				 live-=3;
			}
		 AirC[indexFlying]=AirC[AirC.length-1];
		 AirC=Arrays.copyOf(AirC, AirC.length-1);
	}
}
int num=0;
//英雄机撞上敌机发出的子弹减分,撞上20个该子弹生命值减1
public void bangSmallBul(){
	int indexFlying=-1;
	for(int j=0;j<smallBul.length;j++){
		AirCraft flying=smallBul[j];
			if(hero.shootBy(flying)){
				indexFlying=j;
				num++;
				//System.out.println("碰到的敌机子弹数量"+num);
				break;
		}
	}
	if(indexFlying!=-1){
		AirCraft f=smallBul[indexFlying];
		//护盾生成且碰到的是敌机或者boss机的导弹则消失
		 if(f instanceof smallBullet){
			 score-=2;
			 if(num%10==0){
				 hero.life--;
			 }
			}
		 smallBul[indexFlying]=smallBul[smallBul.length-1];
		 smallBul=Arrays.copyOf(smallBul, smallBul.length-1);
	}
}
//护盾消失
public void lossShield(){
	if(live==0){
		shields=false;
	}
}
	
//  消灭Boss,每碰到10个英雄机的子弹,Boss生命值减1。
	public void shootBoss(Bullet b){
		int shootIndex=-1;
		for(int i=0;i<boss.length;i++){
			Boss bosses=boss[i];
			if(bosses.shootBy(b)){
				shootIndex=i;
				bossBlutteNumber=bossBlutteNumber+1;	
			     	if(bossBlutteNumber==10){
			     		bosses.life-=1;
			     		 System.out.println("boss的生命值+"+bosses.life);
			     		bossBlutteNumber=0;
			     		number=0;
			     	}
			     	if(bosses.life<=0){
			     		boss[i]=null;
			     		boss=Arrays.copyOf(boss, boss.length-1);
			     		state=WIN;
			     	}
					}}
			if(shootIndex!=-1){
				bullet[bullet.length-1]=bullet[shootIndex];
				bullet=Arrays.copyOf(bullet, bullet.length-1);
				}
					
	}
		
//	检查boss子弹是否有越界
	public void checkOutBossBullet(){
		AirCraft[] temp=new AirCraft[bulletBosses.length];
		int index=0;
		for(int i=0;i<bulletBosses.length;i++){
			AirCraft b=bulletBosses[i];
			if(b.y<PlaneGame.HEIGHT){
				temp[index++]=b;
			}
		}
		bulletBosses=Arrays.copyOf(temp, index);
	}

	

//	遍历boss子弹,进行伤害英雄机
	public void shootBossAir(){
		int AirIndex=-1;
		for(int i=0;i<bulletBosses.length;i++){
			AirCraft b=bulletBosses[i];
			if(hero.shootBy(b)){
				if(b.code().equals("bulletBoss")){
					score-=1;
					bulletBossNumer+=1;
					if(bulletBossNumer==10){
						hero.life-=1;
						bulletBossNumer=0;
					}
					AirIndex=i;
				}
				
				if(b.code().equals("BossBigbullet")){
					hero.life-=1;
					AirIndex=i;
					if(shields){
						live-=3;
					}
				}
			}
			if(AirIndex!=-1){
				bulletBosses[AirIndex]=bulletBosses[bulletBosses.length-1];
				bulletBosses=Arrays.copyOf(bulletBosses, bulletBosses.length-1);
			
		}}
	}
	
	//is_liFe为true则将游戏状态改为finish,且出现结束图片并结算游戏分数
		//此状态为完成任务后的状态
		public void checkGameOver(){
			if(hero.life==0){
			//System.out.println("结束");
				state=GAMEOVER;		
			}
		}
//		//检查游戏是否失败,即英雄机没有生命值
//		public boolean is_Life(){
//			return boss.life<=0;//英雄没有生命值
//		}
//	设置框架和屏幕
	public static void main(String[] args) {
		JFrame frame=new JFrame();
		PlaneGame game=new PlaneGame();
		frame.add(game);
		frame.setVisible(true);
		frame.setSize(WIDTH, HEIGHT);
		frame.setDefaultCloseOperation(3);
		frame.setLocationRelativeTo(null);
		game.action();
	}
	//清空屏幕
	public void empty(){
		AirC=new AirCraft[0];
		bullet=new Bullet[0];//子弹数组,用来存放发出的子弹
		skills=new Skill[0];//大招数组
		skillNum=0;
		bulletBosses=new AirCraft[0];//清空boss机的子弹
		boss=new Boss[0];//清空boss
		//hero=new Hero();//新建英雄机
		smallBul=new smallBullet[0];
		shields=false;
	}
//	游戏运行
	int indexWin=0;
	Timer timer=new Timer();
	public void action(){
		
	
		MouseAdapter mad=new MouseAdapter(){
			//设置鼠标移动,让鼠标进入界面就指向英雄机
			public void mouseMoved(MouseEvent e){
				if(state==RUNNING){
					int x=e.getX();
					int y=e.getY();
					hero.move(x, y);
				}
				
			}
			//点击鼠标开始游戏,将游戏状态改成开始
			public void mouseClicked(MouseEvent e){
				if(state==START){
					score=0;		
					state=RUNNING;
					
				}
				
				if(state==GAMEOVER||state==WIN){
					state=START;
					hero=new Hero();
					
				}
				
				
				
				
			}
			//鼠标出去将游戏状态改为暂停
			public void mouseExited(MouseEvent e) {
				if(state==RUNNING){
					state=STOP;
				}
				
			}
			//鼠标进入游戏状态改为运行
			public void mouseEntered(MouseEvent e) {
				if(state==STOP){
					state=RUNNING;
				}
			}

		};
		this.addMouseMotionListener(mad);
		this.addMouseListener(mad);
		
		
		timer.schedule(new TimerTask(){
			public void run(){
				if(state==RUNNING){
					 createAirCraft();//创造飞行器
					 shootBullet();//英雄机发射子弹
					 bangAir();//敌机跟英雄机相撞减分
					 creatBoss();//创造一个Boss
					 shootBulletsFromBoss();//Boss发射子弹
					 stepAction();//让飞行器,英雄机,Boss,各种子弹走一步
					 checkOutAir();//检查飞行器是否有越界
					 checkOutBullet();//	检查子弹是否有越界
					 shootAir();//遍历子弹,进行消灭
					 checkOutBossBullet();//	检查boss子弹是否有越界
					 shootBossAir();//	遍历boss子弹,进行伤害英雄机
					 skillAction();//大招伤害boss
					 skillActions();//大招伤害boss
					 lossShield();//判断,让护盾消失
					 checkGameOver();//检查游戏是否失败
					 competeSmallBul();//敌机发射一次子弹
					 bangSmallBul();//英雄机碰到敌机发出的子弹减5分
					 
				}
				if(state==GAMEOVER||state==START||state==WIN){
					empty();
				}
				 repaint();
			}
		},0, 10);
		
	}

}

    首先建立几个实体类
     AirCraft 飞机总类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    public abstract class AirCraft {
    	
    	public int x;
    	public int y;
    	public int width;
    	public int height;
    	public BufferedImage image;
    	public abstract void step();
    	public abstract String code();
    	
    	public Boolean shootBy(Bullet b){
    		int x1=this.x-b.width;
    		int x2=this.x+this.width;
    		int y1=this.y-b.height;
    		int y2=this.y+this.height;
    		int bx=b.x;
    		int by=b.y;
    		return bx>x1&&bx<x2&&by>y1&&by<y2;
    		
    	}
    
    	public Boolean shootBy(AirCraft b){
    		int x1=this.x-b.width;
    		int x2=this.x+this.width;
    		int y1=this.y-b.height;
    		int y2=this.y+this.height;
    		int bx=b.x;
    		int by=b.y;
    		return bx>x1&&bx<x2&&by>y1&&by<y2;
    		
    	}
    
    }
    //敌机类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class AirPlane extends AirCraft {
    	public static BufferedImage plane;
    	static{
    		try{
    			plane=ImageIO.read(AirPlane.class.getResource("airplane.png"));
    		}catch(Exception e){
    			System.out.println("敌机图片加载失败.........");
    		}
    	}
    
    	public int speed;
    	
    	
    	public AirPlane() {
    		speed=3;
    		image=plane;
    		width=image.getWidth();
    		height=image.getHeight();
    		x=(int)(Math.random()*(PlaneGame.WIDTH-width));
    		y=-height;
    		
    	}
    
    	public void step() {
    		y+=speed;
    	}
    	
    	public String code(){
    		return "airplane";
    	}
    	public smallBullet[] shoot(){
    		smallBullet[] smallbullets=new smallBullet[1];
    		smallbullets[0]=new smallBullet(this.x+this.width/2-10,this.y+45);
    		return smallbullets;
    	}
    
    }
    //奖励蜜蜂类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class Bee extends AirCraft implements Award {
    public static BufferedImage bee;
    static{
    	try{
    		bee=ImageIO.read(Bee.class.getResource("bee.png"));
    	}catch(Exception e){
    		System.out.println("蜜蜂图片加载失败...........");
    	}
    }
    	public int xSpeed;
    	public int ySpeed;
    	
    	public Bee() {
    		image=bee;
    		width=image.getWidth();
    		height=image.getHeight();
    		x=(int)(Math.random()*(PlaneGame.WIDTH-width));
    	    y=-height;
    	    xSpeed=3;
    	    ySpeed=2;
    	}
    
    	public void step() {
    		x+=xSpeed;
    		y+=ySpeed;
    		if(x<0||x>PlaneGame.WIDTH-width){
    			xSpeed=-xSpeed;
    		}
    	}
    	
    	public String code(){
    		return "bee";
    	}
    	@Override
    	public int getType() {
    		int index=(int)(Math.random()*7);
    		if(index==0){
    			return Award.LIFE;
    		}
    		return Award.DOUBLE_FIRE;
    		
    	}
    
    }
    
    boss机类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class Boss extends AirCraft {
    	public static BufferedImage boss;
    	static{
    		try{
    			boss=ImageIO.read(Boss.class.getResource("boss.png"));
    		}catch(Exception e){
    			System.out.println("Boss图片加载失败........");
    		}
    	}
    	
    public int speed;
    public int life;
    public int doubleBossFire;
    public Boss() {
    	image=boss;
    	width=image.getWidth();
    	height=image.getHeight();
    	x=(int)(Math.random()*(PlaneGame.WIDTH-width));
    	y=20;
    	speed=1;
    	life=15;
    	doubleBossFire=0;
    	}
    
    @Override
    public void step() {
    	x-=speed;
    	if(x<0||x>PlaneGame.WIDTH-width){
    		speed=-speed;
    	}
    }
    
    public AirCraft shoot(){
    	if(life>5){
    		doubleBossFire=(int)(Math.random()*5);
    		if(doubleBossFire!=0){
    			AirCraft bulletboss=new bulletBoss(this.x+this.width/2-25,this.y+this.height);
    			return bulletboss;
    		}
    			 AirCraft bulletboss1=new BossBigbullet(this.x+this.width/2-25,this.y+this.height);
    				 	return bulletboss1;
    	}
    	doubleBossFire=(int)(Math.random()*3);
    	if(doubleBossFire!=0){
    		AirCraft bulletboss=new bulletBoss(this.x+this.width/2-25,this.y+this.height);
    		return bulletboss;
    	}
    		 AirCraft bulletboss1=new BossBigbullet(this.x+this.width/2-25,this.y+this.height);
    			 	return bulletboss1;
    	
    }
    
    
    @Override
    public String code() {
    	return "boss";
    }
    }
    //boss机子弹类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class BossBigbullet  extends AirCraft{
    	public static BufferedImage BossBigbullet;
    
    	static {
    		try {
    			BossBigbullet = ImageIO.read(Bullet.class.getResource("BossBigBullet.png"));
    		} catch (Exception e) {
    			System.out.println("Boss大招图片加载失败..........");
    		}
    	}
    
    	public int speed;
    
    	public BossBigbullet() {
    		super();
    	}
    
    	public BossBigbullet(int x, int y) {
    		speed = 2;
    		image=BossBigbullet;
            width=image.getHeight();
    		height=image.getHeight();
    		this.x=x;
    		this.y=y;
    	}
    	@Override
    	public void step() {
    		y+=speed;
    		
    	}
    
    	@Override
    	public String code() {
    
    		return "BossBigbullet";
    	}
    }
    //boss小子弹
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class bulletBoss  extends AirCraft {
    	public static BufferedImage bulletBoss;
    
    	static {
    		try {
    			bulletBoss = ImageIO.read(Bullet.class.getResource("Bossbullet.png"));
    		} catch (Exception e) {
    			System.out.println("Boss子弹图片加载失败..........");
    		}
    	}
    
    	public int speed;
    
    	public bulletBoss() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public bulletBoss(int x, int y) {
    		speed = 3;
    		image=bulletBoss;
            width=image.getHeight();
    		height=image.getHeight();
    		this.x=x;
    		this.y=y;
    	}
    	@Override
    	public void step() {
    		y+=speed;
    		
    	}
    
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "bulletBoss";
    	}
    
    }
    //英雄机子弹类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class Bullet extends AirCraft {
    	public static BufferedImage bullet;
    
    	static {
    		try {
    			bullet = ImageIO.read(Bullet.class.getResource("bullet.png"));
    		} catch (Exception e) {
    			System.out.println("子弹图片加载失败..........");
    		}
    	}
    
    	public int speed;
    
    	public Bullet() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public Bullet(int x, int y) {
    		speed = 3;
    		image=bullet;
            width=image.getHeight();
    		height=image.getHeight();
    		this.x=x;
    		this.y=y;
    	}
    
    	@Override
    	public void step() {
    		y-=speed;
    	}
    	
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "bullet";
    	}
    
    }
    //英雄机类
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class Hero extends AirCraft {
        public static BufferedImage[] hero=new BufferedImage[2];
        static{
        	try{
        		for(int i=0;i<hero.length;i++){
        			hero[i]=ImageIO.read(Hero.class.getResource("hero/hero"+i+".png"));
        		}
        	}catch(Exception e){
        		System.out.println("英雄机图片加载失败.............");
        	}
        }
        public int life;
        public int doubleFire;
    	public Hero() {
    		image=hero[0];
    		width=image.getWidth();
    		height=image.getHeight();
    		x=(PlaneGame.WIDTH-width)/2;
    		y=PlaneGame.HEIGHT-2*height;
    	    life=3;
    	    doubleFire=0;
    	}
    	
    	int index=0;
    	int stepIndex=0;
    	public void step() {
    	if(stepIndex++%20==0){
    		image=hero[index++%hero.length];
    	}
    	}
    	
    	
    	public Bullet[] shoot(){
    		if(doubleFire==0){
    		Bullet[] bullets=new Bullet[1];
    		bullets[0]=new Bullet(this.x+this.width/2-4,this.y-20);
    		return bullets;
    				}
    	
    			Bullet[] bullets=new Bullet[2];
    			bullets[0]=new Bullet(this.x+this.width/4-4,this.y-20);
    			bullets[1]=new Bullet(this.x+3*this.width/3-4,this.y-20);
    			doubleFire-=1;
    			return bullets;
    		
    
    }
    //英雄机发射大招,发四倍火力
    public Skill[] doSkill(){
    	Skill[] skills=new Skill[4];
    	skills[0]=new Skill(this.x,this.y-20);
    	skills[1]=new Skill(this.x+(this.width/3),this.y-20);
    	skills[2]=new Skill(this.x+(2*this.width/3),this.y-20);
    	skills[3]=new Skill(this.x-(PlaneGame.skill.getWidth()),this.y-20);
    	return skills;
    }
    
    
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "hero";
    	}
    
    
    	public void move(int x, int y) {
    		this.x=x-this.width/2;
    		this.y=y-this.width/2;
    		
    	}
    
    }
    //奖励子弹类
    package day1_16;
    
    public class Parachute extends AirCraft implements Skills{
    	int xSpeed;
    	int ySpeed;
    	
    	
    	public Parachute() {
    		super();
    		xSpeed=2;
    		ySpeed=3;
    		image=PlaneGame.parachute;
    		width=image.getWidth();
    		height=image.getHeight();
    		y=-height;
    		x=(int)(Math.random()*(PlaneGame.WIDTH-width));
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void step() {
    		y+=ySpeed;
    		x+=xSpeed;
    		if(x<0||x>PlaneGame.WIDTH-width){
    			xSpeed=-xSpeed;
    		}
    		
    	}
    
    	@Override
    	public int getIndex() {
    		int type=(int)(Math.random()*2+1);
    		if(type==Skills.BIG_SKILL){
    			return Skills.BIG_SKILL;
    		}
    		return Skills.SHIELD;
    	}
    
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "parachute";
    	}
    
    	
    	
    
    }
    //护盾
    package day1_16;
    
    public class Shield extends AirCraft{
    
    	public static final int LIFE=1;
    	public Shield() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public Shield(int x,int y) {
    		super();
    		image=PlaneGame.shield;
    		width=image.getWidth();
    		height=image.getHeight();
    		this.x=x;
    		this.y=y;
    	}
    
    	@Override
    	public void step() {
    		
    	}
    //	@Override
    //	public int getType() {
    //		// TODO Auto-generated method stub
    //		return Award.LIFE;
    //	}
    
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "shield";
    	}
    
    }
    //大招
    package day1_16;
    
    public class Skill extends AirCraft{
    	public int speed;
    
    	public Skill() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public Skill(int x,int y) {
    		image=PlaneGame.skill;
    		width=image.getWidth();
    		height=image.getHeight();
    		this.x=x;
    		this.y=y;
    		speed=3;
    	}
    	@Override
    	public void step() {
    		y-=speed;
    		
    	}
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "skill";
    	}
    	
    	
    	
    }
    //英雄机小子弹
    package day1_16;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    public class smallBullet extends AirCraft {
    	public static BufferedImage bullet;
    
    	static {
    		try {
    			bullet = ImageIO.read(Bullet.class.getResource("smallBullet.png"));
    		} catch (Exception e) {
    			System.out.println("子弹图片加载失败..........");
    		}
    	}
    
    	public int speed;
    
    	public smallBullet() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public smallBullet(int x, int y) {
    		speed =4;
    		image=bullet;
            width=image.getHeight();
    		height=image.getHeight();
    		this.x=x;
    		this.y=y;
    	}
    
    	@Override
    	public void step() {
    		y+=speed;
    	}
    	
    	@Override
    	public String code() {
    		// TODO Auto-generated method stub
    		return "smallbullet";
    	}
    	
    
    }
    
    //两个奖励接口
    //奖励活力值跟生命
    package day1_16;
    
    //奖励接口
    public interface Award {
    	int LIFE=0;
    	int DOUBLE_FIRE=1;
    	int getType();//返回奖励类型方法
    }
    package day1_16;
    //奖励护盾跟加生命
    public interface Skills {
    	int BIG_SKILL=1;
    	int SHIELD=2;
    	int getIndex();
    
    }

飞机大战的简单实现