数据结构课程设计之迷宫游戏Word文档下载推荐.docx

上传人:b****2 文档编号:15003226 上传时间:2022-10-26 格式:DOCX 页数:26 大小:88.30KB
下载 相关 举报
数据结构课程设计之迷宫游戏Word文档下载推荐.docx_第1页
第1页 / 共26页
数据结构课程设计之迷宫游戏Word文档下载推荐.docx_第2页
第2页 / 共26页
数据结构课程设计之迷宫游戏Word文档下载推荐.docx_第3页
第3页 / 共26页
数据结构课程设计之迷宫游戏Word文档下载推荐.docx_第4页
第4页 / 共26页
数据结构课程设计之迷宫游戏Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数据结构课程设计之迷宫游戏Word文档下载推荐.docx

《数据结构课程设计之迷宫游戏Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之迷宫游戏Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

数据结构课程设计之迷宫游戏Word文档下载推荐.docx

w(上),s(下),a(左),d(右)控制迷宫的走向

y表示确定n表示否定

二、概要设计

1.设计思路:

实现走迷宫

game()

对迷宫地图进行修改实现自动搜路change()Mathpath()

对搜寻的路径进行输对修改的地图数组进行保存出edit()print()

对修改的地图进行保存

savemap()

2.数据结构设计:

采用的是栈来存储数据,进栈实际是在栈中插入三元组,出栈则只数组的个数进行操作

抽象数据类型线性表的定义如下:

ADTSqStack{

数据对象:

D={a|a?

SElemType,i=1,2,3……,n,n?

0}ii

数据关系:

R1={<

a,a>

|a,a?

D,i=1,2,3,……,n}i-1ii-1i

基本操作:

SqStack*InitStack()

操作结果:

创建一个空栈

voidPush(SqStack*S,SElemTypedata)

初始条件:

栈S已存在

插入一个元素,并且使数据个数加一(top++)

voidPop(SqStack*S)

栈S已存在。

栈中元素个数减一(top--)

}

2.软件结构设计:

game()模块

函数原型:

voidgame(intmap1[h][w])//游戏函数

{

#definekilltime15

clock_tstart,finish;

doubleduration;

intx=1,y=1,m=0,n=0,M,N,MAP[100][100];

//x->

colomy->

row

charcCtrl='

\0'

;

cout<

<

"

游戏规则:

endl<

w向上,s向下,a向左,d向右,q退出

按任意键开始,方向键开始计时"

endl;

for(M=0;

M<

=h-1;

M++)for(N=0;

N<

=w-1;

N++)MAP[M][N]=map1[M][N];

start=clock();

//开始计时

while((cCtrl=getch())!

='

q'

switch(cCtrl)

case'

w'

:

//向上

{cout<

'

\a'

//响铃

if(y>

0&

&

!

MAP[y-1][x])

y--;

}break;

s'

//下

if(!

MAP[y+1][x])

y++;

a'

//左

if(x>

MAP[y][x-1])

x--;

d'

//右

MAP[y][x+1])

x++;

system("

cls"

);

//刷屏

for(m=0;

m<

h;

m++)

for(n=0;

n<

w;

n++)

if(m==y&

n==x)

color6"

◎"

//现实老鼠所在位置

else

if(MAP[m][n])

?

//打印墙壁

if(m==9&

n==8)

//显示粮仓

//显示可行路径

if(x==8&

y==9)

finish=clock();

//停止计时

duration=(double)(finish-start)/CLOCKS_PER_SEC;

//computethetime

你耗费的时间是:

duration<

秒"

if(duration>

killtime)//lose

你输了,完蛋了,小老鼠要饿死了囧rz!

else//win

?

(^o^)?

小老鼠总算找到粮仓了,谢谢啊~"

这是你赢得的金币◎,小老鼠奉上:

"

for(inti=0;

i<

20-duration;

i++)

exit(0);

Mazepath()模块:

voidMazePath(intmaze[][w],intx,inty)//找到全部路径的函数

inti;

SElemTypedata;

if(x==h-2&

y==w-2)//到达出口

print(S);

return;

for(i=0;

4;

i++)//进行四个方向的判断

data.seat.r=x;

data.seat.c=y;

data.d=i;

maze[x][y]=-1;

x=x+move[i].r;

//对下一个方向处理

y=y+move[i].c;

if(maze[x][y]==0)//如果下一方向可通,把此元素入栈

Push(S,data);

MazePath(maze,x,y);

//求下一元素为开始的路径

Pop(S);

x=x-move[i].r;

//若下一方向不通,回到此坐标

y=y-move[i].c;

maze[x][y]=0;

三、详细设计

1.定义程序中所有用到的数据及其数据结构,及其基本操作的实现

typedefstruct

intr,c;

}PosType;

//坐标r表示行,c表示列

PosTypeseat;

intd;

}SElemType;

//seat表示当前坐标,d表示当前要转的方向序号

SElemTypedata[1000];

inttop;

}SqStack;

//栈元素类型,含有一个三元组,top表示该数组的元素个数

SqStack*S;

PosTypemove[4]={{0,1},{1,0},{0,-1},{-1,0}};

//move表示移动,分别是右、下、左、

intcount=1;

//用来统计路径条数

2(主函数和其他函数的伪码算法

voidMazePath(intmaze[][w],intx,inty)//找到全部路径的函数{

//定义三元组类型变量

打印路径;

把x,y赋给data

//方向记录

对下一个方向进行探索;

if(maze[x][y]==0)//如果下一方向可通

把此元素入栈

若下一方向不通,返回到此坐标;

voidprint(SqStack*s)//显示一条路径

//freopen("

THEMAP.txt"

"

a"

stdout);

intmap[h][w]={//给出迷宫的矩阵}

=s->

top;

输出每一个坐标位置和探索的方向

map[s->

data[i].seat.r][s->

data[i].seat.c]=2;

//把坐标位置重新标记

count++;

//路径记录加一

输出字符模式的地图;

初始化地图(赋值);

{

){

//向上{if(y>

MAP[y-1][x])y--;

//下{if(!

MAP[y+1][x])y++;

//左{if(x>

MAP[y][x-1])x--;

//右{if(!

MAP[y][x+1])x++;

打印出老鼠,墙壁,粮仓;

{finish=clock();

胜利和失败的处理;

}

voidsavemap(intmap[h][w])//保存地图

以追加的方式打开一个文件;

将地图以字符形式写入文件;

将地图以数组形式写入文件;

voidchange(intmap[h][w])//墙变路,路变墙

先以字符形式显示地图;

输入你想改变的坐标;

路变墙,墙变路;

显示改变后的地图

选择保存与否;

继续游戏;

voidedit(intgame[]){

inta[100000];

FILE*fp;

fp=fopen("

ok.txt"

r"

//打开地图数组文件intt=0;

while(fscanf(fp

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

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1