《数据结构》课程设计说明书.docx

上传人:b****1 文档编号:10251003 上传时间:2023-05-24 格式:DOCX 页数:9 大小:51.94KB
下载 相关 举报
《数据结构》课程设计说明书.docx_第1页
第1页 / 共9页
《数据结构》课程设计说明书.docx_第2页
第2页 / 共9页
《数据结构》课程设计说明书.docx_第3页
第3页 / 共9页
《数据结构》课程设计说明书.docx_第4页
第4页 / 共9页
《数据结构》课程设计说明书.docx_第5页
第5页 / 共9页
《数据结构》课程设计说明书.docx_第6页
第6页 / 共9页
《数据结构》课程设计说明书.docx_第7页
第7页 / 共9页
《数据结构》课程设计说明书.docx_第8页
第8页 / 共9页
《数据结构》课程设计说明书.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

《数据结构》课程设计说明书.docx

《《数据结构》课程设计说明书.docx》由会员分享,可在线阅读,更多相关《《数据结构》课程设计说明书.docx(9页珍藏版)》请在冰点文库上搜索。

《数据结构》课程设计说明书.docx

《数据结构》课程设计说明书

黑龙江科技学院

计算机与信息工程学院

《数据结构》课程设计说明书

 

设计题目:

贪吃蛇的循环队列实现

姓名:

陈诚

班级:

计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)

{caseUP3:

if(MAP[tmpE[0].X][tmpE[0].Y]!

=2)S->DL=0;break;

caseLEFT3:

if(MAP[tmpE[1].X][tmpE[1].Y]!

=2)S->DL=1;break;

caseRIGHT3:

if(MAP[tmpE[2].X][tmpE[2].Y]!

=2)S->DL=2;break;

caseDOWN3:

if(MAP[tmpE[3].X][tmpE[3].Y]!

=2)S->DL=3;break;

caseUP1:

if(MAP[tmpE[0].X][tmpE[0].Y]!

=2)S->DL=0;break;

caseLEFT1:

if(MAP[tmpE[1].X][tmpE[1].Y]!

=2)S->DL=1;break;

caseRIGHT1:

if(MAP[tmpE[2].X][tmpE[2].Y]!

=2)S->DL=2;break;

caseDOWN1:

if(MAP[tmpE[3].X][tmpE[3].Y]!

=2)S->DL=3;break;

caseUP2:

if(MAP[tmpE[0].X][tmpE[0].Y]!

=2)S->DL=0;break;

caseLEFT2:

if(MAP[tmpE[1].X][tmpE[1].Y]!

=2)S->DL=1;break;

caseRIGHT2:

if(MAP[tmpE[2].X][tmpE[2].Y]!

=2)S->DL=2;break;

caseDOWN2:

if(MAP[tmpE[3].X][tmpE[3].Y]!

=2)S->DL=3;break;

casePAUSE1:

{GamePause();break;}

casePAUSE2:

{GamePause();break;}

caseESC:

if(ExitGame())exit(0);break;

caseSPACE:

SetSpeed();break;}

说明:

程序中调用了bioskey()和kbhit()这两个函数,返回一个按键值到变量key中。

在Public.txt文件中,已经定义了这些键值常量,通过key中数据和这些常量的比较,实现按键后执行的不同程序。

3.撞障碍物、食物的位置判断(包含在GameEng.txt文件中)

在定义地图元素的时,将Map[X][Y]位置数值设为0、1、2、3分别代表:

食物、空白可走处、蛇身体、障碍物。

通过调用如下函数:

intCrash(ElemTypenext)

{if(MAP[next.X][next.Y]==2||MAP[next.X][next.Y]==3)returnTRUE;

elsereturnFALSE;

}

若返回为TRUE时,表示该位置有障碍物,发生相撞。

4.游戏的初始化(包含在GameEng.txt文件中)

主要将蛇的尾、身、头坐标依次入队;画出蛇的各部分;随机位置产生食物等。

