我们来实现一个小游戏,就是老鼠走迷宫,效果图如下所示:
二、数据结构分析
首先,我们先来分析一下数据结构。
1、迷宫地图——它是有一个字符型二维数组并初始化构成的,障碍显示为‘#’,道路为‘ ’。
2、迷宫出口位置——通过确定出口的行下标、列下标,来标识迷宫的出口位置。
3、老鼠的位置——在地图中老鼠显示为‘&’,通过行下标变量、列下标变量来标识,并根据地图中的老鼠的位置进行初始化。
4、游戏时间——由记录时间的变量存储,time(NULL)函数可以获取系统的时间,系统会返回1970年1月1日 00:00:00 到现在一共用了多少秒 。
三、业务流程分析分析完数据结构,我们再来看看整个程序的业务流程。
1、给定一个字符型二维数组并初始化,来存储迷宫地图。
2、定义记录老鼠位置的变量、获取游戏开始的时间和定义迷宫出口位置的变量。
3、定义一个死循环,终止条件为老鼠到达出口位置。
4、在每次显示地图时先清理屏幕。
5、显示地图,遍历字符二维数组。
6、检查老鼠是否到达出口,如果已到达就计算用时并显示,结束游戏。
7、获取方向键,根据获取到的方向键来判断老鼠的走向。
for(; ;)
{
//清理屏幕
system("clear");
//显示地图,遍历字符二维数组
//检查老鼠是否到达出口
{
//计算用时,并显示;
//结束游戏;
}
//获取方向键
switch(getch())
{
case 183:向上移动老鼠;break;
case 184:向下移动老鼠;break;
case 185:向右移动老鼠;break;
case 186:向左移动老鼠;break;
}
}
四、代码实现
分析完业务流程后,就是代码的实现了,根据业务流程一步步来就可以完成了。
#include#include #include #include int main(int argc,const char* argv[]) { char map[20][20]={ {'#','&','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}, {'#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ','#',' ',' ',' ','#','#'}, {'#','#','#','#',' ','#',' ','#','#','#',' ','#','#',' ','#',' ','#',' ',' ','#'}, {'#',' ','#','#',' ','#',' ',' ',' ',' ','#',' ','#',' ','#',' ',' ','#',' ','#'}, {'#',' ','#','#',' ','#',' ',' ','#',' ',' ',' ','#',' ','#','#',' ','#',' ','#'}, {'#',' ','#','#',' ','#','#','#','#',' ','#',' ','#',' ','#',' ',' ','#',' ','#'}, {'#',' ',' ',' ',' ',' ',' ',' ','#',' ','#',' ','#',' ','#',' ','#','#',' ','#'}, {'#','#','#','#','#',' ','#',' ','#',' ','#',' ','#',' ','#',' ',' ','#',' ','#'}, {'#',' ','#',' ','#',' ','#',' ','#','#','#',' ','#',' ','#','#',' ','#',' ','#'}, {'#',' ',' ',' ','#','#','#',' ',' ',' ','#',' ','#',' ',' ',' ',' ','#',' ','#'}, {'#',' ','#',' ','#',' ','#',' ','#',' ','#',' ','#',' ','#',' ','#',' ',' ','#'}, {'#',' ','#',' ',' ',' ','#',' ','#',' ','#',' ','#','#','#','#','#',' ',' ','#'}, {'#',' ','#','#','#',' ','#',' ','#',' ','#',' ','#',' ',' ',' ',' ',' ',' ','#'}, {'#',' ','#',' ','#',' ','#',' ','#',' ','#',' ','#',' ','#','#','#','#',' ','#'}, {'#',' ','#',' ',' ',' ','#',' ','#',' ','#',' ','#',' ','#',' ',' ',' ',' ','#'}, {'#',' ','#',' ','#',' ','#','#','#',' ','#',' ','#',' ','#','#',' ','#',' ','#'}, {'#',' ','#',' ','#',' ',' ',' ',' ',' ','#',' ','#',' ',' ',' ','#','#',' ','#'}, {'#',' ','#','#','#','#','#','#','#','#','#',' ','#','#','#',' ',' ','#',' ','#'}, {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',' ','#',' ','#'}, {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#',' ','#','#','#'}, }; //定义记录老鼠位置的变量 int mouse_row=0,mouse_col=1; //获取游戏开始的时间 time_t start_time=time(NULL); //定义记录迷宫出口位置 const int out_row=19,out_col=16; for(;;) { //清理屏幕 system("clear"); //显示地图,遍历字符二维数组 for(int i=0;i<20;i++) { for(int j=0;j<20;j++) printf("%c",map[i][j]); printf("n"); } //检查老鼠是否到达出口 { time_t present_time=time(NULL); if(mouse_row == out_row && mouse_col == out_col) { printf("恭喜走出迷宫,用时:%lu秒n",present_time-start_time); return 0; } } //获取方向键 switch(getch()) { case 183://向上移动 { if(map[mouse_row-1][mouse_col]==' ') { map[mouse_row][mouse_col]=' '; map[mouse_row-1][mouse_col]='&'; mouse_row-=1; break; } else break; } case 184://向下移动 { if(map[mouse_row+1][mouse_col]==' ') { map[mouse_row][mouse_col]=' '; map[mouse_row+1][mouse_col]='&'; mouse_row+=1; break; } else break; } case 185://向右移动: { if(map[mouse_row][mouse_col+1]==' ') { map[mouse_row][mouse_col]=' '; map[mouse_row][mouse_col+1]='&'; mouse_col+=1; break; } else break; } case 186://向左移动 { if(map[mouse_row][mouse_col-1]==' ') { map[mouse_row][mouse_col]=' '; map[mouse_row][mouse_col-1]='&'; mouse_col-=1; break; } else break; } } } return 0; }



