版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、黑龙江科技学院计算机与信息工程学院数据结构课程设计说明书设计题目:贪吃蛇的循环队列实现 姓 名: 陈 诚 班 级: 计05-2班 学号: 28 指导教师: 顾 泽 元 _一、设计题目游戏:贪吃蛇的队列实现.二、问题描述现有一个大小为Map_Long * Map_Width的方格地图(每一方格尺寸为BoxSize * BoxSize),在地图中间处有一个长度为3*3方格的小蛇。一旦游戏开始后:地图上随机位置处生成一只大老鼠(占一个方格);小蛇自动朝着一个方向运动,并且用户可以通过按:上、下、左、右键改变小蛇的运动方向。当小蛇吃到大老鼠,即蛇运动到它的蛇头所在坐标等于老鼠所在坐标时,小蛇长度增加1
2、。如此往复,随着小蛇变成了大蛇,游戏难度也随之增加,但当小蛇吃到自己身体或者头部撞到障碍物时,将扣去小蛇的生命值,直到小蛇生命为0,游戏失败。若在游戏中,小蛇吃光所有的老鼠,则游戏胜利。三、概要设计1、游戏地图以及游戏主要数据表示:MAPMap_LongMap_Width-将屏幕的某一块矩形区域划分成Map_Long * Map_Width(40*20)个格,定义地图数组MAPMap_LongMap_Width,用以存放如同地面、蛇身、老鼠、障碍物的信息。ElemType-结构体类型,包含两个int变量,存放蛇一格身体的所在位置。CirQueue-结构体类型,循环队列。存放队列中,元素的地址以
3、及队列头尾位置。Snake-结构体类型,存放蛇的蛇头坐标、方向、生命值、蜕壳控制参数。Food结构体类型,存放小老鼠所在坐标、颜色等信息。2、方案设计: (1)实现封面、界面绘制。(2)实现读取地图的功能。(3)实现蛇的方向控制以及游戏的暂停、速度设置、退出等功能。(4)实现蛇的移动、长长。(5)实现蛇的越界折返(运动到地图边界后,蛇从另一侧移出)。(6)实现随机位置产生食物。(7)实现读取地图的功能。(8)实现撞到障碍物,扣除相应生命数值。(9)实现蛇生长到一定长度后,蛇蜕皮,皮变成障碍物体。3、相关数据结构采用描述: 数据结构:循环队列4、整体算法的描述:(1)设置地图大小为40*20方格
4、,画出地图。(2)在地图上设置一定的障碍物体,当蛇撞到则扣除相应的生命值。(3)每吃掉一只老鼠,地图上随即位置(不包括蛇身体位置和障碍物)生成一只老鼠。(4)当蛇向一个方向移动时,新的坐标作为蛇的蛇头坐标,画出蛇头,并将它入队,作为队尾元素。与此同时,将队列中的front所指位置的元素出队列,得到的这个元素为蛇的蛇尾坐标,清除这个坐标下的图象,这样就实现了蛇的移动。(5)若蛇吃到老鼠,身体应长长,那么只将新的蛇头坐标入队,而不把队列内的首元素出队列,即可实现。四、详细设计1界面绘制(包含在FaceUI.txt文件中) 绘制出游戏的封面,游戏的主界面:游戏的主界面包括HP生命槽,暂停扭,分数、进
5、度显示等。要绘制出界面,我采用调用C语言中所给图形函数。这些函数必须加“graphics.h ”,并且在程序中调用图形驱动文件“Egavga.bgi” 和图形字体文件“ SANS.CHR”。2游戏按键控制(包含在GameEng.txt文件中) 通过如下语句实现各按键后执行程序的跳转:switch(key) case UP3: if(MAPtmpE0.XtmpE0.Y!=2) S-DL=0;break; case LEFT3: if(MAPtmpE1.XtmpE1.Y!=2) S-DL=1;break; case RIGHT3: if(MAPtmpE2.XtmpE2.Y!=2) S-DL=2;b
6、reak; case DOWN3: if(MAPtmpE3.XtmpE3.Y!=2) S-DL=3;break; case UP1: if(MAPtmpE0.XtmpE0.Y!=2) S-DL=0;break; case LEFT1: if(MAPtmpE1.XtmpE1.Y!=2) S-DL=1;break; case RIGHT1: if(MAPtmpE2.XtmpE2.Y!=2) S-DL=2;break; case DOWN1: if(MAPtmpE3.XtmpE3.Y!=2) S-DL=3;break; case UP2: if(MAPtmpE0.XtmpE0.Y!=2) S-DL=
7、0;break; case LEFT2: if(MAPtmpE1.XtmpE1.Y!=2) S-DL=1;break; case RIGHT2: if(MAPtmpE2.XtmpE2.Y!=2) S-DL=2;break; case DOWN2: if(MAPtmpE3.XtmpE3.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; 说明 :
8、程序中调用了bioskey()和kbhit()这两个函数,返回一个按键值到变量key中。在Public.txt文件中,已经定义了这些键值常量,通过key中数据和这些常量的比较,实现按键后执行的不同程序。3撞障碍物、食物的位置判断(包含在GameEng.txt文件中)在定义地图元素的时,将MapXY位置数值设为0、1、2、3分别代表:食物、空白可走处、蛇身体、障碍物。通过调用如下函数:int Crash(ElemType next)if (MAPnext.Xnext.Y=2 | MAPnext.Xnext.Y=3) return TRUE; else return FALSE;若返回为TRUE时
9、,表示该位置有障碍物,发生相撞。4游戏的初始化(包含在GameEng.txt文件中) 主要将蛇的尾、身、头坐标依次入队 ;画出蛇的各部分;随机位置产生食物等。 5游戏中的工具条、控件的实现(包含在MyCtrl.txt文件中) 设计自定义控件的主要意图为:在主函数中,通过给出一定的属性,执行一个行为。为此(由于时间有限,仅完成一项),编写了ScrollBar工具条。6循环队列操作的实现(包含在GameEng.txt文件中) 包括最基本的 “队列初始化” 、“入队” 、“出队” 操作。 包括“队列求长” ,在游戏中,队列的长度即为贪吃蛇的长度。7画出流程图,将问题有抽象到具体 将图中各个部分的描述
10、用函数来实现,最后通过一个主调函数“GameMain()”将他们分别组装起来。流程图如下所示: 流程图说明:(1) 初始化:(2) 将蛇的尾、身、头三个坐标依次入队后,蛇的总长等于队列的长度,为3,如下图1。(3) 蛇的长长:将食物所在坐标入队列,并且蛇的尾巴不出队列,蛇将长长,如下图2所示。(4) 蛇的移动:将目标坐标(“下一步”位置坐标)入队,蛇尾出队列并且画蛇尾为空闲。(4) 蛇运动的越界处理:采用越界折反措施,若蛇运行即将超出游戏界面,则从界面的另一侧移出,具体代码为:case 0: next-Y = (S.HeadY-1+Map_Width) % Map_Width ;next-X=
11、S.HeadX;break; case 1: next-X = (S.HeadX-1+Map_Long) % Map_Long ;next-Y=S.HeadY;break; case 2: next-X = (S.HeadX+1) % Map_Long ;next-Y=S.HeadY;break; case 3: next-Y = (S.HeadY+1) % Map_Width;next-X=S.HeadX;break;五、系统运行说明与测试1.软件开发环境: WIN-TC 1.9.12.测试与运行需求说明: 本游戏在 WINDOWS 系统下测试通过,具有较强的跨平台性 请将文件“Egavga
12、.bgi” 、“SANS.CHR” 和游戏的exe程序放在同一文件夹目录下3.游戏截图如下:游戏封面:游戏主界面截图:六、总结分析一为什么要采用“循环队列”实现贪吃蛇:玩过贪吃蛇游戏的玩家都知道,当蛇在移动时,它的头先前进一步,然后清空它的尾巴。而要记录下每一部分(每一格)蛇身体坐标,最后用来判断每次在不断变化位置的蛇尾(队列头)坐标,是不容易实现的。而在使用了“循环队列” ,由于其“先进后出的特性” ,符合贪吃蛇移动的规律,这也启发了我自己实现贪吃蛇的灵感。二本游戏的开发周期:一周的时间,日思夜想,全身心投入。三.游戏的优缺点:1.优点: 和往常的贪吃蛇相比,我编写的贪吃蛇更具创新。游戏放弃了以往贪吃蛇一撞即死的规则,为蛇添加了HP,地图障碍,周期性蜕壳等功能,使得游戏能被初级玩家很容易上手的同时,也不失游戏乐趣和游戏难度,增加了游戏的可玩性。2.缺点:由于开发周期尚短,游戏美工方面比较粗糙。四代码编写总结:作者个人认为,本程序代码“结构清晰,一目了然”。我将一个问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学史上的人文里程碑:从经验医学到循证人文
- 野外作业安全指南
- 某齿轮厂叉车使用细则
- 某齿轮厂齿轮精度检测制度
- XX中学2025-2026学年春季学期校园艺术节活动策划方案
- 2026届山西省六校高一生物第二学期期末经典试题含解析
- 春运安全培训计划讲解
- 医学人文视角下的医疗费用合理控制
- 襄阳四中2026届高三下学期质量检测 生物试卷+答案
- XX中学2025-2026学年春季学期寒假托管服务质量评估工作方案
- 四川省“元三维大联考”2023级高三第二次诊断考试英语(即绵阳二诊B卷)含答案
- 2025-2026学年北京市西城区九年级(上)期末道德与法治试卷(含答案)
- 7.1《北方地区的自然特征与农业》教案-人教版地理八年级下册
- 村务监督委员会培训课件
- 2026年山东经贸职业学院单招综合素质考试备考题库附答案详解
- 2025云南富民县国有企业高级经营管理人员选聘2人笔试历年参考题库附带答案详解
- 房租地皮协议书
- 2025-2030中国专业短信行业市场发展趋势与前景展望战略研究报告
- 采购助理岗位考试题及解析
- 安徽2021-2025真题及答案
- TCEC电力5G轻量化模组通信连接技术要求-2024
评论
0/150
提交评论