一、程序概述

1.开发环境

开发程序的工具Eclipse是著名的跨平台的自由集成开发环境、一个开放源代码的、基于Java的课扩展开发平台。就其本身而言,它只是一个框架和一组服务,用与通过插件组件构建开发环境。Eclipse的本身只是一个框架平台,但是众多插件的支持是的它拥有其他功能相对固定的IDE软件很难具有的灵活性。Eclipse附带了一个标准的插件集,包括Java开发工具。

2.开发目的

掌握用Java实现面向对象程序设计 基本方法,熟练掌握Java程序开发环境的使用,完成一个应用程序的设计、编码、调试,了解程序设计过程,锻炼实际应用能力,为后续课程打下基础。回忆童年经典游戏,开发属于自己的游戏。

3.开发功能

本程序实现的主要功能有游戏主界面、游戏结束界面、飞机爆炸效果、子弹移动、飞机移动、生命、分数、背景地图移动、键盘监听、线程实现。

二、程序概要

1.程序流程图

2.类

整个程序共有12个类。PM.java用于存放程序所需的图片资源、Location.java用于确定图片标签等在窗口中的位置、Myplane.java用于描述我方飞机、Enemyplane.java用于描述敌机飞机、Mybullet.java用于描述我方飞机的子弹、Enemybullet.java用于描述敌方飞机的子弹、Break.java用于描述飞机爆炸效果、Life.java用于我方飞机生命的提示、Home.java用于描述欢迎页中的内容、Gameover.java用于描述结束页的内容、Content.java用于调用其他类中的属性和方法利用线程完整实现功能、Game.java包含main()函数用于运行程序。

3.函数功能关系

主类Game.java里面的main()是程序的入口;Home.java功能是实现欢迎页面窗口的布局包含Bcakground()实现背景的布局、Label()实现文字提示的布局、Keyborad()键盘监听方法回车实现跳转游戏界面;Content.java是游戏的主要面板,有Mapmove()实现游戏地图的移动效果、内部类中包括盘paint()绘制飞机、子弹、字符串等,run()用于启动线程,分了很多不同的方法用集合类实现飞机、子弹等移动,用KeyListener接口实现键盘的监听,玩家飞机类Myplane.java、敌机类Enemyplane.java、子弹类Mybullet.java、Enemybullet.java都是继承Location类然后重现方法实现确定每个类的位置,再加子类特有的方法实现移动等。Break.java爆炸类通过飞机、敌机、子弹坐标判断是否发生碰撞利用一张.gif的图片相对于飞机位置实现爆炸功能。

三、程序详细设计

1.关键代码分析

主类Game.java的main()中new Home()用构造方法进行实例化,Home类中构造方法Home()实现设置窗口大小、窗口的图标、背景、提示Label、键盘监听实现了一个界面的显示。

