文档介绍:苏州市职业大学
课程设计说明书
名称迷宫游戏
2011年 1月 10日至 2011年 1月 16日共一周
院系计算机工程系
班级 10软件技术(外包)1
姓名颜玲玲
系主任李金祥
教研室主任叶良
指导教师李爱军殷凡
目录
目录 1
一、 题目说明 2
2
二、总体设计 2
2
2
三、详细说明 3
系统实施 3
四、遇到的问题和解决方法 9
五、课程设计总结 10
六、参考文献 10
附录(源程序代码) 10
题目说明
迷宫是我们从小就开始有所接触的一种游戏,许多人都喜欢玩这个游戏。我们在C语言中可以用0、1数字组成的二维数组来表示。1代表迷宫的墙壁,0代表通过迷宫的通道,用右手搭墙法,把手放在右边的墙上开始前进,保持手不离开墙壁,身体随着通道拐弯或者旋转,最终就可以达到目的。迷宫是我们平时都很喜欢玩的一种游戏,在休闲的时候可以通过玩这种小游戏来适当的放松一下自己的心情。
二、总体设计
:
系统使用VC
:
进入迷宫
起步
右手搭墙,搜索邻域
判断是否走出迷宫,并记录动作
走出边界就退出
若回到原来的地方,则无法找到出口
图1 系统流程图
三、详细说明
;
;
,要随机确定站立的方位,方位按0~7等8个方位进行编码;
,要判断是否走出了迷宫,并记录下每个动作。走出边界就退出。如果回到了原来的地方并且方位也回到了行走之初的情形,则意味着将所有通道都走了一遍,无法找到出口。
系统实施
1. void main()
{
int mz[12][12]={
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,0,0,0,1},
{0,0,1,0,1,0,1,1,1,1,0,1},
{1,1,1,0,1,0,0,0,0,1,0,1},
{1,0,0,0,0,1,1,1,0,1,0,0},
{1,1,1,1,0,1,0,1,0,1,0,1},
{1,0,0,1,0,1,0,1,0,1,0,1},
{1,1,0,1,0,1,0,1,0,1,0,1},
{1,0,0,0,0,0,0,0,0,1,0,1},
{1,1,1,1,1,1,0,1,1,1,0,1},
{1,0,0,0,0,0,0,1,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1}
}
这是用二维数组来表示迷宫的布局;
2./*进入迷宫*/
rnd=rand();
if(rnd<0) rnd=0;
x0=rnd%m;
rnd=rand();
if(rnd<0) rnd=0;
y0=rnd%n;
这段程序是为了随机确定起始位置;
3./*确定以当前位置为中心到四周的最大距离*/
rmax=x0;
if(y0>x0) rmax=y0;
if(m-1-x0>rmax) rmax=m-1-x0;
if(n-1-y0>rmax) rmax=n-1-y0;
如果在进入通道时该位置不是通道,那么就以此点为中心并以半径逐一增大的方式向四周辐射扫描,直至进入通道或者找遍所有位置没有通道为止。这样做既保证了随机性,又避免了由直接位置可能永远也无法进入通道的情况出现;
struct _POSE
{
int i,j;/*身体位置*/
int dir;/*方向或者出口*/
struct _POSE *next;
}POSE;
这段函数表示的是一个姿势或者状态;
5./*找第一个通道*/
noexit=1;
if(mz[y0*m+x0]!=0)
{
for(r=1;r<=rmax;r++)
{
x=x0;
y=y0;
dir=0;
if(adjacent(mz,m,n,&x,&y,r,&dir,0)==1)
{
noexit=0;
x0=x;
y0=y;
break;
}
}
}
else
{
noexit=0;
}
if(noexit==1)
{
printf("No exit exists!\n");
return -1;
}
这段程序是为了找到第一个通道,从而确定是否可以进入通道;
6. /*右手搭墙*/
rnd=