在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java游戏开发 → Java简易飞机大战

Java简易飞机大战

Java游戏开发

下载此实例
  • 开发语言:Java
  • 实例大小:2.54M
  • 下载次数:9
  • 浏览次数:130
  • 发布时间:2020-07-28
  • 实例类别:Java游戏开发
  • 发 布 人:Skaiove
  • 所需积分:1
 相关标签: java 飞机大战

实例介绍

【实例简介】Java简易飞机大战

【实例截图】

from clipboard

【核心代码】


/**
 * 
 */
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);
		
	}
}


标签: java 飞机大战

实例下载地址

Java简易飞机大战

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警