5.游戏中的工具条、控件的实现(包含在MyCtrl.txt文件中)

设计自定义控件的主要意图为:

在主函数中,通过给出一定的属性,执行一个行为。

为此(由于时间有限,仅完成一项),编写了ScrollBar工具条。

6.循环队列操作的实现(包含在GameEng.txt文件中)

包括最基本的“队列初始化”、“入队”、“出队”操作。

包括“队列求长”,在游戏中,队列的长度即为贪吃蛇的长度。

7.画出流程图,将问题有抽象到具体

将图中各个部分的描述用函数来实现,最后通过一个主调函数“GameMain()”将他们分别组装起来。

流程图如下所示:

 

流程图说明:

(1)初始化:

(2)将蛇的尾、身、头三个坐标依次入队后,蛇的总长等于队列的长度,为3,如下图1。

 

(3)蛇的长长:

将食物所在坐标入队列,并且蛇的尾巴不出队列,蛇将长长,如下图2所示。

(4)蛇的移动:

将目标坐标(“下一步”位置坐标)入队,蛇尾出队列并且画蛇尾为空闲。

(4)蛇运动的越界处理:

采用越界折反措施,若蛇运行即将超出游戏界面,则从界面的另一侧移出,具体代码为:

case0:

{next->Y=(S.HeadY-1+Map_Width)%Map_Width;next->X=S.HeadX;break;}

case1:

{next->X=(S.HeadX-1+Map_Long)%Map_Long;next->Y=S.HeadY;break;}

case2:

{next->X=(S.HeadX+1)%Map_Long;next->Y=S.HeadY;break;}

case3:

{next->Y=(S.HeadY+1)%Map_Width;next->X=S.HeadX;break;}

五、系统运行说明与测试

1.软件开发环境:

WIN-TC1.9.1

2.测试与运行需求说明:

本游戏在WINDOWS系统下测试通过,具有较强的跨平台性

请将文件“Egavga.bgi”、“SANS.CHR”和游戏的exe程序放在同一文件夹目录下

3.游戏截图如下:

游戏封面:

 

游戏主界面截图:

 

六、总结分析

一.为什么要采用“循环队列”实现《贪吃蛇》:

玩过《贪吃蛇》游戏的玩家都知道,当蛇在移动时,它的头先前进一步,然后清空它的尾巴。

而要记录下每一部分(每一格)蛇身体坐标,最后用来判断每次在不断变化位置的蛇尾(队列头)坐标,是不容易实现的。

而在使用了“循环队列”,由于其“先进后出的特性”,符合贪吃蛇移动的规律,这也启发了我自己实现《贪吃蛇》的灵感。

二.本游戏的开发周期:

一周的时间,日思夜想,全身心投入。

三.游戏的优缺点:

1.优点:

和往常的《贪吃蛇》相比,我编写的《贪吃蛇》更具创新。

游戏放弃了以往《贪吃蛇》一撞即死的规则,为蛇添加了HP,地图障碍,周期性蜕壳等功能,使得游戏能被初级玩家很容易上手的同时,也不失游戏乐趣和游戏难度,增加了游戏的可玩性。

2.缺点:

由于开发周期尚短,游戏美工方面比较粗糙。

四.代码编写总结:

作者个人认为,本程序代码“结构清晰,一目了然”。

我将一个问题分成若干块,逐个解决,在每个函数编写完后进行严格的测试,最后将其拼撞起来,符合当今软件设计“自顶向下”的规则。

五.市场需求分析:

适合小型的MP4,手机,电子词典等嵌入式设备。

(本程序诣在更好地锻炼自己的算法与编程序能力)

 

课程设计任务书

《数据结构》课程设计任务书

设计题目:

贪吃蛇的循环队列实现

任务下达时间:

2006年12月24日

任务完成时间:

2007年1月5日

综合评语

 

成绩

指导教师签字

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2