数据结构课程设计报告坦克大战游戏设计java版.docx
- 文档编号:884382
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:17
- 大小:219.59KB
数据结构课程设计报告坦克大战游戏设计java版.docx
《数据结构课程设计报告坦克大战游戏设计java版.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告坦克大战游戏设计java版.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告坦克大战游戏设计java版
《数据结构》课程设计报告
坦克大战游戏设计(java版)
组长:
组员:
指导老师:
所在学院:
电子与信息工程学院
班级:
软件工程1001班
1.需求分析2
1.1选题的意义及背景2
1.2本组课程设计的目标2
1.3人员组成3
2.设计方案3
2.1原始数据3
2.2输出数据3
2.3对数据的处理3
2.4程序流程图4
2.5封装的数据元素5
2.6游戏的主要组成5
3.详细设计5
3.1构建游戏主类5
3.2构建坦克类Tank6
3.3添加炮弹Missile类9
3.4实现坦克的互相攻击10
3.5创建Explode类15
3.6添加障碍物16
3.7添加血块类18
4设计结果与分析19
5设计体会22
坦克大战游戏的设计与实现
摘要:
通过此次课程设计,深刻认识了单链表和顺序表的逻辑结构和存储结构,熟练掌握了线性表的存储方式和一些基本操作,如单链表和线性表的建立、求表长操作、取元素操作、按值查找、插入和删除操作等。
通过综合运用课程知识来设计一个初具规模的游戏-坦克大战。
借此熟练了数据结构以及复杂条件语句在游戏中的作用、随机函数在中型游戏中的应用、游戏中状态的概念和切换方法、游戏中速度的实现方法、覆盖和碰撞问题的实现方法、使用API函数和Buffer实现复杂的游戏图像显示以及声音和输入的处理。
该游戏设计已经实现以下功能:
坦克能力说明、地图说明、奖励物品说明、游戏操作说明、游戏技术组成、“坦克大战”游戏的创意、控件参数和窗体属性的设置、游戏代码设计等说明。
关键词:
数据结构java游戏设计函数和变量
1.需求分析
1.1选题的意义及背景
运用数据结构知识,开发一个基于J2SE的游戏-坦克大战
1.2本组课程设计的目标
培养自己综合利用数据结构进行程序设计的能力,主要是培养自己的综合编程能力。
(1)基本实现游戏图形界面,让玩家能看到游戏给出的反馈,让玩家能感受到游戏的乐趣
(2)玩家能操纵特定的游戏元素
(3)不同队伍的坦克须显示不同的外观,以分辨敌我
(4)坦克能够开火攻击敌方,但不能攻击队友
(5)需要有不可被子弹穿透的墙,且墙有可摧毁和不可摧毁两种
(6)能够模拟爆炸,实现较美观的爆炸效果
(7)坦克有生命值,并非被击中一次就会爆炸
(8)游戏中随机出现血块,可以将主战坦克的血量加满
1.3人员组成
组长:
组内成员:
2.设计方案
2.1原始数据
(1)各种坦克的图片,各种墙的图片,基地图片,爆炸的图片,草地图片,河道的图片,药剂的图片。
(2)通过键盘操作,进行游戏。
2.2输出数据
玩家需要从游戏输出数据中获得游戏信息,如坦克往上行驶,坦克发射了子弹,坦克爆炸等,这些均需要通过游戏数据的输出来告知玩家
2.3对数据的处理
本次课程设计主要运用了数据结构中的数组和链表以及向量的存储,
2.4程序流程图
TankClient类
2.5封装的数据元素
窗口:
主窗口TankClient
游戏元素:
子弹Missile,坦克tank,墙壁brickWall,爆炸类explode,敌人坦克enemyTank,血量Blood,方向Direction,背景音乐sound.
2.6游戏的主要组成
(1)构建游戏主类
(2)构建坦克类Tank
(3)添加炮弹Missile类
(4)实现坦克的互相攻击
(5)创建Explode类
(6)添加障碍物
(7)添加血块类
3.详细设计
3.1构建游戏主类
在主类中构建一个主Frame框架,主要代码如下:
this.setLocation(200,100);
this.setSize(Game_wide,Game_height);
this.setTitle("坦克大战");
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
3.2构建坦克类Tank
构建主窗口中所需的Tank类,用单链表来存储产生的每一辆坦克并将坦克加到主窗体中,
template
structNode
{
Udata;
Node*next;//
};
template
LinkList
:
LinkList()
{
first=newNode
if(first==NULL)
{
cout<<"outofmemory"< exit(0); } first->next=NULL;//建立只有头结点的空链表 } template LinkList : LinkList(Ta[],intn) {//尾插法 first=newNode Node for(inti=0;i { Node s->data=a[i]; p->next=s; p=s;//插入到终端结点之后 } p->next=NULL;//单链表建立完毕,将终端结点的指针域置空 } Publicvoidpaint(Graphicsg){//调用paint方法画坦克 myTank.draw(g); } 让坦克朝八个方向运动起来,在主类TankClient中启用多线程机制,让系统不断的进行重画。 并在Tank类中建立处理按键的方法,实现坦克的手动移动;根据坦克类修改TankClient主类,在主类中注册事件监听器,并调用Tank类中的方法。 主类TankClient中使用双缓冲机制消除坦克的闪烁现象。 在Tank类当中添加的按键方法,代码如下: publicvoidkeyPressed(KeyEvente){ intkey=e.getKeyCode(); switch(key){ caseKeyEvent.VK_LEFT: bL=true; break; …… } locateDirection(); } publicvoidkeyReleased(KeyEvente){ intkey=e.getKeyCode(); switch(key){ caseKeyEvent.VK_LEFT: bL=false; break; …… } locateDirection(); } TankClient类中的多线程机制的主要代码如下: newThread(newPaintThread()).start(); …… privateclassPaintThreadimplementsRunnable{ publicvoidrun(){ while(true){ repaint(); try{ Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); } } } } 3.3添加炮弹Missile类 在Missile类当中添加x,y,dir等属性以及常量。 在Missile类当中添加构造方法,draw方法等必要方法。 根据不同的方向,子弹要进行不同的运动。 在TankClient当中new一颗子弹出来,要用到数据结构单链表的插入方法。 template boolLinkList : Insert(Tkey,intpos) { Node intj=0; while(p&&j { p=p->next; j++; } if(p==NULL) { cout<<"erro"< returnfalse; } Node s->data=key; s->next=p->next;//向内存申请一个结点s p->next=s;//将结点s插入到结点p之后 returntrue; } 3.4实现坦克的互相攻击 (1)让主战坦克出炮弹 1)在Tank类当中增加对ctrl键的处理,使每按下ctrl键的时候,坦克打出一发炮弹。 caseKeyEvent.VK_CTRL: fire(); break; 2)根据“坦克打出炮弹”这句话,确定Tank当中的fire方法,其返回值为Missile。 publicMissilefire(){ …… Missilem=newMissile(x,y,ptDir); returnm; } 3)为了解决坦克停下来也能开火的问题——给坦克加一炮筒,根据炮筒方向和位置设定子弹的方向和位置并new出来,然后返回,每次move之后根据Tank的新方向确定炮筒的方向。 if(this.dir! =Direction.STOP){ this.ptDir=this.dir; } 4)为了能够打出多发炮弹,使用容器填装多发炮弹,每当抬起Ctrl键的时候就往容器中加入新的炮弹 List 5)解决炮弹不消亡的问题,加入控制炮弹生死的量live,当炮弹已经死去就不需要对其重画,当炮弹飞出边界就死亡,当炮弹死亡就从容器中移去,移除用到了单链表的delete方法 template boolLinkList : Delete(intpos) { Node intj=0; while(p&&j { p=p->next; j++; } if(! p||! p->next)//结点p或结点p的后继结点不存在 { cout<<"error"< returnfalse; } else { Node Tx=q->data;//暂存被删结点 p->next=q->next;//摘链 deleteq; cout<<"被删结点元素是: "< returntrue; } } //通过边界条件判定是否移除 if(x<0||y<0||x>TankClient.GAME_WIDTH||y>TankClient.GAME_HEIGHT){ live=false; } publicvoiddraw(Graphicsg){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计报告 坦克大战游戏设计java版 数据结构 课程设计 报告 坦克 大战 游戏 设计 java