Home类继承了JFrame实现窗口标题重写、add()和remove()标签、addKeyListener(new KeyAdapter()实现键盘的监听,当按下Enter键if(key == KeyEvent.VK_ENTER)实现页面跳转游戏界面由Content()实现,requestFocus()和setFocusable(true)方法实现是否获得焦点,使键盘监控等在新游戏界面中实现。remove()移除组件label防止覆盖在游戏界面中。Background()函数和Label()函数实例化ImageIcon实现背景图片、标签的添加。

Content类继承Jpanel调用KeyListener接口,是整个游戏的主体代码。同样也有键盘键盘监听控制我方飞机。

利用paint(Graphics g)实现drawImaghe、drawString、draw方法将背景、飞机、子弹、爆炸效果、标签绘制在窗口中。

new Thread()实例化线程的构造方法,run()运行线程,设定线程时间为time每次加30毫秒,Thread.sleep(30)线程停30毫秒后进行重绘repaint();实现静态的页面在每次重绘的时候就像在移动。时间参数time也实现了敌机每次移动和自带发射时间。

Mapmove()利用两张背景图拼接实现地图的滚动

Addnewenemy1(long time,long score)、Addnewenemy2、Addnewenemy3、Addnewenemy4、Addnewenemy5、Addnewenemy6这6个方法根据当前分数实现加入不同的敌机,缩短敌机出现时间,增加难度。

当生命值小于0时new Gameover()绘制游戏结束图片覆盖在窗口上,同时实现在不关闭窗口的情况下可以重新开始游戏。键盘监听回车键并且判断生命值小于0才能生效让生命值、飞机位置、得分初始化。

2.疑难问题解决

刚开始拿到Java大作业题目的时候一心想的就是小时候玩的最多的雷电,知道它是有什么功能,感觉会相对其它题目更容易些,实际开始打算动手做的时候却无从下手,似乎需要实现的功能都是在课堂中没有接触到了。随着时间流逝,自己也对这个作业紧张起来,开始认真着手做。参考了Java游戏编程开发教程中的代码,有了一些思路。

从开始做GUI界面实现窗口到显示背景和飞机都很顺利的进行,当我想实现飞机移动的时候就遇到难题了,知道要用到线程,但是对线程的学习比较少不会用,在百度找了线程有关的demo,明白线程与repaint()一起用可以实现画面更新。

第一次使用键盘监听,没有键盘监听就无法移动飞机,想过通过鼠标移动或者键盘,最终决定使用键盘控制。查到java类库中有java.awt.event.KeyAdapter; java.awt.event.KeyEvent;要使用键盘监听编译器会提示加入三个方法分别是keyPressed(KeyEvent e)按键被按下事件、keyReleased(KeyEvent e)按键被弹起事件、keyTyped(KeyEvent e)有字符被输入事件。

基本实现我方飞机移动和敌方飞机随事件变化移动,在做背景的移动又碰壁了,会发生地图的重叠而使背景层一片混乱,本来想放弃这个实现的,在不断修改数据后发现,背景不发生重叠需要背景的高与每次移动背景的y坐标成整数倍的关系。

加入飞机子弹时发现无法实现从飞机的中央发射出子弹,而是满屏幕有规律的出现子弹,在经过不断尝试以后想到创建Location类确定窗口中每个组件的位置,获取飞机的x,y坐标,相对于飞机的x,y坐标和飞机的长宽算出子弹出现的位置完成功能。

实现子弹与飞机碰撞和飞机与飞机碰撞出现位置偏差通过计算相对位置不断更改数据把问题解决,但在实现飞机爆炸的时候一心想的就是利用gif图,课本提供的案例代码是将图片弄成数组,组成一个连续的爆炸,我无法理解如何实现,运用不到自己的代码中,我便使用gif实现爆炸效果,但是gif图在窗口中实现始终都在不会消失,如果我在代码后面再写remove()方法实现gif去除,但是代码执行是立刻的,爆炸效果就会消失,首先想到java有没有延时执行某行代码的方法,使用与sleep()以后整个窗口都会暂停并且爆炸也不会消失。最后转换思路将爆炸移除单独写了函数Breakremove(long time),算是实现了设置3秒后移除爆炸效果。

觉得打开程序就直接进入到游戏界面不太友好,便想加一个菜单界面,但在Content类实现的时候不管怎样都是直接进入到游戏中,后面转变思路新建类Home实现菜单界面,监听键盘后切换到游戏界面,主类main()不再直接new Content()而是new Home()实现运行程序不直接进游戏界面而是先进菜单界面,类似的方法实现了Gameover界面。

四、程序使用说明

运行程序后游戏进入菜单界面,根据提示按回车键进入游戏界面

利用键盘上下左右键控制飞机,躲避敌机的碰撞和子弹的碰撞,利用自己飞机的子弹消灭敌机在游戏中获得分数从而提升关卡的难度。当生命值为0的时候,游戏结束,如果继续玩则回车键开始新的游戏。

 

五、程序分析

1.优点

程序运行比较流畅,基本功能都已经实现,程序代码层次清晰,归类合理。模块化很明显,各个模块很明确需要实现的功能,代码也易读,并且做了很多的注释,这也是我往常完成课后小作业从没有这种习惯,但大作业的代码太多,让我体会到了注释的好处。各功能相互调用的比较好。

2.缺点

有部分功能例如飞机爆炸比较将就,缺少实现例如BOSS类还有音效等,UI界面没有进一步优化完善。

六、总结

在做大作业之前我已经学习了一个学期的Java,但在做的过程中还是遇到了种种难题是我在课堂中没有接触到了。一句话活到老学到了是真的,更多的是自己在课余时间学习。非常幸运能在星空让我接触到新的一门语言Swift。还有在我边学Java的时候有Swift面向对象的编程思路。加上自己网上百度的demo和自己查看API解决一系列的问题。也很意外自己从一开始无从下手到最后完成一个令自己比较满意的程序,有一种成就感。通过游戏的开发也让我对编程更有兴趣。一路做下来收获了很多课堂中学习不到的知识。任何一门语言光靠理论知识是远远不够的,只有自己动手实践,并理论结合实际才能达到很好的学习效果。

七、参考文献

Java程序设计与实践教程

Java游戏编程开发教程

百度

Github

CSDN

//源码在github哦

https://github.com/Hph1998/ThunderGame

有控制雷电武器的java游戏_雷电飞机射击游戏 JAVA相关推荐

  1. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  2. 项目实训(十一)——FPS游戏(第一人称射击游戏)初步开发

    一.前言 我与另外两个组员合作进行了FPS游戏(第一人称射击游戏)的开发,这个游戏对应于我们在项目开始设想的PVP玩家对战游戏.玩家之间的之间对战会让游戏变得更加紧张刺激,还能够增强玩家之间的感情. ...

  3. 基于HTML的飞机射击游戏

    目录 1.游戏设计思路 2.飞机射击游戏设计步骤 本篇博文将分享一篇基于HTML的简单的飞机射击游戏,下方是玩家飞机,可按空格键能不断地发射子弹,上方是随机出现的敌方飞机.玩家可以通过键盘的方向键控制 ...

  4. 有图有真相,分享一款网页版HTML5飞机射击游戏

    本飞机射击游戏是使用HTML5代码写的,尝试通过统一开发环境(UDE)将游戏托管在MM应用引擎,直接生成了网页版游戏,游戏简单易上手,非常适合用来当做小休闲打发时间. 游戏地址:http://flyg ...

  5. 有图有真相,网页版HTML5飞机射击游戏

    本飞机射击游戏是使用HTML5代码写的,尝试通过统一开发环境(UDE)将游戏部署托管在MM应用引擎,直接生成了网页版游戏,游戏简单易上手,非常适合用来当做小休闲打发时间.   游戏地址:http:// ...

  6. unity太空飞机射击游戏

    unity太空飞机射击游戏 有分数和生命值,飞机可以对其他飞行物进行射击,分数提高后飞机可以升级,具体情况如下图: 点我下载资源

  7. unity3D期末作业-太空飞机射击游戏

    unity3D期末作业-太空飞机射击游戏 unity 3D期末作业-太空飞机射击游戏,飞机可上下左右移动并发射子弹,有背景音乐,子弹有打击音效,有爆炸声,可以记录分数,飞机碰到障碍物时会爆炸游戏结束, ...

  8. unity3d游戏2d横版射击游戏完整项目源码分享

    unity3d游戏2d横版射击游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1YwhEy7DeKIHFU8pBLdJFPg 提取码:3wnx 复制这段内容 ...

  9. 雷电飞机射击游戏 JAVA

    一.程序概述 1.开发环境 开发程序的工具Eclipse是著名的跨平台的自由集成开发环境.一个开放源代码的.基于Java的课扩展开发平台.就其本身而言,它只是一个框架和一组服务,用与通过插件组件构建开 ...

最新文章

  1. EMR、EHR和PHR的定义与对比
  2. 数学建模题目及论文_数学与运用数学专业论文题目帮助
  3. 指针:自定义函数sumDiff(),调用它来求两个数的和、差
  4. 【深度学习】人人都能看得懂的卷积神经网络——入门篇
  5. HTTP请求返回状态码和提示信息
  6. nodejs的启动方式
  7. Python编程常见出错信息及原因分析(4)
  8. 强制将IE8设置为IE7兼容模式来解析网页
  9. modbus tcp主站和从站_实例讲解PLC实现modbus通讯
  10. css宋体代码_css中宋体怎么设置?
  11. stm32点击“go to definition of xxx”不跳转,出现browser的解决办法
  12. 分析Chrome的瀑布流(Waterfall)
  13. 如何避免数据湖变成数据沼泽
  14. 图像质量评价及率失真性能曲线绘制
  15. 工业级嵌入式主板助力物联网行业发展
  16. 基础篇章:React Native之 ScrollView 的讲解
  17. 我的世界java版怎么弄在线时间_我的世界怎么设置游戏内的时间为清晨
  18. 求方程的解(简化版)
  19. 深圳计算机中级职称如何申请,深圳中级职称评定有何流程
  20. 全天在线的健康小助手,时刻监测身体状况,dido Y1血压心电手环上手

热门文章

  1. 百度一键Root使用教程
  2. java 数字转大写_Java把数字转换成中文大写数字
  3. B2B2C网上商城开发指南——基于SaaS和淘宝API开放平台
  4. Echarts 修改X轴字体大小
  5. 选择云服务器主要看那方面的参数和性能
  6. 404服务器错误的讲解
  7. Zhong__k8s基础尝试和配置flannel
  8. mysql进阶(三十四)Field ‘id‘ doesn‘t have a default value 错误解决方法
  9. 升级打怪课堂的题库更新了!
  10. 且看一个IT女孩的求职之路