毕业设计-基于java坦克大战课程设计报告_第1页
毕业设计-基于java坦克大战课程设计报告_第2页
毕业设计-基于java坦克大战课程设计报告_第3页
毕业设计-基于java坦克大战课程设计报告_第4页
毕业设计-基于java坦克大战课程设计报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计基于java坦克大战课程设计报告基于java坦克大战课程设计报告摘要随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。关键字:局域网;电子游戏;坦克大战;毕业设计基于java坦克大战课程设计报告全文共17页,当前为第1页。

目录毕业设计基于java坦克大战课程设计报告全文共17页,当前为第1页。TOC\o"1-2"\h\u19080一、系统分析 -1-9230可行性分析 -1-22310需求分析 -1-11282二、概要设计 -2-6949工作流程图 -2-6939项目规划 -3-12189开发及运行环境 -3-279三、详细设计与算法实现 -4-15129游戏主窗口 -4-12146网络管理 -6-8757封装的游戏元素 -8-30132四、测试 -10-26189测试环境 -10-18420测试结果 -10-27296五、软件截图 -11-17898六、总结 -14-23443七、参考文献 -15-毕业设计基于java坦克大战课程设计报告全文共17页,当前为第2页。毕业设计基于java坦克大战课程设计报告全文共17页,当前为第2页。系统分析可行性分析技术可行性软件使用swing、GUI、Socket、面向对象设计等技术实现,这些技术均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用这些技术是可行的。经济可行性本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务,从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放弃开发,以减少损失。需求分析通过反复研究以及市场调查,得知游戏须具有以下功能:需要有图形游戏界面,让用户能看到游戏给出的反馈有人机交互功能,使用户能操作指定的游戏元素不同队伍的坦克,须显示不同外观,已分辨敌我坦克能够开火,攻击敌方,但不能攻击队友需要有不可被子弹穿透的墙,且墙有可摧毁和不可摧毁两种坦克有生命值,并非被击中一次就会爆炸坦克爆炸后将产生道具,拾到道具的坦克可加满生命值游戏须提供网络支持,即局域网联网对战玩家在游戏中可以发言,即群聊功能须在玩家之间设立房主,掌管游戏何时开始游戏结束时须判断哪一队胜利游戏结束后可重新开始游戏的操作、进度等须提供相应说明,以告知玩家毕业设计基于java坦克大战课程设计报告全文共17页,当前为第3页。

概要设计毕业设计基于java坦克大战课程设计报告全文共17页,当前为第3页。工作流程图毕业设计基于java坦克大战课程设计报告全文共17页,当前为第4页。程序开始连接服务器毕业设计基于java坦克大战课程设计报告全文共17页,当前为第4页。程序开始连接服务器连接成功?YN新线程刷屏(间接调用paint)延迟25ms初始化游戏元素根据游戏元素的属性,对其经行操作和绘出其图形Paint方法战斗结束?Y键盘监听器判断按下的是那个键改变相应游戏元素的属性项目规划本游戏是一个典型的局域网对战游戏,应具有如下结构:游戏主窗口游戏的一切效果、进度、消息等都将由游戏主窗口展示网络管理负责发送、接收网络数据,以及如何处理这些数据封装的游戏元素游戏元素包括:坦克、子弹、爆炸效果、墙、道具等游戏必须的元素开发及运行环境开发时硬件环境CPU:InterP7350显卡:NVIDIAGeForce9600MGS内存:威刚2G/DDR2-667显示器:三星液晶15.4寸/分辨率:1280X800开发时软件环境操作系统:Windows7JDK:1.5.0IDE:Eclipse3.4.0运行时硬件环境CPU:InterE5200显卡:NVIDIAGeForce7300GS内存:金士顿2G/DDR2-667运行时软件环境操作系统:WindowsXpJRE:1.6.0显示器:三星液晶19寸/分辨率:1440X900毕业设计基于java坦克大战课程设计报告全文共17页,当前为第5页。

