《毕业答辩-基于Java的飞机大战游戏的设计与实现》由会员分享,可在线阅读,更多相关《毕业答辩-基于Java的飞机大战游戏的设计与实现(25页珍藏版)》请在金锄头文库上搜索。
1、基于JAVA 的飞机大战游戏设计与实现,指导老师: 答辩学生: 专业班级:软件工程1027班 学 号:,一、飞机大战游戏介绍,本游戏属于设计游戏,玩家飞机和敌机的相对飞行 可以通过控制键盘实现对玩家飞机的控制且发射子弹攻打敌机,当发出的子弹打中敌机后,敌机爆炸,获得分数,当打死本关BOSS则进入下一关,本游戏一共三关。 当玩家机被敌机撞击或者敌机的子弹打到时,扣除友机生命,当友机生命值为0,游戏结束,游戏界面:,二、课题的目的和意义,随着Internet的发展,以Java为基础编写的游戏,游戏玩家的群体不断壮大。Java给游戏开发人员很大的方便。 基于JAVA语言开发“飞机大战游戏”,是对大学
2、知识的一次运用,本次的项目不但可以重拾儿时的回忆,也同样是对大学知识的一次回顾与复习。 飞机大战游戏拥有所有游戏共通的独立成份。它有一个游戏循环(这个过程被反复执行直到游戏退出)。这个游戏循环读取玩家的输入,处理这个输入,然后更新游戏的元素(下落的Enemy airplane),并且检查是Hero airplane的输赢(本机是否空血)。,三、开发工具和Java语言介绍,在开发工具上我选用了Eclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括
3、Java开发工具(Java Development Kit,JDK)。 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。集成开发环境,包
4、括了完备的编码、调试、测试和发布功能,完全支持HTML、Struts、JSF、CSS、Javascript、SQL、Hibernate。,Java简介: Java语言的前身是Oak,当时它的设计目的是用于洗衣机、电视机顶盒等消费性电子产品,但是一直没有得到多大的发展。随着Intemet的发展普及,无意中 成全了Java,使它很快成为了Intemet上广为流传的编程语言。 J2EE、J2SE、J2ME,三者构成了Java的完整架构,至此,Java已经由单纯的编程语言发展到一种平台的高度。这三者的结合,可以将从服务器到台式机到移动设备的应用开发集中到一种技术之下。,四、开发中用到的Java技术,(
5、1) 绘图技术 Applet程序所采用的AWT的绘图机制主要涉及三个方法:paint()方法、update()方法和repaint()方法,update()方法和paint()方法都有一个Graphics类参数。Graphics是画图的关键,它可以支持两种绘图:一种是基本的绘图,另一种是画图象,主要用于动画制作。 要进行绘图,首先要找到一个Graphics类的对象。update()方法和paint()方法所传递的参数都是Graphics类的对象,因此主要是通过重载它们来进行绘图,这是在动画程序中经常使用的方法。我们还可以通过getGraphics()方法得到一个Graphics类的对象,这个对
6、象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。得到了Graphics类的对象,就可使用各种绘图方法。 Graphics中提供的图形绘制方法有:paint( ):进行绘图的具体操作,必须有程序员重写;update( ):用于更新图形,先清除背景、前景,再调用paint();repaint( ):用于重绘图形,在组件外形发生变化,即大小改变或位置移动repaint( )方法立即被系统自动调用,而实际上repaint()方法是自动调用update()方法。主要运用: 游戏界面的绘制:敌机的显示、友机的显示、敌机子弹的绘制、友机子弹的绘制、
7、背景的显示、友机血条的显示、分数的显示、爆炸效果的显示;,(2)游戏开发中的交互 一个优秀的游戏必定是与玩家不断的沟通,给予玩家充分的操作时间,而游戏又必须快速地,正确的对玩家的动作作出反映,否则这样的游戏,不能称为一个好游戏。所以说,游戏开发中的交互与其他技术有着相同的地位,是一个游戏必备的核心。在Java游戏的开发中,往往使用事件处理器来进行设计。 事件:用户对程序的某一种功能性操作。Java中的事件主要有两种:组件类事件、动作类事件。 事件编程:用户编程定义每个特定事件发生时程序应做出何种响应,并且这些响应代码会在对应的事件发生时由系统自动调用。事件源是产出事件的组件。监听器是对组件所产
8、生的事件作出具体响应的代吗,即事件产出与处理分别由两个不同类加以编程实现。事件处理机制是AWT组件自身不编程处理相应的事件,面是交由事件监听器处理。 事件适配器:由于事件监听器接口是Abstract类型,意谓着实现该接口的类应全部实现其各个成员函数,但实际应用中可能只需处理某些事件响应代码;此时再采用实现事件监听器接口可能会导致编程复杂。JDK中提供事件适配器方式来实现事件编程。,(3)基于AWT及SWING的游戏界面开发 抽象窗口工具包AWT (Abstract Window Toolkit) 是API为Java程序提供的建立图形用户界面GUI (Graphics User Interfac
9、e)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。 AWT是Swing的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。AWT设计的初衷是支持开发小应用程序的简单用户界面。随着发展的需要,Swing出现了,Swing组件几乎都是轻量组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制
10、,轻量组件在它们的重量组件的窗口中绘制。Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。Swing采用了一种MVC的设计范式,即”模型-视图-控制”。,(4) 多线程技术的应用 线程简介:进程就是程序的运行时的一个实例。线程可以看作单独地占有CPU时间来执行相应的代码的。对早期的计算机(
11、如DOS)而言,线程既是进程,进程既是进程,因为它是单线程的。当然一个程序可以是多线程的,多线程的各个线程看上去像是并行地独自完成各自的工作,就像一台一台计算机上运行着多个处理机一样。在多处理机计算机上实现多线程时,它们确实可以并行工作,而且采用适当的分时策略可以大大提高程序运行的效率。但是二者还是有较大的不同的,线程是共享地址空间的,也就是说多线程可以同时读取相同的地址空间,并且利用这个空间进行交换数据。 Java实现多线程的过程:与其他语言不一样的是,线程的观念在Java是语言中是重要的,根深蒂固的,因为在Java语言中的线程系统是Java语言自建的, Java中有专门的支持多线程的API
12、库。在使用Java创建线程的时候,你可以生成一个Thread类或者他的子类对象,并给这个对象发送start()消息(程序可以向任何一个派生自Runnable接口的类对象发送start() 消息的),这样一来程序会一直执行,直到run返回为止,此时该线程就死掉了。 主要运用: 敌机的移动、敌机子弹的控制、友机的移动、友机子弹的控制、背景移动的控制;,五、游戏的设计,5.1 游戏状态控制功能 游戏的状态控制包括运行及结束游戏,首先进入游戏的加载页面,在游戏进行时,你需要去打死所有的敌机来完成当前关卡,你的生命降低为0的时候游戏就会结束,界面会出现提示。 5.2 游戏难度的调整 玩家越往后游戏的难度
13、越高,敌机的数量越多、敌机的速度越快、敌机的子弹数量越多。 5.3 游戏界面绘画功能 在右下角显示本机血条,左下角显示持有炸弹数和所得分数,游戏主屏主要用来输出用户对Hero airplane的控制与Enemy airplane的动作显示。 5.4 玩家游戏控制功能 玩家可以通过控制鼠标或者键盘来控制友机的移动和友机子弹的发射。,6.1 游戏首页的实现 6.1.1 界面实现 如下所示飞机大战的界面:,六、飞机大战功能的具体实现,6.2.2游戏开始的流程图如下图所示:,6.2 游戏开始模块的实现 6.2.1 界面实现 飞机大战的开始界面:,6.2.2游戏开始的流程图:,6.3 发射子弹模块的实现
14、 6.3.1 界面实现,6.3.2发射子弹流程图:,6.4积分模块的实现 6.4.1界面的实现 飞机大战积分模块界面:,6.4.2积分的输出:,4.5碰撞逻辑 判断飞机是否中弹的逻辑非常简单就是在绘制飞机与子弹的时候判断两个图片是否存在重合的部分,如果存在则在该重合位置绘制一个爆炸图片,之后将中弹飞机从飞机队列中删除,子弹同样的处理。 4.5.1碰撞画面的实现 绘制爆炸如图所示:,4.6 游戏玩家与BOSS的血条 绘制玩家飞机血条和Boss血条的逻辑是相同的,在统计飞机中弹次数的情况下使用图。 4.6.1玩家血条和BOSS血条的实现 下图为BOSS的血条和玩家飞机的血条:,4.7游戏操作的实现
15、 本游戏操作采用键盘的上下左右键来实现玩家飞机的移动。 4.7.1游戏操作实现代码 核心代码如下: public void move() oldx = x; oldy = y; if (Key.left) if (Key.xkey) x -= (double) speed / 4D; else x -= speed; if (x = (float) app.getWidth() x = (float) app.getWidth() - WIDTH; ,if (Key.down) if (Key.xkey) y += (double) speed / 4D; else y += speed; i
16、f (y + HEIGHT = (float) app.getHeight() y = (float) app.getHeight() - HEIGHT; if (Key.up) if (Key.xkey) y -= (double) speed / 4D; else y -= speed; if (y = 0.0F) y = 0.0F; ,总结和展望,本次毕业设计做的是基于Java的飞机大战游戏的设计与实现,是本人第一次完整的使用Java开发软件,在软件开发设计过程中,让我对Java有了进一步的了解,极大提高了编程能力。通过这次毕业设计,让我深深的体会到要完整地开发一个软件,前期工作是十分重要的,即开工前一定要有软件工程学的概念,如软件的需求分析、总体设计、详细设计等,还包括软件的结构安排、代码编程的模块划分。并且在这基础上,逐步的开发软件,这样定能达到事半功倍的效果。 整个软件按照预期目标大致实现了飞机大战游戏的功能,当然由于个人技术有限以及时间的不足,软件可能还存在一些不足,有待于日后进一步的改进和完善。,谢谢观赏,