基本信息
源码名称:Java简易飞机大战
源码大小:2.54M
文件格式:.zip
开发语言:Java
更新时间:2020-07-28
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 1 元 
   源码介绍
Java简易飞机大战


/**
 * 
 */
package client;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;

/**
 * @author Sky
 *
 * 2020-下午3:46:24
 * 
 * 画图的步骤
 * 1.定义图片并取名
 * 2.在构造方法中调用工具初始化图片
 * 3.在画图方法中paint()
 */
public class GamePanel extends JPanel{
	//1.定义背景图 
	BufferedImage bg;
	//创建英雄机对象
	Hero hero = new Hero();
	
	//创建敌人飞机
	//Enemy enemy = new Enemy();
	//英雄机的集合
	List<Enemy> enemys = new ArrayList<Enemy>();
	//创建英雄机的弹药库
	List<Fire> fires = new ArrayList<Fire>();
	
	//定义分数
	int score;
	/*
	 * 开始游戏的方法
	 * */
	public void action() {
		//创建并启动线程来控制游戏场景中的物体活动
		new Thread() {
			public void run() {
				while(true) {
					//调用敌人飞机入场的方法
					epEnter();
					//调用敌机移动的方法
					epMove();
					
					//发射子弹
					shout();
					//子弹移动
					fireMove();
					//每执行一次休眠下
					shootEp();
					try {
						Thread.sleep(50);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					repaint();
				}
			}
		}.start();
	}
	
	/**
	 * 判断子弹是否射中敌机
	 */
	protected void shootEp() {
		//遍历所有子弹
		for (int i = 0; i < fires.size(); i  ) {
			Fire f = fires.get(i);
			bang(f);
		}
	}

	/**
	 * @param f
	 */
	private void bang(Fire f) {
		for (int i = 0; i < enemys.size(); i  ) {
			Enemy e = enemys.get(i);
			//判断子弹是否击中敌机
			if(e.shootBy(f)) {
				//敌机消失,从敌机库中删掉
				enemys.remove(e);
				//2.删除子弹
				fires.remove(f);
				//3.增加分数
				score =100;
			}
		}
	}

	/**
	 * 
	 */
	protected void fireMove() {
		for (int i = 0; i < fires.size(); i  ) {
			//获取子弹
			Fire f = fires.get(i);
			//子弹移动
			f.move();
		}
	}

	/**
	 * 发射子弹
	 */
	int findex = 0;
	protected void shout() {
		findex  ;
		if(findex>20) {
			//创建子弹
			Fire fire1 = new Fire(hero.x, hero.y,0);
			//子弹加入到弹药库
			fires.add(fire1);
			Fire fire2 = new Fire(hero.x hero.w/2 ,hero.y,1);
			//子弹加入到弹药库
			fires.add(fire2);
			Fire fire3 = new Fire(hero.x hero.w ,hero.y,2);
			//子弹加入到弹药库
			fires.add(fire3);
			findex =0;
		}
		
	}

	/**
	 * 敌机移动的方法
	 */
	protected void epMove() {
		//遍历所有的敌机
		for (int i = 0; i < enemys.size(); i  ) {
			Enemy e = enemys.get(i);
			e.move();
		}
	}

	
	/**
	 * 敌人飞机入场,此方法在死循环中调用,该方法重复执行
	 */
	int index = 0;
	protected void epEnter() {
		//记录执行的次数
		index  ;
		if(index == 20) {
			//1.创建敌人飞机
			Enemy ep = new Enemy();
			//2.将敌机加入到敌机大本营
			enemys.add(ep);
			index = 0;
		}

	}

	//构造方法
	public GamePanel(GameFrame frame) {
		this.setBackground(Color.BLUE);
		//初始化背景
		bg = App.getImg("/img/bg1.jpg");
		
		//使用鼠标监听器
		//1.创建鼠标适配器
		 MouseAdapter adapter = new MouseAdapter() {
			//事件 Moved Clicked Pressed Entered Exited
			public void mouseMoved(MouseEvent e) {
				//让英雄机和鼠标一起动
				int x = e.getX();
				int y = e.getY();
				hero.moveToMouse(x, y);
				//刷新界面
				repaint();
			}
		};
		this.addMouseListener(adapter);
		this.addMouseMotionListener(adapter);
		
		//1.使用键盘适配器
		KeyAdapter kd = new KeyAdapter() {
			//2.确定需要监听的事件
			public void keyPressed(KeyEvent e) {
				//监听键盘的按键。每一个按键对应一个数字
				int keyCode = e.getKeyCode();
				//System.out.println(keyCode);
				if(keyCode == KeyEvent.VK_UP) {
					hero.moveUp();
				}else if(keyCode == KeyEvent.VK_DOWN) {
					hero.moveDown();
				}else if(keyCode == KeyEvent.VK_LEFT) {
					hero.moveLeft();
				}else if(keyCode == KeyEvent.VK_RIGHT) {
					hero.moveRight();
				}
				repaint();
			}
		}; 
		//3.将适配器加入到监听器中
		frame.addKeyListener(kd);
		
	}
	
	/* (non-Javadoc)
	 * 专用画图方法
	 * Graphics g专用画图方法
	 * @see javax.swing.JComponent#paint(java.awt.Graphics)
	 */
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawImage(bg, 0, 0, 512, 768, null);
		g.drawImage(hero.img, hero.x, hero.y, hero.w,hero.h, null);
		//遍历敌机集合画出所有敌机
		for(int i=0;i<enemys.size();i  ) {
			Enemy e = enemys.get(i);
			g.drawImage(e.img, e.x, e.y, e.w,e.h, null);
		}
		
		//画出子弹
		for (int i = 0; i < fires.size(); i  ) {
			Fire fire = fires.get(i);
			g.drawImage(fire.img, fire.x, fire.y, fire.w,fire.h, null);
		}
		//画分数
		g.setColor(Color.red);
		g.setFont(new Font("楷体",Font.BOLD,20));
		g.drawString("分数:" score, 10, 30);
		
	}
}