软件设计毕业设计论文JAVA桌面游戏开发植物大战僵尸.docx
- 文档编号:27292603
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:20
- 大小:1.31MB
软件设计毕业设计论文JAVA桌面游戏开发植物大战僵尸.docx
《软件设计毕业设计论文JAVA桌面游戏开发植物大战僵尸.docx》由会员分享,可在线阅读,更多相关《软件设计毕业设计论文JAVA桌面游戏开发植物大战僵尸.docx(20页珍藏版)》请在冰豆网上搜索。
软件设计毕业设计论文JAVA桌面游戏开发植物大战僵尸
一设计分析………………………………………………………………………3
1.设计目标……………………………………………………………………………3
2.主要内容……………………………………………………………………………3
二设计说明……………………………………………………………………4
1.游戏逻辑……………………………………………………………………………4
2.技术分工……………………………………………………………………………4
3.设计方法……………………………………………………………………………5
三成果展示……………………………………………………………………6
1.运行截图………………………………………………………………6
2.程序代码………………………………………………………………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.技术分工
本人在项目中负责后台代码实现,主要有
1.阳光添加
2.僵尸移动
3.子弹移动
4.生产阳光
5.产生子弹
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){
controller.produceBullet(x,y);
controller.isStopProduceButtle(x,y);
try{
sleep(1500);
}catch(Exceptione){
e.printStackTrace();
}
}
}
publicbooleanisFlag(){
returnflag;
}
publicvoidsetFlag(booleanflag){
this.flag=flag;
}
}
第四部分结束语
在这一个月的毕业设计中,考验了我是否真的牢固掌握了全部所学的专业知识,通过本次毕业设计,我深深感觉到基础知识的不健全和不牢固,在本次毕业设计中表现出了这样或那样的不足和漏洞,说明了基本功的不扎实,所幸我得到了老师和同学们的热情帮助,使这些问题得到了解决,这将对我以后的工作和学习有极大的帮助。
再者,本次毕业设计全面锻炼了我驾御知识的能力,使我对这三年来所学的理论知识进行了系统化、条理化、全面化的回顾和复习让我懂得了如何运用自己所学的知识,同时又学到了猎取其他知识的方法,这些都将作为课本知识的有益补充,为我们以后所要从事的工作打下坚实的基础。
由于此次毕业设计的角度限制和知识的不够系统和不够完善,难免有错误和不足之处敬请老师批评指正以完善此次毕业设计。
本次毕业设计已经结束,我不仅收获了知识而且也锻炼了品质,通过这次认真而又细致的毕业设计,我对待事情的态度更加严谨更加有耐心,并且我更希望把所做的事情做好做完美,我想这将是一种很重要的财富。
五致谢
本设计在导师的悉心指导下完成的。
导师渊博的专业知识、严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严于律己、宽以待人的崇高风范,朴实无法、平易近人的人格魅力对本人影响深远。
不仅使本人树立了远大的学习目标、掌握了基本的研究方法,还使本人明白了许多为人处事的道理。
本次设计从选题到完成,每一步都是在导师的悉心指导下完成的,倾注了导师大量的心血。
在此,谨向导师表示崇高的敬意和衷心的感谢!
在写设计的过程中,遇到了很多的问题,在老师的耐心指导下,问题都得以解决。
所以在此,再次对老师道一声:
老师,谢谢您!
时光匆匆如流水,转眼便是大学毕业时节,春梦秋云,聚散真容易。
离校日期已日趋渐进,毕业设计的完成也随之进入了尾声。
从开始进入课题到设计的顺利完成,一直都离不开老师、同学、朋友给我热情的帮助,在这里请接受我诚挚的谢意!
在此我向信息系的所有老师表示衷心的感谢,谢谢你们三年的辛勤栽培,谢谢你们在教学的同时更多的是传授我们做人的道理,谢谢三年里面你们孜孜不倦的教诲!
三年寒窗,所收获的不仅仅是愈加丰厚的知识,更重要的是在阅读、实践中所培养的思维方式、表达能力和广阔视野。
很庆幸这三年来我遇到了如此多的良师益友,无论在学习上、生活上,还是工作上,都给予了我无私的帮助和热心的照顾,让我在一个充满温馨的环境中度过三年的大学生活。
感恩之情难以用言语量度,谨以最朴实的话语致以最崇高的敬意。
六参考文献
[1]Eric.Java编程思想[M].第4版.机械工业出版社,机械工业出版社.
[2] Weiss, MA. 数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 毕业设计 论文 JAVA 桌面 游戏 开发 植物 大战 僵尸