#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//随机产生一个图
//设置全局变量
int n,m; //设置 大小
int t=100; //判断最短路径
char b[100][100];
int xmice=0,ymice=0; //老鼠的坐标
int xnext,ynext; //下一步的坐标
int flag3=0,flag4=0; //判断条件
void made_map(int n,int m,char a[100][100]) //随机产生迷宫
{
srand(time(NULL)); //真随机数
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
int t=rand()%3;
if(i==1&&j==1)
a[i][j]='H'; //图形内容
else if(i==n/2&&j==m/2)
a[i][j]='0';
else if(t==1)
a[i][j]='*';
else
a[i][j]=' ';
}
}
xmice=n/2;ymice=m/2; //老鼠位于中间
}
//显示地图
void dispmap(int n,int m,char a[100][100])
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++) //显示地图
{
printf("%c ",a[i][j]);
}
printf(" %d",i);
printf("\n");
}
for(j=1;j<=m;j++) //显示坐标
{
if(j<10)
printf("%d ",j);
else
printf("%d",j);
}
printf("\n");
}
//键盘控制下一步
void next_direction(char direction)
{
switch (direction) { //w s a d 控制下一步坐标
case 'w':{
xnext=xmice-1;
break;
}
case 's':{
xnext=xmice+1;
break;
}
case 'a':{
ynext=ymice-1;
break;
}
case 'd':{
ynext=ymice+1;
break;
}
default:
break;
}
}
//移动老鼠的位置
void movetopositon(char a[100][100])
{
if(a[xnext][ynext]==' ') //判断是否要移动
{
char temp=a[xmice][ymice];
a[xmice][ymice]=a[xnext][ynext];
a[xnext][ynext]=temp;
xmice=xnext;
ymice=ynext;
}
else if(a[xnext][ynext]=='H') //到达终点
{
char temp=a[xmice][ymice];
a[xmice][ymice]=' ';
a[xnext][ynext]=temp;
xmice=xnext;
ymice=ynext;
}
else //否则不移动
xnext=xmice;
ynext=ymice;
}
//求路径
void visit(int i,int j,char a[100][100]) //利用递归深度遍历
{
a[i][j]='0';
if(i==1&&j==1)
{
printf("可有路径:\n"); //输出路径
dispmap(n,m,a);
int q,p,sum=0; //求最短路径
for(q=1;q<=n;q++)
{
for(p=1;p<=m;p++)
{
if(a[q][p]=='0')
sum++;
}
}
printf("%d\n",sum);
if(sum<=t)
{
t=sum;
for(int c=1;c<=n;c++)
for(int d=1;d<=m;d++)
{
b[c][d]=a[c][d];
}
}
flag4++;
}
if(a[i][j+1]==' '||a[i][j+1]=='H')visit(i,j+1,a);
if(a[i+1][j]==' '||a[i+1][j]=='H')visit(i+1,j,a);
if(a[i][j-1]==' '||a[i][j-1]=='H')visit(i,j-1,a);
if(a[i-1][j]==' '||a[i-1][j]=='H')visit(i-1,j,a);
a[i][j]=' ';
}
int main()
{
//随机产生地图
printf("地图的大小:纵 横 ");
scanf("%d %d",&n,&m);
char a[100][100];
made_map(n,m,a);
//初始化地图
dispmap(n,m,a);
printf("1 移动 2:编辑 3:求路径、最短路径 4:退出\n");
int flag=0;
scanf("%d",&flag);
while(1)
{
switch(flag)
{
case 1:
{ //移动
char direction;
int times=0;
while(1)
{
direction=getchar();
if(direction=='w'||direction=='s'||direction=='a'||direction=='d')
times++;
system("cls");
next_direction(direction);
movetopositon(a);
dispmap(n,m,a);
printf("\n上下左右:w s a d\n");
printf("\n移动次数: %d\n",times);
if(xmice==1&&ymice==1)
{
printf("老鼠找到了粮仓!你赢了!!!\n");
break;
}
if(times>(n+m)/2)
{
printf("老鼠饿死了!!!\n");
break;
}
}
break;
}
case 2:
{
//编辑墙
printf("选择: 1 输入坐标改变墙或者街道: y x(只允许改变一次) 2 退出\n");
int flag2;
scanf("%d",&flag2);
while(1)
{
switch(flag2)
{
case 1:
{
printf("请输入需要更改的墙(或街道)坐标:");
flag3++;
int i,j;
scanf("%d %d",&i,&j);
printf("\n");
if(a[i][j]=='*') //墙变路、路变墙
a[i][j]=' ';
else if(a[i][j]==' ')
a[i][j]='*';
system("cls"); //重新显示
dispmap(n,m,a);
break;
}
case 2:
{
break;
}
}
if(flag2==2||flag3>=1)
break;
}
break;
}
case 3:
{
//求多条路径
printf("路线:\n");
visit(xmice,ymice,a);
if(flag4==0)
printf("老鼠找不到粮仓!\n");
//求最短路径
else
{
printf("最快找到粮仓的路线:\n");
dispmap(n,m,b);
}
break;
}
case 4:
{
printf("游戏愉快 Thanks ╮( ̄▽ ̄)╭\n");
return 0;
}
}
printf(" 返回菜单\n");
printf("1 移动小鼠 2 修改迷宫 3 路线图和最短路线 4 退出\n");
scanf("%d",&flag);
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
走迷宫游戏.zip (6个子文件)
走迷宫游戏
bin
Debug
走迷宫游戏.exe 37KB
走迷宫游戏.cbp 1KB
obj
Debug
main.o 10KB
走迷宫游戏.layout 361B
main.cpp 7KB
走迷宫游戏.depend 122B
共 6 条
- 1
匹夫而为百世师
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0