这个是我第一个写的稍微复杂点的程序,老鼠走出迷宫,老师在课上对于各个流程分解开来:
走迷宫:
数据分析:
迷宫:char[10][10];
有墙‘#’
有老鼠‘@’
出口‘ ’
路‘ ’
老鼠的坐标:char m_x,m_y;
出口的坐标:char out_x,out_y;
业务流程:
显示迷宫:先清理屏幕,再显示迷宫。
#include<stdio.h>
#include<stdlib.h>
#include<getch.h>
#include<stdbool.h>
int main()
{
char a[10][10]={{'#','#','#','#','#','#','#','#','#','#'},
{'#','@','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
{'#','#','#','#','#','#','#','#',' ','#'}};
char mouse_x=1,mouse_y=1,out_x=9,out_y=8;
int key=0;
loop:
system("clear");
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
printf("%c ",a[i][j]);
printf("\n");
}
key=getch();
//printf("%c",key);
if (183==key)
{
if ( a[mouse_x-1][mouse_y]!='#')
{
a[mouse_x][mouse_y]=' ';
a[--mouse_x][mouse_y]='@';
}
}
if (184==key)
{
if ( a[mouse_x+1][mouse_y]!='#')
{ a[mouse_x][mouse_y]=' ';
a[++mouse_x][mouse_y]='@';
}
}
if (186==key)
{
if ( a[mouse_x][mouse_y-1]!='#')
{
a[mouse_x][mouse_y]=' ';
a[mouse_x][--mouse_y]='@';
}
}
if (185==key)
{
if ( a[mouse_x][mouse_y+1]!='#')
{ a[mouse_x][mouse_y]=' ';
a[mouse_x][++mouse_y]='@';
}
}
if (mouse_x==out_x && mouse_y==out_y)
printf("找到出口");
else goto loop;
}
我一开始便输出一整个迷宫,每一次行走都会刷新一次迷宫,通过上下左右方向键来控制老鼠的行动,每次在行走的时候判定下个即将要走的位置是空或者是墙,如果是墙则返回循环再输入一个方向来行走,直至找到正确的出口。
从现在看来,在做这个程序的时候,有两个缺陷,运行的时候最后找到出口的时候,老鼠的位置还没动就显示走出迷宫,应该在找到迷宫后还要走一格,还有就是用了loop,但是老师上课说过在公司上班不能大多数都不能使用loop,因为可能会造成数据混乱,所有还是用while比较好,将找到入口作为结束的条件,这些都是不足,要加以改进。