




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常州工学院学士学位设计PAGEPAGE18目录一设计分析………………………31.设计目标……………32.主要内容……………3二设计说明……………………41.游戏逻辑……………42.技术分工……………43.设计方法……………5三成果展示……………………61.运行截图………………62.程序代码………………7四结束语………………………18五致谢……………18六参考文献……………………18
一设计分析一.设计目标:此项目是模仿PopCapGames公司开发的一款同名游戏《植物大战僵尸》而开发的,是一款益智策略类单机游戏,玩家通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。不同的敌人,不同的玩法,游戏的内容就是:玩家控制植物,抵御僵尸的进攻,保护主人的屋子。此游戏对玩家的要求也是大脑的智慧和小脑的反应,玩家可以从游戏中获得成就感和战略思维。特点:1、冒险模式。2、有不同的敌人和可使用道具,使游戏更具挑战性。3、无限次重玩,不会经历两次同样的事件。二.设计内容:通过玩家对不同植物的选择,例如向日葵可快速产生阳光,豌豆射手可攻击敌人等等,来操作游戏,后台通过调整时间和参数达到前端界面游戏的可玩性。功能类别子功能前端游戏界面主界面模式选择进入游戏确定关卡退出后台代码设计选择、放置植物阳光生产时间收集阳光产生僵尸攻击、杀死僵尸二设计说明1游戏逻辑(1)僵尸是攻击方,为了攻击,防御僵尸,人类通过栽种培植出的各种植物来抵御进攻型僵尸的攻击。植物需要相应的阳光值成长。(2)在作战地点,玩家需要通过种植各种攻击植物来消灭僵尸,也可以通过种防御植物来阻挡僵尸,还需要太阳花来产生种植需要的阳光。3僵尸作战单位(1)普通僵尸。速度(1帧),血限3,毁掉植物需要3s。4植物作战单位(1)太阳花。种植需阳光值50,作用:生产种植所需的阳光值,每隔10s生产50点阳光值,不具备攻击力。(2)碗豆射手。种植需阳光值100,作用:5s发射一颗炮弹,战斗值1。(3)寒冰射手。种植需阳光值175,作用:5s发射一颗炮弹,战斗值1.(4)土豆卫士。种植需阳光值50,作用:抵挡各种僵尸3s,主要用来防御,没有任何战斗力。等共5种可供选择种植的植物。关卡简介:所有的僵尸都会参与攻击,所有的植物也都会参与作战,每次只能选取5种植物参与作战。5碰撞逻辑说明僵尸会在屏幕的右边生成,然后缓慢向左边屏幕移动,如果在僵尸移动的线路上有攻击型植物,则发射炮弹。当种植的植物或炮弹与僵尸接触,即当他们的坐标相同的时候,即为接触,接触大小的区域就是图片的大小区域。当炮弹与僵尸碰撞之后,炮弹也就会立即消失,同时僵尸生命值的也随之减少一点。若炮弹未击中任何僵尸,越出屏幕后也将消失。2.技术分工本人在项目中负责后台代码实现,主要有阳光添加僵尸移动子弹移动生产阳光产生子弹3.设计方法通过玩家对不同植物的选择,例如向日葵可快速产生阳光,豌豆射手可攻击敌人等等,来操作游戏,后台通过调整时间和参数达到前端界面游戏的可玩性。功能类别子功能前端游戏界面主界面模式选择进入游戏确定关卡退出后台代码设计选择、放置植物阳光生产时间收集阳光产生僵尸攻击、杀死僵尸技术要求:前端:Javascript后台:Servlet 开发工具:MyEclipse因为类中已经写好了方法和属性,在后台代码设计中,只需要调用之前写好的类,对静止的图像进行多次重绘,就可以实现游戏的画面。
第三部分成果展示设计成果:产品设计类一:运行截图 二:程序代码:阳光添加代码:packageplantvsplant.tool;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjavax.swing.JLabel;importplantvsplant.Controller;publicclassSunAddextendsThread{ Controllercontroller; privateJLabelsun; privateinta; privateintb; publicstaticbooleanstop=false; publicSunAdd(intx,inty,Controllercontroller,JLabelsun){ this.controller=controller; this.a=x; this.b=y; this.sun=sun; } publicvoidrun(){ sun.addMouseListener(newMouseAdapter(){ publicvoidmouseClicked(MouseEvente){ sun.setVisible(false); controller.putSunValue(25); } }); while(true){ if(stop){ sun.setVisible(false); break; } try{ sleep(200); }catch(InterruptedExceptione){ e.printStackTrace(); } b+=3; if(a<200) a+=2; sun.setBounds(a,b,80,80); if(b>=650) { sun.setVisible(false); break; } } }}僵尸移动代码:packageplantvsplant.tool;importjavax.swing.JLabel;importplantvsplant.Controller;publicclassCorpseMoveThreadextendsThread{ privateintx; privateinty; privateJLabelcorpse; privatebooleanflag=true; privateintsecond=1500; privateControllercontroller; publicCorpseMoveThread(Controllercontroller,intx,inty){ this.x=x; this.y=y; this.controller=controller; controller.getWin().putCorpse(x,y,Integer.parseInt(controller.getGrid().getBoard()[x][y].substring(0,2))); corpse=controller.getWin().getCorpseMap().get(100*x+y); } publicvoidrun(){ while(flag){ intaa=controller.moveCorpse(x,y); corpse.setVisible(false); if(aa==-1){ flag=false; }else{ controller.getWin().putCorpse(x,aa,Integer.parseInt(controller.getGrid().getBoard()[x][aa].substring(0,2))); corpse=controller.getWin().getCorpseMap().get(100*x+aa); y=aa; } try{ sleep(second); }catch(Exceptione){ } } if(flag==false){ corpse.setVisible(false); } } publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; } publicbooleanisFlag(){ returnflag; } publicvoidsetFlag(booleanflag){ this.flag=flag; } publicintgetSecond(){ returnsecond; } publicvoidsetSecond(intsecond){ this.second=second; } publicControllergetController(){ returncontroller; } publicvoidsetController(Controllercontroller){ this.controller=controller; } publicJLabelgetCorpse(){ returncorpse; } publicvoidsetCorpse(JLabelcorpse){ this.corpse=corpse; } }子弹移动代码:packageplantvsplant.tool;importjavax.swing.JLabel;importplantvsplant.Controller;publicclassCorpseMoveThreadextendsThread{ privateintx; privateinty; privateJLabelcorpse; privatebooleanflag=true; privateintsecond=1500; privateControllercontroller; publicCorpseMoveThread(Controllercontroller,intx,inty){ this.x=x; this.y=y; this.controller=controller; controller.getWin().putCorpse(x,y,Integer.parseInt(controller.getGrid().getBoard()[x][y].substring(0,2))); corpse=controller.getWin().getCorpseMap().get(100*x+y); } publicvoidrun(){ while(flag){ intaa=controller.moveCorpse(x,y); corpse.setVisible(false); if(aa==-1){ flag=false; }else{ controller.getWin().putCorpse(x,aa,Integer.parseInt(controller.getGrid().getBoard()[x][aa].substring(0,2))); corpse=controller.getWin().getCorpseMap().get(100*x+aa); y=aa; } try{ sleep(second); }catch(Exceptione){ } } if(flag==false){ corpse.setVisible(false); } } publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; } publicbooleanisFlag(){ returnflag; } publicvoidsetFlag(booleanflag){ this.flag=flag; } publicintgetSecond(){ returnsecond; } publicvoidsetSecond(intsecond){ this.second=second; } publicControllergetController(){ returncontroller; } publicvoidsetController(Controllercontroller){ this.controller=controller; } publicJLabelgetCorpse(){ returncorpse; } publicvoidsetCorpse(JLabelcorpse){ this.corpse=corpse; } }太阳花生产阳光代码:packageplantvsplant.tool;importjavax.swing.JLabel;importplantvsplant.Controller;publicclassCorpseMoveThreadextendsThread{ privateintx; privateinty; privateJLabelcorpse; privatebooleanflag=true; privateintsecond=1500; privateControllercontroller; publicCorpseMoveThread(Controllercontroller,intx,inty){ this.x=x; this.y=y; this.controller=controller; controller.getWin().putCorpse(x,y,Integer.parseInt(controller.getGrid().getBoard()[x][y].substring(0,2))); corpse=controller.getWin().getCorpseMap().get(100*x+y); } publicvoidrun(){ while(flag){ intaa=controller.moveCorpse(x,y); corpse.setVisible(false); if(aa==-1){ flag=false; }else{ controller.getWin().putCorpse(x,aa,Integer.parseInt(controller.getGrid().getBoard()[x][aa].substring(0,2))); corpse=controller.getWin().getCorpseMap().get(100*x+aa); y=aa; } try{ sleep(second); }catch(Exceptione){ } } if(flag==false){ corpse.setVisible(false); } } publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; } publicbooleanisFlag(){ returnflag; } publicvoidsetFlag(booleanflag){ this.flag=flag; } publicintgetSecond(){ returnsecond; } publicvoidsetSecond(intsecond){ this.second=second; } publicControllergetController(){ returncontroller; } publicvoidsetController(Controllercontroller){ this.controller=controller; } publicJLabelgetCorpse(){ returncorpse; } publicvoidsetCorpse(JLabelcorpse){ this.corpse=corpse; } }子弹生产代码:packageplantvsplant.tool;importplantvsplant.Controller;publicclassProduceBulletextendsThread{ privatebooleanflag=true; privateintx; privateinty; privateControllercontroller; publicProduceBullet(intx,Controllercontroller,inty){ this.controller=controller; this.x=x; this.y=y; } publicvoidrun(){ while(flag){ duceBullet(x,y); controller.isStopProduceButtle(x,y); try{ sleep(1500); }catch(Exceptione){ e.printStackTrace(); } } } publicbooleanisFlag(){ returnflag; } publicvoidsetFlag(booleanflag){ this.flag=flag; }}
第四部分结束语在这一个月的毕业设计中,考验了我是否真的牢固掌握了全部所学的专业知识,通过本次毕业设计,我深深感觉到基础知识的不健全和不牢固,在本次毕业设计中表现出了这样或那样的不足和漏洞,说明了基本功的不扎实,所幸我得到了老师和同学们的热情帮助,使这些问题得到了解决,这将对我以后的工作和学习有极大的帮助。再者,本次毕业设计全面锻炼了我驾御知识的能力,使我对这三年来所学的理论知识进行了系统化、条理化、全面化的回顾和复习让我懂得了如何运用自己所学的知识,同时又学到了猎取其他知识的方法,这些都将作为课本知识的有益补充,为我们以后所要从事的工作打下坚实的基础。由于此次毕业设计的角度限制和知识的不够系统和不够完善,难免有错误和不足之处敬请老师批评指正以完善此次毕业设计。本次毕业设计已经结束,我不仅收获了知识而且也锻炼了品质,通过这次认真而又细致的毕业设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CNCA 017-2022基于动态地质模型与自主规划开采的综采工作面设计规范
- T/CIMA 0025-2021低压用电户表关系检查仪
- T/CIE 054-2018X射线脉冲星导航探测器地面试验系统校准规范
- T/CHES 100-2023水质高锰酸盐指数的测定自动氧化还原滴定法
- T/CGTA 06-2023小麦加工脱氧雪腐镰刀菌烯醇风险预警技术规范
- T/CECS 10281-2023建筑用基础隔振垫板
- T/CECS 10021-2019照明用LED驱动电源技术要求
- T/CCS 060-2023智能化煤矿运维组织架构管理规范
- T/CCMA 0103-2020沥青路面微波综合养护车
- T/CBMCA 023-2021铬渣陶瓷颜料
- GA/T 544-2021多道心理测试系统通用技术规范
- 腰椎间盘突出症的针刀治疗课件
- 《法理学》考试笔记与重点
- DB44!T+2419-2023全生晒柑普茶生产技术规程
- (52)-疱疹性咽峡炎小儿推拿探秘
- GMP体系文件(手册+程序)
- 柴油叉车日常点检表
- 物流成本管理-日日顺d2d物流成本分析
- 集电线路安装工程质量通病防治
- 大学生动漫创业计划书
- 压铸机维护与保养新
评论
0/150
提交评论