毕业设计基于java坦克大战课程设计报告全文共17页,当前为第5页。详细设计与算法实现游戏主窗口游戏主窗口是人机交互的窗口,对玩家而言,他们只和游戏主窗口打交道,并不关心游戏内部是如何实现的,所以游戏主窗口部分最重要的便是游戏数据的输入、输出。在程序中须创建一个类TankClient,继承自Frame来创建一个窗口。游戏数据的输入游戏中坦克需要能往上、下、左、右四个方向运动,故须设立4个按键,使其能操作坦克,另须设一个键控制坦克开火。为方便操作,本游戏设置WSAD分别表示上下左右,小键盘数字键4,表示开火。具体实现为,为窗口添加KeyListener(键盘监听器),监听键盘的按下和抬起。在TankClient类中添加内部的适配器类,由于不需要其它类访问,将其设计为private的,以保证面向对象设计的封装性。代码如下: /* *移动按键键盘监听器 */ privateclassMoveKeyLextendsKeyAdapter{ publicvoidkeyPressed(KeyEvente){ switch(e.getKeyCode()){ caseKeyEvent.VK_A: myTank.keyDownToDir(Direction.L); break; caseKeyEvent.VK_W: myTank.keyDownToDir(Direction.U); break; caseKeyEvent.VK_D: myTank.keyDownToDir(Direction.R); break; caseKeyEvent.VK_S: myTank.keyDownToDir(Direction.D); break; } } publicvoidkeyReleased(KeyEvente){ switch(e.getKeyCode()){ caseKeyEvent.VK_A: myTank.keyUpToDir(Direction.L); break;毕业设计基于java坦克大战课程设计报告全文共17页,当前为第6页。 caseKeyEvent.VK_W:毕业设计基于java坦克大战课程设计报告全文共17页,当前为第6页。 myTank.keyUpToDir(Direction.U); break; caseKeyEvent.VK_D: myTank.keyUpToDir(Direction.R); break; caseKeyEvent.VK_S: myTank.keyUpToDir(Direction.D); break; } } } /* *开火按键键盘监听器 */ privateclassFireKeyLextendsKeyAdapter{ publicvoidkeyReleased(KeyEvente){ switch(e.getKeyCode()){ caseKeyEvent.VK_NUMPAD4: myTank.fire(); newTankFireMsg().send(); break; } }}游戏数据的输出玩家需要从游戏输出数据中获得游戏信息,如坦克在往上行驶、坦克发了颗子弹、坦克爆炸等,这些均需要通过游戏数据的输出来告知玩家。由于TankClient继承自Frame,Frame类中的方法paint,可以在窗口中绘制图形,即满足了游戏需要图形界面的需求;另有方法repaint可以刷新窗口,以及时提供游戏信息,故须创建线程,不断地刷新窗口,来获取最新的游戏信息。代码如下: publicvoidpaint(Graphiceg){ for(inti=0;i<allGE.size();i++){ intallGEOldSize=allGE.size(); GameElementge=allGE.get(i); if(geinstanceofMoveable){ Moveablemoveable=(Moveable)ge; moveable.move(); }毕业设计基于java坦克大战课程设计报告全文共17页,当前为第7页。 ge.draw(g);毕业设计基于java坦克大战课程设计报告全文共17页,当前为第7页。 /* *如果容器数量减少,则减少相应的遍历索引i */ if(0<allGEOldSize-allGE.size()){ i-=allGEOldSize-allGE.size(); }}/* *刷屏线程,负责画面的刷新以及游戏时间的推进 */ privateclassMyThimplementsRunnable{ publicvoidrun(){ while(true){ repaint(); try{ Thread.sleep(25); }catch(InterruptedExceptione){ e.printStackTrace(); } } } }为使游戏主窗口效率更高、更容易被引用,且游戏主窗口只有一个,故TankClient类使用单例模式来设计:privatestaticfinalTankClienttc=newTankClient();privateTankClient(){...}publicstaticTankClientgetTc(){ returntc;}网络管理游戏需要对局域网对战的支持,所以需要对网络数据进行管理,使游戏能有条不紊地运行,网络管理部分主要负责输入游戏数据后发往其它游戏客户端,以及接收其它客户端发来的游戏数据。需要发送的游戏数据有:坦克创建消息(TankCreateMsg)、坦克开火消息(TankFireMsg)等客户端游戏数据的收发由于每个游戏消息都有共同的特性,即发送、接受,故将其抽象出一个父类Msg,所有的消息类都继承自Msg类。毕业设计基于java坦克大战课程设计报告全文共17页,当前为第8页。publicabstractclassMsg{毕业设计基于java坦克大战课程设计报告全文共17页,当前为第8页。 publicstaticfinalTankClienttc=TankClient.getTc(); publicstaticfinalintTANK_CREATE_MSG=1; publicstaticfinalintTANK_CHANGEDIR_MSG=2; publicstaticfinalintTANK_CALIBRATION_MSG=3; publicstaticfinalintTANK_FIRE_MSG=4; publicstaticfinalintCHAT_WORD_MSG=5; publicstaticfinalintTANK_READY_MSG=6; publicstaticfinalintGAME_START_MSG=7; publicstaticfinalintGAME_OVER_MSG=8; publicstaticfinalintGAME_EXIT_MSG=9; publicstaticfinalintGAME_CHANGEMASTER_MSG=10; publicabstractvoidsend(); publicabstractvoidreceive(DataInputStreamdis);}在需要向每个游戏客户端发送游戏消息时只需实例化一个相应的对象,在调用send方法即可,接收时调用receive方法。服务器端游戏数据的收发服务器端的设计,只需将所有接收到的包转发给所有游戏客户端即可。接收:publicclassUDPThreadimplementsRunnable{ publicvoidrun(){ byte[]buf=newbyte[1024]; DatagramSocketds=null; try{ ds=newDatagramSocket(ServerMain.SERVER_UDP_PORT); }catch(SocketExceptione){ e.printStackTrace(); } while(true){ DatagramPacketdp=newDatagramPacket(buf,buf.length); try{ ds.receive(dp); ServerMain.sendToEveryone(ds,dp); }catch(IOExceptione){毕业设计基于java坦克大战课程设计报告全文共17页,当前为第9页。 e.printStackTrace();毕业设计基于java坦克大战课程设计报告全文共17页,当前为第9页。 } } }}转发: publicstaticvoidsendToEveryone(DatagramSocketds,DatagramPacketdp){ for(inti=0;i<ServerMain.clients.size();i++){ try{ Clientc=ServerMain.clients.get(i); StringIP=c.IP; intport=c.udpPort; dp.setSocketAddress(newInetSocketAddress(IP,port)); ds.send(dp); }catch(IOExceptione){ e.printStackTrace(); } }}封装的游戏元素将游戏元素(坦克、子弹、墙等)封装成一个一个的类,将大大地降低游戏设计、实现难度,且符合面向对象的设计方法。由于这些游戏元素都有一些相同的属性、方法,故将其抽象为父类GameElement。publicabstractclassGameElement{ /** *持有游戏主窗口的引用 */ publicstaticfinalTankClienttc=TankClient.getTc(); /** *元素的坐标 */ publicRectanglerect; /** *元素的类型(队伍) */ publicGameElementKindkind=GameElementKind.DEMON; 毕业设计基于java坦克大战课程设计报告全文共17页,当前为第10页。毕业设计基于java坦克大战课程设计报告全文共17页,当前为第10页。 *由游戏主窗口自动调用,将决定该元素的在游戏中的表现形式 */ publicabstractvoiddraw(Graphicsg); }程序中共有如下游戏元素:Blast:爆炸效果Bullet:子弹ChatWord:群聊的内容Tank:坦克Wall:墙毕业设计基于java坦克大战课程设计报告全文共17页,当前为第11页。

测试毕业设计基于java坦克大战课程设计报告全文共17页,当前为第11页。测试环境测试时硬件环境CPU:InterE5200显卡:NVIDIAGeForce7300GS内存:金士顿2G/DDR2-667测试时软件环境操作系统:WindowsXpJRE:1.6.0显示器:三星液晶19寸/分辨率:1440X900测试结果在以上软硬件环境中测试,已通过6人互联测试,游戏过程正常,满足软件的功能需求,结果正确无误。发现的BUG及不足由于没有添加操作说明,使玩家不知如何操作,大大地影响了游戏的可操作性。在测试环境测试时,出现画面抖动现象,严重地影响了游戏的进行,必须找到

温馨提示

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

评论

0/150

提交评论