`
南瓜猿
  • 浏览: 45149 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
社区版块
存档分类
最新评论

Java版打飞机小游戏

    博客分类:
  • Java
阅读更多

放假写的一个Java端打飞机小游戏。

复习到的知识点有:java图形界面,多线程,集合框架等。

主要的收获是知道了处理图层的方式,即JLayeredPane层次面板,主要思路

如下:

1.        创建一个JLayeredPanel对象实例layeredPane,声明大小

2.        将背景图片的JPanel 放到图层layeredPane最底层

3.        将飞机,子弹的JPanel放到背景图片之上的图层

4.        调用JFrame的setLayeredPane()方法加入图层面板

可改进方向:

1.排行榜

2.计时计分系统

3.敌机子弹

= =感觉都有思路了就没搞了2333

游戏截图:



 
 



 

游戏实现类(含注释):

public class GameFrame extends JFrame implements KeyListener {
	// 我的飞机
	private MyPlane myplane = null;
	
	//控制子弹线程
	private boolean flagBullet = true;
	//控制敌方飞机线程
	private boolean flagPlane = true;
	// 创建一个JLayeredPane用于分层的。
	JLayeredPane layeredPane;
	// 创建一个Panel和一个Label用于存放图片,作为背景。
	JPanel backgroundJp;
	JLabel backgroundJLabel;
	ImageIcon image;
	
	public static GameFrame game;
	
	//子弹作业
	ArrayList<Bullet> bullets ;

	private static int x;
	private static int y;
	
	public GameFrame() {
		game = this;
		//实例化子弹队列
		bullets = new ArrayList<>();
		
		myplane = new MyPlane();
		myplane.setLocation(633, 550);
		//创建一个用来分层的
		layeredPane = new JLayeredPane();
		image = new ImageIcon("images/background2.jpg");// 随便找一张图就可以看到效果。
		// 创建背景的那些东西
		backgroundJp = new JPanel();
		backgroundJp.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());

		backgroundJLabel = new JLabel(image);
		backgroundJp.add(backgroundJLabel);

		// 将jp放到最底层。
		layeredPane.add(backgroundJp, JLayeredPane.DEFAULT_LAYER);
		// 将jb放到高一层的地方
		layeredPane.add(myplane, JLayeredPane.MODAL_LAYER);
	 
		this.setLayeredPane(layeredPane);
		this.setBounds(33,  0, 1300, 700);  
		this.addKeyListener(this);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 
		//图标
		this.setIconImage(new ImageIcon("images/bfire.png").getImage());
		//不可放大或缩小
		this.setResizable(false);
		this.setVisible(true);
		//子弹线程
		launch();
		// 敌机线程
		otherPlane();
	}

	@Override
	public void keyTyped(KeyEvent e) {
		 
	}

	@Override
	public void keyPressed(KeyEvent e) {
		//获得飞机位置
		if (myplane!= null) {
			 x = myplane.getX();
			 y = myplane.getY();
		}
		 

		//每次移动大小
		int speed = 20;
		//根据不同指令执行命令
		if (e.getKeyChar() == 'W' || e.getKeyChar() == 'w') { // 上移
			y -= speed;
		} else if (e.getKeyChar() == 'S' || e.getKeyChar() == 's') { // 下移
			y += speed;
		} else if (e.getKeyChar() == 'A' || e.getKeyChar() == 'a') { // 左移
			x -= speed;
		} else if (e.getKeyChar() == 'D' || e.getKeyChar() == 'd') { // 右移
			x += speed;
		}
		
		//设置活动范围
		if (x > -5 && x < Constant.windowx*2 - 165 && y > 0
				&& y < Constant.windowy*2 - 175) {
			if (myplane!=null) {
				myplane.setLocation(x, y);
			}
		 
		}
		// repaint();
	}

	@Override
	public void keyReleased(KeyEvent e) {
	}
	
	// 开启子弹线程
		private void launch() {
			new Thread() {
				@Override
				public void run() {
					//如果为true,则启动线程,否则关闭
					while (flagBullet) {
						// 给出现时的坐标加上一个值,调整位置
						//以飞机坐标为参数,生成一个子弹对象
						Bullet bullet = new Bullet(myplane.getX() + 52,
								myplane.getY() + 30, game);
						// 将子弹加入面板
						layeredPane.add(bullet, JLayeredPane.MODAL_LAYER);
						// 添加进子弹列表
						GameList.bulletList.add(bullet);
						/*// 开始行动
						弄个子弹队列
						然后开个线程遍历队列
						然后每个子弹的x 和 y都相加 
						每次重设每个子弹的位置
						bullets.add(bullet);
						for (int i = 0; i < bullets.size(); i++) {
							 
							int by = bullets.get(i).getY();
							int bx = bullets.get(i).getX();
							System.out.println("第"+i+"个子弹" + x +"and" + y);
							bullets.get(i).setY(by-60);
							bullets.get(i).setLocation(bx, by);
							
							//判断这颗子弹是否打到某个敌机
							 GameList.intersectsBullet(bullets.get(i),game);
							 
							// 将子弹加入面板
							layeredPane.add(bullet, JLayeredPane.POPUP_LAYER);
								// 如果出了界面,就跳出循环,不再执行
								if (by < 0) {
									//该颗子弹已出了可见面板,从面板中移除,跳出循环
									layeredPane.remove(bullet);
									
									//将子弹从列表中移除
									GameList.bulletList.remove(this);
									break;
								}
						}
						*/
						new Thread(bullet).start();

						// 每隔500毫秒发射一颗子弹
						try {
							Thread.sleep(300);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}.start();
		}


		/*
		 * 启动敌机线程
		 */
		private void otherPlane() {
			new Thread() {
				@Override
				public void run() {
					//获得第一次出现敌机的时间
					long firstTime = System.currentTimeMillis();
					//一次最多存在number数量的敌机
					int number = 5;
					while (flagPlane) {
						//获得当前时间
						long currentTime = System.currentTimeMillis();
						//每10秒多增加一架可以在界面上显示的敌机
						if(currentTime - firstTime > 10000){
							number ++;
							//交换数据
							firstTime = currentTime;
						}
						int size = GameList.planeList.size();
						//如果list中的敌机数量小于总共可以在界面上显示的,则创建对象
						if (size <= number) {
							OtherPlane otherPlane = new OtherPlane(GameFrame.this);
							//需要把该对象放到面板中去显示
							layeredPane.add(otherPlane, JLayeredPane.MODAL_LAYER);
							//加入list
							GameList.planeList.add(otherPlane);
							//启动,可以活动
							new Thread(otherPlane).start();

							//没500毫秒生成一个
							try {
								Thread.sleep(500);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
					}
				}
			}.start();
		}
		

		// 返回MyPlane对象
		public MyPlane getMyPlane() {
			return myplane;
		}
		//将我方飞机的数据清除
		public void setMyPlane(MyPlane myplane){
			this.myplane = myplane;
		}
		
		// 将子弹或者敌机从面板移除
		public void remove(Component c) {
			layeredPane.remove(c);
		}

		//停止子弹线程
		public void setFlagBullet(boolean b) {
			this.flagBullet = b;
		}

		//停止敌机线程
		public void setFlagPlane(boolean b) {
			this.flagPlane = b;
		}

}

 项目压缩包:

 

  • 大小: 762.5 KB
  • 大小: 242.5 KB
3
4
分享到:
评论

相关推荐

    java打飞机小游戏.zip

    java打飞机小游戏.zipjava打飞机小游戏.zipjava打飞机小游戏.zip java打飞机小游戏.zipjava打飞机小游戏.zipjava打飞机小游戏.zip java打飞机小游戏.zipjava打飞机小游戏.zipjava打飞机小游戏.zip java打飞机小游戏....

    javaswing 打飞机小游戏

    这个“javaswing 打飞机小游戏”是一个基于Java Swing开发的简单娱乐项目,它展示了如何利用Swing库创建一个交互式的游戏应用。 在Java Swing中,开发者可以使用各种组件(如JFrame、JPanel、JButton等)来构建用户...

    利用JAVA开发的打飞机小游戏

    在本文中,我们将深入探讨如何利用Java开发一款打飞机小游戏,以及这个过程涉及的关键技术和知识点。首先,我们要明确,Java是一种广泛使用的面向对象的编程语言,尤其适合开发跨平台的应用程序,包括桌面游戏。 **...

    java打飞机小游戏

    Java打飞机小游戏是一款基于Java编程语言开发的休闲游戏,它模仿了微信上的经典打飞机玩法。这款游戏展示了Java在游戏开发中的应用,虽然可能在某些方面还不够成熟和完善,但它的源代码提供了一个很好的学习和实践...

    JAVA打飞机小游戏

    程序开发工具: Borland JBuilder ...Bao.java 飞机爆炸时的一个小面板; 就这样,很简单,呵呵,希望大家能把它更加完善. 原文出处:http://www.eplato.cn/CutDeer-Blog/44-yongjavaxiedeyigeswingxiaoyouxi-dafeiji.html

    Java 打飞机游戏代码

    Java打飞机游戏是一款基于Java编程语言开发的简单但有趣的小型游戏,它融合了编程、图形界面设计和音频处理等多个IT技术领域。这个游戏的核心在于控制一个飞机避开敌机的攻击,同时反击消灭敌人,通常包括游戏逻辑、...

    JAVA002打飞机游戏设计(程序+论文).zip

    JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+...

    java编写打飞机小游戏

    《Java编写打飞机小游戏详解》 在编程世界中,打飞机小游戏是一款经典的入门级项目,它可以帮助初学者理解和掌握基础的编程概念,如游戏循环、碰撞检测、对象更新等。本篇文章将深入探讨如何使用Java语言来实现这样...

    JAVA打飞机游戏设计与实现-程序.rar

    JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_...

    java打飞机代码

    Java打飞机是一款经典的休闲小游戏,深受程序员和编程爱好者喜爱。它以其简洁的代码结构、清晰的逻辑流程,成为初学者学习Java编程和游戏开发的理想案例。微信平台上的流行使得它更加普及,为Java学习者提供了一个...

    flash打飞机小游戏

    【描述】:在“Flash打飞机小游戏”中,开发者巧妙地结合了Flash的技术特性与Java的编程能力,以实现游戏的逻辑和交互。Flash主要负责游戏的视觉呈现,包括飞机、敌人、子弹等元素的动画设计和场景构建。Java则作为...

    微信打飞机游戏代码(java版)

    微信打飞机游戏是一款深受用户喜爱的休闲小游戏,而其Java版的实现,更是让编程爱好者们有机会深入了解游戏开发的底层逻辑。本篇文章将详细解析这款Java Swing实现的打飞机游戏,带你一步步走进游戏编程的世界。 一...

    飞机射击游戏(java)

    Java是一种广泛应用的面向对象的编程语言,以其跨平台性、稳定性和高效性著称,非常适合用于开发各种类型的游戏,包括简单的打飞机小游戏。 【Java编程基础】 Java编程语言是Sun Microsystems(现为Oracle公司)在...

    Java实现打飞机源码

    【标题】"Java实现打飞机源码"是一个关于使用Java编程语言开发打飞机游戏的项目。打飞机游戏是一种常见的小型游戏,通常包含基础的游戏逻辑、碰撞检测、分数系统以及简单的图形用户界面。在这个项目中,开发者可能...

    java实现的简单打飞机游戏

    《Java实现的简单打飞机游戏解析》 在编程领域,打飞机游戏是一个经典的案例,它可以帮助初学者理解和实践游戏开发的基本原理。本项目是用Java语言实现的一个简单打飞机游戏,通过深入分析这个项目,我们可以了解到...

    打飞机小游戏.rar

    《打飞机小游戏》是一款使用Java编程语言开发的小型游戏,非常适合初学者进行实践学习。Java是一种广泛应用于桌面应用、移动应用、服务器端开发以及游戏开发的面向对象的编程语言。它的跨平台特性使得代码能够在不同...

Global site tag (gtag.js) - Google Analytics