放假写的一个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; } }
项目压缩包:
相关推荐
java打飞机小游戏.zipjava打飞机小游戏.zipjava打飞机小游戏.zip java打飞机小游戏.zipjava打飞机小游戏.zipjava打飞机小游戏.zip java打飞机小游戏.zipjava打飞机小游戏.zipjava打飞机小游戏.zip java打飞机小游戏....
这个“javaswing 打飞机小游戏”是一个基于Java Swing开发的简单娱乐项目,它展示了如何利用Swing库创建一个交互式的游戏应用。 在Java Swing中,开发者可以使用各种组件(如JFrame、JPanel、JButton等)来构建用户...
在本文中,我们将深入探讨如何利用Java开发一款打飞机小游戏,以及这个过程涉及的关键技术和知识点。首先,我们要明确,Java是一种广泛使用的面向对象的编程语言,尤其适合开发跨平台的应用程序,包括桌面游戏。 **...
Java打飞机小游戏是一款基于Java编程语言开发的休闲游戏,它模仿了微信上的经典打飞机玩法。这款游戏展示了Java在游戏开发中的应用,虽然可能在某些方面还不够成熟和完善,但它的源代码提供了一个很好的学习和实践...
程序开发工具: Borland JBuilder ...Bao.java 飞机爆炸时的一个小面板; 就这样,很简单,呵呵,希望大家能把它更加完善. 原文出处:http://www.eplato.cn/CutDeer-Blog/44-yongjavaxiedeyigeswingxiaoyouxi-dafeiji.html
Java打飞机游戏是一款基于Java编程语言开发的简单但有趣的小型游戏,它融合了编程、图形界面设计和音频处理等多个IT技术领域。这个游戏的核心在于控制一个飞机避开敌机的攻击,同时反击消灭敌人,通常包括游戏逻辑、...
JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+论文)JAVA002打飞机游戏设计(程序+...
《Java编写打飞机小游戏详解》 在编程世界中,打飞机小游戏是一款经典的入门级项目,它可以帮助初学者理解和掌握基础的编程概念,如游戏循环、碰撞检测、对象更新等。本篇文章将深入探讨如何使用Java语言来实现这样...
JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_程序JAVA打飞机游戏设计与实现_...
Java打飞机是一款经典的休闲小游戏,深受程序员和编程爱好者喜爱。它以其简洁的代码结构、清晰的逻辑流程,成为初学者学习Java编程和游戏开发的理想案例。微信平台上的流行使得它更加普及,为Java学习者提供了一个...
【描述】:在“Flash打飞机小游戏”中,开发者巧妙地结合了Flash的技术特性与Java的编程能力,以实现游戏的逻辑和交互。Flash主要负责游戏的视觉呈现,包括飞机、敌人、子弹等元素的动画设计和场景构建。Java则作为...
微信打飞机游戏是一款深受用户喜爱的休闲小游戏,而其Java版的实现,更是让编程爱好者们有机会深入了解游戏开发的底层逻辑。本篇文章将详细解析这款Java Swing实现的打飞机游戏,带你一步步走进游戏编程的世界。 一...
Java是一种广泛应用的面向对象的编程语言,以其跨平台性、稳定性和高效性著称,非常适合用于开发各种类型的游戏,包括简单的打飞机小游戏。 【Java编程基础】 Java编程语言是Sun Microsystems(现为Oracle公司)在...
【标题】"Java实现打飞机源码"是一个关于使用Java编程语言开发打飞机游戏的项目。打飞机游戏是一种常见的小型游戏,通常包含基础的游戏逻辑、碰撞检测、分数系统以及简单的图形用户界面。在这个项目中,开发者可能...
《Java实现的简单打飞机游戏解析》 在编程领域,打飞机游戏是一个经典的案例,它可以帮助初学者理解和实践游戏开发的基本原理。本项目是用Java语言实现的一个简单打飞机游戏,通过深入分析这个项目,我们可以了解到...
《打飞机小游戏》是一款使用Java编程语言开发的小型游戏,非常适合初学者进行实践学习。Java是一种广泛应用于桌面应用、移动应用、服务器端开发以及游戏开发的面向对象的编程语言。它的跨平台特性使得代码能够在不同...