没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
目录
一.设计任务的详细描述...................................................................................................................2
二.系统所完成的功能描述................................................................................................................2
三.所采用的设计思想、方法及方案................................................................................................2
四.测试数据与测试结果....................................................................................................................6
五.课程设计总结与体会....................................................................................................................9
六.项目工程组成..............................................................................................................................10
七.源代码..........................................................................................................................................10
一.设计任务的详细描述
程序开始运行时显示一个迷宫地图,迷宫中有一只老鼠,迷宫的右下方有一个粮仓。游
戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。
要求:
(1)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;
(2)迷宫的墙足够结实,老鼠不能穿墙而过;
(3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;
(4)添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;
(5)找出走出迷宫的所有路径,以及最短路径。
提高部分:利用序列化功能实现迷宫地图文件的存盘和读出等功能
二.系统所完成的功能描述
将迷宫抽象为一个二维数组,左上角入口,右下角出口,在规定的时间内,从入口走
到出口就成功;0 表示路,1 表示墙,6 表示老鼠,且老鼠不能够穿过墙体,但在游戏过程
中我设置了外挂,当玩家找不到路时可以根据自己的想法来改变墙体和路径的方法来到达
出口。游戏可以自动寻找所有路径和最短路径,并且输出该条路径应该怎么去走(以坐标
的方法去表示)。
系统输出菜单,包括开始游戏,游戏说明(包括游戏操作和更改方法),读取记
录和上一次的游戏记录。
用户可在开始游戏后选择游戏难度(即定义迷宫大小从 1 到 15,边长为输入数
字的 2 倍),将小矩阵一一对应这迷宫中形成一个图,利用图的 DFS 算法思想随机
产生二维数组作为迷宫。
用 w、a、s、d 控制移动方向, w 代表向上移动一格, a 代表向左移动一格, s
代表乡下移动一格,d 代表向右移动一格,即进行数组数字的交换;开始游戏时计时
60 秒;游戏过程中输入‘ c’便提示选择一行或者一列来改变,可以是墙边长路,也可
以是路变成墙,由玩家用户选择控制改变情况;能够自动找出路径和最短的路径;
游戏中途退出能自动保存记录,记录保存在 record.txt 中,可读取记录,也是
在 record.txt 中读取。若在规定的时间内完成游戏,最后提示 victor;若超出了游
戏时间,系统会显示出游戏所用的总时间,并且提示游戏失败;
三.所采用的设计思想、方法及方案
将迷宫游戏的程序分为 5 个 cpp,分别实现创建迷宫,游戏操作,自动寻路,游戏实现和主
函数的功能,下面对 5 个 cpp 分别进行说明:
(一)CreatMaze.cpp 中包含的是创建迷宫的墙,路和显示迷宫的函数:
1.void CreatMaze(int (*mg)[N],int x)创建一个边长是 2*x+3 的迷宫,并设置好墙
和路。
2.void creatWay(int (*mg)[N],int x, int y)在迷宫中产生一条路,使用图的深度
遍历思想来实现,通过 x*x 上的每个点(i,j)对应上(2*x+3)* (2*x+3)上的(2*i,2*j),通过
随机的 DFS 对这些点进行遍历。具体算法如下:
void creatWay(int (*mg)[N],int x, int y)
2
{
static int dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};
int zx = x*2;
int zy = y*2;
int next, turn, i;
mg[zx][zy] = 0;
if(rand()%2)
turn = 1;
else
turn = 3;
for(i=0,next=rand()%4;i<4;i++,next=(next+turn)%4)
if(mg[zx+2*dir[next][0]][zy+2*dir[next][1]] == 1)
{
mg[zx+dir[next][0]][zy+dir[next][1]] = 0;
creatWay(mg,x+dir[next][0], y+dir[next][1]);
}
}
3. void show(int (*mg)[N],int x)输出当前迷宫的形状。即输出二维数组
(二)Search.cpp 中实现的是迷宫路径的查找,可查找全部路径和最短路径。函数注释与
实现:
#define MAXSIZE 200
#define N 52
const int move[4][2]={{-1,0},{0,1},{1,0},{0,-1}};//将要走的4个方向保存在二维
数组中
typedef struct //定义一个结构体,存放走过的路径和将要走下一步的方向
{
int i,j;//当前点的坐标
int di; //下个步要走的方向
}Stack;
Stack st[MAXSIZE],Path[MAXSIZE];
void PutOut_all(int(*mg)[N],int x)//寻找所有路径,输出所有路径和最短路径。
{
int top=-1,count=1,minlen=MAXSIZE;
int i,j,di,find,k;
mg[0][2]=1;
top++;//将起点进栈
st[top].i=1;
st[top].j=2;
st[top].di=-1;
mg[1][2]=-1;//走过的地方置为-1
3
while(top>-1) //寻找路径
{
i=st[top].i;
j=st[top].j;
di=st[top].di;
if(i==(2*x+1)&&j==2*x) //找到一条路径则输出
{
printf("-----------------------------------------------------\n");
printf("路径%d:",count++);
printf("(%d,%d)",st[0].i,st[0].j);
for(k=1;k<=top;k++)
{
printf("->(%d,%d)",st[k].i,st[k].j);
if((k+1)%5==0)
printf("\n");
}
printf("\n");
if(top+1<minlen) //比较路径的长度,将最短路径放入Path中
{
for(k=0;k<=top;k++)
Path[k]=st[k];
minlen=top+1;
}
mg[st[top].i][st[top].j]=0;
top--;
i=st[top].i;
j=st[top].j;
di=st[top].di; //退一个,寻找下一跳路径
}
find=0;
while(di<4&&find==0) //确定将要移动的方向及路程
{
di++;
i=st[top].i+move[di][0];
j=st[top].j+move[di][1];
if(mg[i][j]==0)
find=1;
}
if(find==1) //若有路可走则进栈
{
st[top].di=di;
top++;
st[top].i=i;
4
剩余19页未读,继续阅读
资源评论
longmaoVIP
- 粉丝: 1
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《基于51单片机和DS18B20的温度检测和报警系统,可设置报警温度上下限,输出温度采用数码管显示 》+源代码+设计资料
- ESP8266WIFI系统工作原理图.schdoc
- C语言《基于STM32的测量温度与压力的数据处理设计 》+源代码+设计资料
- ApkTool,安卓逆向工具
- prompt技术资料AI资料.zip
- 基于NeRF方法实现校园内真实拍摄场景的三维重建和web端实时渲染源码.zip
- HCIA-Data Center Facility V2.0.zip
- 物联网场景下的协同通信技术.pptx
- 大语言模型的微调和推理baichuan7B, chatglm2-6B, Qwen-7B-chat源码.zip
- 环境光谱特征数据库系统的建设.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功