软件设计毕业设计论文-JAVA游戏开发设计与实现-全民打飞机_第1页
软件设计毕业设计论文-JAVA游戏开发设计与实现-全民打飞机_第2页
软件设计毕业设计论文-JAVA游戏开发设计与实现-全民打飞机_第3页
软件设计毕业设计论文-JAVA游戏开发设计与实现-全民打飞机_第4页
软件设计毕业设计论文-JAVA游戏开发设计与实现-全民打飞机_第5页
已阅读5页,还剩12页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常州工学院学士学位设计一、设计任务1.设计背景随着游戏的日益普及、Java功能在移动设备上的实现,Java应用程序产生的增值服务逐渐体现出其影响力,对人们丰富多彩的生活内容、提供快捷方便的资讯起着至关重要的作用。随着信息技术的快速发展,Java语言的跨平台的优势,毫无疑问在手机上体现的淋漓尽致,而JavaMe是基于Java技术的,JavaMe扩展了Java的优势。在当今操作系统众多的嵌入式领域中,Java给了我们一个跨平台的好机会,利用Java,我们可以很好的实现跨平台。随着JDK的推出和不断发展,Java语言设计的游戏速度已经得到大大地改善。所以今后基于Java的游戏将是一种趋势。基于J2ME的Java游戏全民打飞机的设计与实现,通过SunJava(TM)WirelessToolkit2.5.2forCLDC和Eclipse3.2等开发工具,利用Java语言,开发出一款操作简单,容易上手的飞机射击类多模式的游戏。2.作品简介本课题对Java游戏全民打飞机进行了设计与实现。为了让该游戏具有平台无关的特性,系统选用了Java作为开发语言。一个完整的Java游戏除了要有令人赏心悦目的游戏界面和炫酷的游戏素材,还要有严谨的逻辑规划,保证玩家在体验游戏时在每一个小的环节上都能感受到我们项目的用心良苦。以期能够通过使用Java技术实现一个飞行设计游戏。3.设计思路全民打飞机是款非常经典的JAVA游戏,游戏规则非常浅显易懂。玩家进入游戏之后,界面会显示开始游戏、排行榜、退出选项,进入游戏后玩家飞机发射子弹击打敌机,每击打掉一架敌机后,玩家就获得相应的分数,累计得分,在最后时显示成绩,当累计到一定分数后会出现小BOSS,打死小BOSS后会出现最终的BOSS。综上,此游戏制作流程相对比较清晰。根据此游戏设计的基本构想,主要涉及到的对象可能如下:(1)玩家飞机:进入游戏玩家通过鼠标和鼠标左右键控制其移动和发射子弹。(2)敌机(包括普通小敌机和大BOSS):此游戏中总共有;两种小敌机,两种大BOSS,敌机随机生成。(3)子弹包:当玩家的飞机碰撞到子弹包时,可以变换成不同的子弹,此游戏中玩家共有2种子弹可变换。(4)血量包:当玩家碰撞到此包时,玩家此条命的血量增加五格。每被敌机击中一次,血量减少二格。(5)生命值包:当玩家碰撞到此包时,玩家生命值加5。每条命有10滴血。以上对象中,除玩家的飞机是固定生成在界面上,其他对象都是随机生成的。当玩家进入该游戏应用时,首先出现的是界面中四种选项,开始游戏、排行榜、帮助和退出。当选择开始游戏时,玩家进入游戏。游戏界面流程图1.游戏界面游戏界面退出帮助排行榜开始游戏退出帮助排行榜开始游戏排行榜界面是否继续得分恭喜过关排行榜界面是否继续得分恭喜过关游戏运行流程图1.4.设计要求伪界面模块模块功能:开始游戏、排行榜、帮助、退出运行游戏界面模块功能:运行游戏使玩家体验该游戏排行榜界面模块功能:显示玩家在该游戏所得的分数与相应的排名5.开发工具与环境操作系统:Windows8程序语言:Java2IDE:Eclipse3.01二、设计说明1.游戏规则设计(1)基本规则。当游戏开始时,玩家通过鼠标控制飞机的移动,鼠标的左右键控制子弹的发射。玩家只有把积分累计到1000才能捡到小BOSS,击落小BOSS才能够遇见最终的大BOSS,此大BOSS有一定的血量,要被击中一定次数之后才会消除。(2)飞机的生成。飞机的产生方式是随机的,并且是间断的产生不同类型的小敌机,最终产生大BOSS。闯关中通过计数控制小敌机产生的数量。(3)包的生成:原理同飞机的生成。(4)我方飞机(敌机)子弹的产生:我方飞机子弹的产生,通过监听确定键来生成。当玩家按了鼠标左键,则产生相应的子弹。产生子弹的位置和我方飞机当前位置有关。(5)我方飞机的移动:我方飞机的移动通过监听鼠标键来控制其移动。(6)敌机、包及子弹的移动:敌机、包子弹在产生之后,以一定速度按照同一个方向移动。(7)飞机等的消除:飞机等被击中的方式为直接移除,之后添加上爆炸的图片。(8)胜负判断:当将所有小敌机及大BOSS击败后为胜利通关。2.素材准备及界面设计在全民打飞机游戏中,使用了大量的图片素材。根据各个图片的功能,图片的种类丰富多彩。以下将对其进行简单的介绍。(1)游戏中菜单使用到的图片,主要有主菜单,帮助菜单,界面选择,飞机选择图片,此些界面中都使用到了各种背景图片。如图2。图2游戏背景(2)在游戏中涉及到的对象颇多,主要有我方飞机,敌机(小敌机和大BOSS)各种包及各种子弹。我方飞机:由于在此游戏中,游戏进行时。为了使得视觉上有更好的效果,我们设计了飞机阴影,飞机的喷射,如图3。敌机:为了增加游戏的趣味性和层次感,设置的小敌机的种类和数量是不同的。但总共备有了2种小敌机。准备两种大BOSS,如图4和5。图4各种小敌机图5两种大BOSS图6子弹元素图7各种包和道具友军援军飞机(3)在此游戏中,不同的飞机有不同的子弹。而且,我方敌机可以通过撞击子弹包来改变子弹种类。子弹有不同的元素构成,通过将不同元素排列组合形成不同种类的子弹。在此游戏中,子弹元素总共涉及到5种,子弹包有2种,生命值包1种,血量包1种,如图6和7。(4)在此游戏中,飞机经常发生碰撞,飞机经常被击毁,所以爆炸图片经常被使用到。因为爆炸是一个动态过程,所以设计了6*6帧的爆炸图片,利用此图片可以制作成爆炸的动态图,如图8。图8爆炸图片接下来将对游戏的界面进行设计准备。游戏的界面分为控制区和操作区,控制区是整个游戏的控制按钮的集中区域,操作区是游戏者进行游戏的场所。为了游戏界面的美观和一致,大多数界面都采用相同的背景,字体颜色风格相似等。游戏界面如图9所示。图9游戏界面3.程序工程结构与用途:包名称说明com.Entity实体类com.Factory制作所有飞机类com.Listener键盘监听com.UI测试类与画板的内容com.Utils通用工具Image储存素材图片与声音需求实现(1)游戏音效在此游戏运行时,通过Soundutils.palymusic调用以录入的音效出现第一种声音,并且通过Soundutils.palymusic设置了鼠标经过按钮时的音效,当点击开始按钮时,会出现第二种音效,用newThread3().start();调用就有玩家飞机子弹发射和敌机子弹发射声音,当我方飞机或者是敌机爆炸时会发出“pong”的声音,当游戏进入BOSS时会运行第二个界面的音效。然而我们在游戏快失败时我们能按下“O”键出现友军支援军我也在此地方设置了声音,还设置了飞机捡道具时的声效。(2)素材收集(3)友方援军的实现在此设计了友军支援军,用Key_Listener类实现键盘监听,当玩家按下“O”键时会调用在画板中画出来的援军集合,然后通过FriendPlaneMove()方法实现援军的支援与移动,并且使用Soundutils.palymusic调用声音。For(inti;i<Fy.size();i++)For(inti;i<Fy.size();i++)循环画援军循环画援军if(Fy.get(i)!=nullif(Fy.get(i)!=nullY画出一个援军画出一个援军死循环5.该游戏的特点全民打飞机是一款非常经典的游戏,这款游戏由软件13322班第二组成员设计与制作,此游戏有丰富的内容,炫酷的子弹与真实感十足的敌机与玩家飞机,和动感的音乐。这款游戏具有累计分数与排行榜,我们可以通过游戏累计分数而达到该游戏的第一名这样使得玩家具有玩了还想玩的冲动,激起人类的求胜欲望。三、设计成果1.游戏伪界面的实现1.界面主要有背景图片,添加在界面上得各种图标及各种文字组成。除此之外还包括功能键及界面标题的绘制。不同界面的设计整体方法大致相同,主要在于图片的排版。本游戏界面大小为:屏幕宽度:496像素,屏幕长度:680像素。所以以下将以飞机选择界面为例介绍游戏运行界面的实现。绘制这些界面的伪代码为://设置开始游戏按键button1.setLabel("开始"); button1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ t9.stop(); t8.stop(); menu.dispose(); newMyFrame(); } });//设置排行榜按键 button1.addMouseListener(newMouseAdapter(){ publicvoidmouseEntered(MouseEvente){ newThread10().start(); } }); button2.setLabel("排行榜"); button2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newMarkFrame(); } }); button2.addMouseListener(newMouseAdapter(){ publicvoidmouseEntered(MouseEvente){ newThread10().start(); } });//设置帮助按键 button3.setLabel("帮助"); button3.addMouseListener(newMouseAdapter(){ publicvoidmouseEntered(MouseEvente){ newThread10().start(); } });//设置退出按键 button4.setLabel("退出"); button4.addMouseListener(newMouseAdapter(){ publicvoidmouseEntered(MouseEvente){ newThread10().start(); 2.游戏按键的实现在初始游戏时,玩家进入菜单后通过上下键选择游戏的各种功能。当进入游戏后,玩家通过方向键和确定键控制我方飞机的移动和子弹发射。在菜单选择中,可以通过设置一个option变量来标记玩家选择的状态。并通过此变量来转换界面。在游戏开始以后,玩家通过鼠标控制飞机移动,当玩家控制飞机,通过KeyEvent类来监听获取当前键盘的状态//向下移动publicvoidkeyPressed(KeyEvente){ if(e.getKeyCode()==KeyEvent.VK_S){ if(mp.getY()<FrameUtils.Height-130) mp.setY(mp.getY()+mp.getSpeed());//向上移动 }elseif(e.getKeyCode()==KeyEvent.VK_W){ if(mp.getY()>0) mp.setY(mp.getY()-mp.getSpeed());//向左移动 }elseif(e.getKeyCode()==KeyEvent.VK_A){ if(mp.getX()>0) mp.setX(mp.getX()-mp.getSpeed()); //向右移动 }elseif(e.getKeyCode()==KeyEvent.VK_D){ if(mp.getX()<FrameUtils.Width-110) mp.setX(mp.getX()+mp.getSpeed()); //召唤援军 }elseif(e.getKeyCode()==KeyEvent.VK_O){ mp.setSos(true); }3.爆炸效果的实现碰撞后爆炸是一组动态效果,在此游戏中共设置了9个帧,每次绘制的时候帧的值就加1,换成下一个爆炸图片,通过bomb函数实现。每当发生碰撞时,有飞机被击毁时,就调用添加爆炸图片的函数,生成爆炸的效果。添加爆炸图片的函数为(其中调用了Bomb创建了一个新对象,调用了构造函数,设置了图片的位置):bombs.addElement(newBomb(enemy.getSprite().getX()+enemy.getSprite().getWidth()/2,enemy.getSprite().getY()+enemy.getSprite().getHeight()/2));Bomb构造函数:publicBomb(intx,inty){ //爆炸图片大小为180*180,每排有六个爆炸的图片,即六帧,共六排,每帧30*30 super("/bomb.png",30,30);//生成精灵对象sprite sprite.setPosition(x-10,y-10);//设置图片位置 }循环调用下面函数,使得图片中的36个状态的爆炸效果依次的呈现,形成动态的爆炸效果。publicbooleanbomb(){ sprite.nextFrame();//设置下一帧 bombCount++; //爆炸图片中总共有9个不同状态的爆炸小图 returnbombCount>9;}4.排行榜的实现当游戏玩家点击游戏界面排行榜时,会通过图片的切换,进行切换到排行榜界面,排行榜界面有排名、名字和分数。实现代码如下:jb1=newJButton("返回"); jb1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ MarkFrame.this.setVisible(false); } }); jsp=newJScrollPane(jt1); jp1.add(jsp); jp2.add(jb1); column.add("排名"); column.add("姓名"); column.add("分数"); try{ read(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } this.setTitle("排行榜"); this.add(jp1); this.add(jp2,BorderLayout.SOUTH); this.pack(); this.setLocationRelativeTo(null); this.setVisible(true); }5.友军飞机子弹的产生该游戏所有的界面与素材都是用画板画出来的,子弹也不例外通过定义容器集合来储存子弹;publicvoidProductMyBullet(){ if(bt.size()<PlaneUtils.ZD_Num&&MP.getState()==PlaneUtils.state_shoot){ bt.add(Fac.ProductBullet(MP,MP.getBao_kind(),0,0)); //加入发射子弹的声音 newThread3().start(); }else{ for(inti=0;i<bt.size();i++){ if(bt.get(i)==null){ bt.set(i,Fac.getZd(MP,MP.getBao_kind(),0,0)); //加入发射子弹的声音 newThread3().start(); break; }四、结束语在毕业设计中我学到了很多东西,以前一直以为自己学的很好,经过这次实习也知道了自己还有很多东西要学习,自己学的一点都不好。不过我相信在未来我会更加努力。经过了细心的调试和排错解决了绝大部分的问题,但是我的水平实在有限,但我相信,随着时间的推移,个人水平的增长,我一定会重写这个程序,使其更加完善。五、致谢在这里首先我要感谢我的指导老师,她在毕业设计中指导我,推荐我阅读很多资料、很多书籍。在这里非常感谢老师,谢谢你对我的指导。还要感谢我的2个同伴,在毕业设计中碰到许多问题是你们帮我解决的,如果没有你们2个我的毕业设计就完不成,非常感谢你们,你们教会我很多东西,谢谢你们了。六、参考文献[1]袁海燕,王文涛等.Java实用程序设计100例[M].北京:人民邮电出版社,2005:5-6.[2]张亦辉,冯华,胡洁.Java面向对象程序设计[M].北京:人民邮电出版社,2008:28-32.[3]李振鹏,龚剑.J2ME手机游戏开发技术详解[M].北京:北京,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论