数据结构课程设计之迷宫游戏Word文档下载推荐.docx
《数据结构课程设计之迷宫游戏Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之迷宫游戏Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计之迷宫游戏Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/26/46d6ef40-9335-4cc1-bfda-b374d06472dd/46d6ef40-9335-4cc1-bfda-b374d06472dd1.gif)
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