数据结构课程设计说明书贪吃蛇的循环队列实现Word文档下载推荐.docx
- 文档编号:21660239
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:7
- 大小:53.63KB
数据结构课程设计说明书贪吃蛇的循环队列实现Word文档下载推荐.docx
《数据结构课程设计说明书贪吃蛇的循环队列实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计说明书贪吃蛇的循环队列实现Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
现有一个大小为Map_Long*Map_Width的方格地图(每一方格尺寸为BoxSize*BoxSize),在地图中间处有一个长度为3*3方格的小蛇。
一旦游戏开始后:
地图上随机位置处生成一只大老鼠(占一个方格);
小蛇自动朝着一个方向运动,而且用户能够通过按:
上、下、左、右键改变小蛇的运动方向。
当小蛇吃到大老鼠,即蛇运动到它的蛇头所在座标等于老鼠所在座标时,小蛇长度增加1。
如此往复,随着小蛇变成了大蛇,游戏难度也随之增加,但当小蛇吃到自己躯体或头部撞到障碍物时,将扣去小蛇的生命值,直到小蛇生命为0,游戏失败。
假设在游戏中,小蛇吃光所有的老鼠,那么游戏成功。
三、概要设计
一、游戏地图和游戏要紧数据表示:
MAP[Map_Long][Map_Width]-----将屏幕的某一块矩形区域划分成Map_Long*Map_Width(40*20)个格,概念地图数组MAP[Map_Long][Map_Width],用以寄存犹如地面、蛇身、老鼠、障碍物的信息。
ElemType---结构体类型,包括两个int变量,寄存蛇一格躯体的所在位置。
CirQueue---结构体类型,循环队列。
寄存队列中,元素的地址和队列头尾位置。
Snake------结构体类型,寄存蛇的蛇头坐标、方向、生命值、蜕壳操纵参数。
Food————结构体类型,寄存小老鼠所在座标、颜色等信息。
二、方案设计:
(1)实现封面、界面绘制。
(2)实现读取地图的功能。
(3)实现蛇的方向操纵和游戏的暂停、速度设置、退出等功能。
(4)实现蛇的移动、长长。
(5)实现蛇的越界折返(运动到地图边界后,蛇从另一侧移出)。
(6)实现随机位置产生食物。
(7)实现读取地图的功能。
(8)实现撞到障碍物,扣除相应生命数值。
(9)实现蛇生长到必然长度后,蛇蜕皮,皮变成障碍物体。
3、相关数据结构采纳描述:
数据结构:
循环队列
4、整体算法的描述:
(1)设置地图大小为40*20方格,画出地图。
(2)在地图上设置必然的障碍物体,当蛇撞到那么扣除相应的生命值。
(3)每吃掉一只老鼠,地图上随即位置(不包括蛇躯体位置和障碍物)生成一只老鼠。
(4)当蛇向一个方向移动时,新的坐标作为蛇的蛇头坐标,画出蛇头,并将它入队,作为队尾元素。
与此同时,将队列中的front所指位置的元素出队列,取得的那个元素为蛇的蛇尾坐标,清除那个坐标下的图象,如此就实现了蛇的移动。
(5)假设蛇吃到老鼠,躯体应长长,那么只将新的蛇头坐标入队,而不把队列内的首元素出队列,即可实现。
四、详细设计
1.界面绘制(包括在文件中)
绘制出游戏的封面,游戏的主界面:
游戏的主界面包括HP生命槽,暂停扭,分数、进度显示等。
要绘制出界面,我采纳挪用C语言中所给图形函数。
这些函数必需加“”,而且在程序中挪用图形驱动文件“”和图形字体文件“”。
2.游戏按键操纵(包括在文件中)
通过如下语句实现各按键后执行程序的跳转:
switch(key)
{caseUP3:
if(MAP[tmpE[0].X][tmpE[0].Y]!
=2)S->
DL=0;
break;
caseLEFT3:
if(MAP[tmpE[1].X][tmpE[1].Y]!
DL=1;
caseRIGHT3:
if(MAP[tmpE[2].X][tmpE[2].Y]!
DL=2;
caseDOWN3:
if(MAP[tmpE[3].X][tmpE[3].Y]!
DL=3;
caseUP1:
if(MAP[tmpE[0].X][tmpE[0].Y]!
caseLEFT1:
caseRIGHT1:
caseDOWN1:
caseUP2:
caseLEFT2:
caseRIGHT2:
caseDOWN2:
casePAUSE1:
{GamePause();
}
casePAUSE2:
caseESC:
if(ExitGame())exit(0);
caseSPACE:
SetSpeed();
}
说明:
程序中挪用了bioskey()和kbhit()这两个函数,返回一个按键值到变量key中。
在文件中,已经概念了这些键值常量,通过key中数据和这些常量的比较,实现按键后执行的不同程序。
3.撞障碍物、食物的位置判定(包括在文件中)
在概念地图元素的时,将Map[X][Y]位置数值设为0、1、2、3别离代表:
食物、空白可走处、蛇躯体、障碍物。
通过挪用如下函数:
intCrash(ElemTypenext)
{if(MAP[][]==2||MAP[][]==3)returnTRUE;
elsereturnFALSE;
假设返回为TRUE时,表示该位置有障碍物,发生相撞。
4.游戏的初始化(包括在文件中)
要紧将蛇的尾、身、头坐标依次入队;
画出蛇的各部份;
随机位置产生食物等。
5.游戏中的工具条、控件的实现(包括在文件中)
设计自概念控件的要紧用意为:
在主函数中,通过给出必然的属性,执行一个行为。
为此(由于时刻有限,仅完成一项),编写了ScrollBar工具条。
6.循环队列操作的实现(包括在文件中)
包括最大体的“队列初始化”、“入队”、“出队”操作。
包括“队列求长”,在游戏中,队列的长度即为贪吃蛇的长度。
7.画出流程图,将问题有抽象到具体
将图中各个部份的描述用函数来实现,最后通过一个主调函数“GameMain()”将他们别离组装起来。
流程图如下所示:
流程图说明:
(1)初始化:
(2)
(3)
将蛇的尾、身、头三个坐标依次入队后,蛇的总长等于队列的长度,为3,如以下图1。
(4)蛇的长长:
(5)将食物所在坐标入队列,并且蛇的尾巴不出队列,蛇将长长,如下图2所示。
(6)蛇的移动:
(7)将目标坐标(“下一步”位置坐标)入队,蛇尾出队列而且画蛇尾为空闲。
(4)蛇运动的越界处置:
采纳越界折反方法,假设蛇运行即将超出游戏界面,那么从界面的另一侧移出,具体代码为:
case0:
{next->
Y=+Map_Width)%Map_Width;
next->
X=;
case1:
X=+Map_Long)%Map_Long;
Y=;
case2:
X=+1)%Map_Long;
case3:
Y=+1)%Map_Width;
五、系统运行说明与测试
1.软件开发环境:
WIN-TC1.9.1
2.测试与运行需求说明:
本游戏在WINDOWS系统下测试通过,具有较强的跨平台性
请将文件“”、“”和游戏的exe程序放在同一文件夹目录下
3.游戏截图如下:
游戏封面:
游戏主界面截图:
六、总结分析
一.什么缘故要采纳“循环队列”实现《贪吃蛇》:
玩过《贪吃蛇》游戏的玩家都明白,当蛇在移动时,它的头先前进一步,然后清空它的尾巴。
而要记录下每一部份(每一格)蛇躯体坐标,最后用来判定每次在不断转变位置的蛇尾(队列头)坐标,是不容易实现的。
而在利用了“循环队列”,由于其“先进后出的特性”,符合贪吃蛇移动的规律,这也启发了我自己实现《贪吃蛇》的灵感。
二.本游戏的开发周期:
一周的时刻,日思夜想,全身心投入。
三.游戏的优缺点:
1.优势:
和往常的《贪吃蛇》相较,我编写的《贪吃蛇》更具创新。
游戏舍弃了以往《贪吃蛇》一撞即死的规那么,为蛇添加了HP,地图障碍,周期性蜕壳等功能,使得游戏能被低级玩家很容易上手的同时,也不失游戏乐趣和游戏难度,增加了游戏的可玩性。
2.缺点:
由于开发周期尚短,游戏美工方面比较粗糙。
四.代码编写总结:
作者个人以为,本程序代码“结构清楚,一目了然”。
我将一个问题分成假设干块,逐个解决,在每一个函数编写完后进行严格的测试,最后将其拼撞起来,符合现今软件设计“自顶向下”的规那么。
五.市场需求分析:
适合小型的MP4,电话,电子词典等嵌入式设备。
(本程序诣在更好地锻炼自己的算法与编程序能力)
课程设计任务书
《数据结构》课程设计任务书
贪吃蛇的循环队列实现
任务下达时间:
2006年12月24日
任务完成时间:
2007年1月5日
综合评语
成绩
指导教师签字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 说明书 贪吃 循环 队列 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)