《数据结构》课程设计说明书
《数据结构》课程设计说明书
《数据结构》课程设计说明书
设计题目:贪吃蛇的循环队列实现
姓 名:
班 级: 计05-2班 学号: 28
指导教师: _
《数据结构》课程设计说明书
一、设计题目
游戏:《贪吃蛇》的队列实现.
二、问题描述
现有一个大小为Map_Long * Map_Width的方格地图(每一方格尺寸为BoxSize * BoxSize),在地图中间处有一个长度为3*3方格的小蛇。一旦游戏开始后:地图上随机位置处生成一只大老鼠(占一个方格);小蛇自动朝着一个方向运动,并且用户可以通过按:上、下、左、右键改变小蛇的运动方向。当小蛇吃到大老鼠,即蛇运动到它的蛇头所在坐标等于老鼠所在坐标时,小蛇长度增加1。如此往复,随着小蛇变成了大蛇,游戏难度也随之增加,但当小蛇吃到自己身体或者头部撞到障碍物时,将扣去小蛇的生命值,直到小蛇生命为0,游戏失败。若在游戏中,小蛇吃光所有的老鼠,则游戏胜利。
三、概要设计
1、游戏地图以及游戏主要数据表示:
MAP[Map_Long][Map_Width]-----将屏幕的某一块矩形区域划分成Map_Long * Map_Width(40*20)个格,定义地图数组MAP[Map_Long][Map_Width],用以存放如同地面、蛇身、老鼠、障碍物的信息。
ElemType---结构体类型,包含两个int变量,存放蛇一格身体的所在位置。
CirQueue---结构体类型,循环队列。存放队列中,元素的地址以及队列头尾位置。
《数据结构》课程设计说明书
Snake------结构体类型,存放蛇的蛇头坐标、方向、生命值、蜕壳控制参数。
Food————结构体类型,存放小老鼠所在坐标、颜色等信息。
2、方案设计:
(1)实现封面、界面绘制。
(2)实现读取地图的功能。
(3)实现蛇的方向控制以及游戏的暂停、速度设置、退出等功能。
(4)实现蛇的移动、长长。
(5)实现蛇的越界折返(运动到地图边界后,蛇从另一侧移出)。
(6)实现随机位置产生食物。
(7)实现读取地图的功能。
(8)实现撞到障碍物,扣除相应生命数值。
(9)实现蛇生长到一定长度后,蛇蜕皮,皮变成障碍物体。
3、相关数据结构采用描述:
数据结构:循环队列
4、整体算法的描述:
(1)设置地图大小为40*20方格,画出地图。
(2)在地图上设置一定的障碍物体,当蛇撞到则扣除相应的生命值。
(3)每吃掉一只老鼠,地图上随即位置(不包括蛇身体位置和障碍物)生成一只老鼠。
(4)当蛇向一个方向移动时,新的坐标作为蛇的蛇头坐标,画出蛇头,并将它入队,作为队尾元素。与此同时,将队列中的front所指位置的元素出队列,得到的这个元素为蛇的蛇尾坐标,清除这个坐标下的图象,这样就实现了蛇的移动。
(5)若蛇吃到老鼠,身体应长长,那么只将新的蛇头坐标入队,而不把队列内的首元素出队列,即可实现。
《数据结构》课程设计说明书
四、详细设计
1.界面绘制(包含在FaceUI.txt文件中)
绘制出游戏的封面,游戏的主界面:
游戏的主界面包括HP生命槽,暂停扭,分数、进度显示等。要绘制出界面,我采用调用C语言中所给图形函数。这些函数必须加“graphics.h ”,并且在程序中调用图形驱动文件“Egavga.bgi” 和图形字体文件“ SANS.CHR”。
2.游戏按键控制(包含在GameEng.txt文件中)
通过如下语句实现各按键后执行程序的跳转:
switch(key)
{case UP3: if(MAP[tmpE[0].X][tmpE[0].Y]!=2) S->DL=0;break;
case LEFT3: if(MAP[tmpE[1].X][tmpE[1].Y]!=2) S->DL=1;break;
case RIGHT3: if(MAP[tmpE[2].X][tmpE[2].Y]!=2) S->DL=2;break;
case DOWN3: if(MAP[tmpE[3].X][tmpE[3].Y]!=2) S->DL=3;break;
case UP1: if(MAP[tmpE[0].X][tmpE[0].Y]!=2) S->DL=0;break;
case LEFT1: if(MAP[tmpE[1].X][tmpE[1].Y]!=2) S->DL=1;break;
case RIGHT1: if(MAP[tmpE[2].X][tmpE[2].Y]!=2) S->DL=2;break;
case DOWN1: if(MAP[tmpE[3].X][tmpE[3].Y]!=2) S->DL=3;break;
case UP2: if(MAP[tmpE[0].X][tmpE[0].Y]!=2) S->DL=0;break;
case LEFT2: if(MAP[tmpE[1].X][tmpE[1].Y]!=2) S->DL=1;break;
case RIGHT2: if(MAP[tmpE[2].X][tmpE[2].Y]!=2) S->DL=2;break;
case DOWN2: if(MAP[tmpE[3].X][tmpE[3].Y]!=2) S->DL=3;break;
case PAUSE1: {GamePause();break;}
case PAUSE2: {GamePause();break;}
case ESC: if(ExitGame()) exit(0);break;
case SPACE: SetSpeed();break;}
说明 :程序中调用了bioskey()和kbhit()这两个函数,返回一个按键
值到变量key中。在Public.txt文件中,已经定义了这些键值
常量,通过key中数据和这些常量的比较,实现按键后执行的不
同程序。
《数据结构》课程设计说明书
3.撞障碍物、食物的位置判断(包含在GameEng.txt文件中)
在定义地图元素的时,将Map[X][Y]位置数值设为0、1、2、3分别代表:食物、空白可走处、蛇身体、障碍物。通过调用如下函数:
int Crash(ElemType next)
{if (MAP[next.X][next.Y]==2 || MAP[next.X][next.Y]==3) return TRUE;
else return FALSE;
}
若返回为TRUE时,表示该位置有障碍物,发生相撞。
4.游戏的初始化(包含在GameEng.txt文件中)
主要将蛇的尾、身、头坐标依次入队 ;画出蛇的各部分;随机位置产生食物等。
5.游戏中的工具条、控件的实现(包含在MyCtrl.txt文件中)
设计自定义控件的主要意图为:在主函数中,通过给出一定的属性,执行一个行为。为此(由于时间有限,仅完成一项),编写了ScrollBar工具条。
6.循环队列操作的实现(包含在GameEng.txt文件中)
包括最基本的 “队列初始化” 、“入队” 、“出队” 操作。 包括“队列求长” ,在游戏中,队列的长度即为贪吃蛇的长度。
7.画出流程图,将问题有抽象到具体
将图中各个部分的描述用函数来实现,最后通过一个主调函数“GameMain()”将他们分别组装起来。流程图如下所示:
《数据结构》课程设计说明书
流程图说明:
(1) 初始化:
《数据结构》课程设计说明书
(2) 将蛇的尾、身、头三个坐标依次入队后,蛇的总长等于队列的长度,
为3,如下图1。
(3) 蛇的长长:
将食物所在坐标入队列,并且蛇的尾巴不出队列,蛇将长长,如下图2所示。
(4) 蛇的移动:
将目标坐标(“下一步”位置坐标)入队,蛇尾出队列并且画蛇尾为空闲。
(4) 蛇运动的越界处理:
采用越界折反措施,若蛇运行即将超出游戏界面,则从界面的另一侧移出,具体代码为:
case 0: {next->Y = (S.HeadY-1+Map_Width) % Map_Width ;next->X=S.HeadX;break;} case 1: {next->X = (S.HeadX-1+Map_Long) % Map_Long ;next->Y=S.HeadY;break;} …… 此处隐藏:2584字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




