一、效果图展示
我们来实现一个小游戏,就是老鼠走迷宫,效果图如下所示:
二、数据结构分析
首先,我们先来分析一下数据结构。
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 <stdio.h>#include <getch.h>#include <stdlib.h>#include <time.h>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;}elsebreak;}case 184://向下移动{if(map[mouse_row+1][mouse_col]==' '){map[mouse_row][mouse_col]=' ';map[mouse_row+1][mouse_col]='&';mouse_row+=1;break;}elsebreak;}case 185://向右移动:{if(map[mouse_row][mouse_col+1]==' '){map[mouse_row][mouse_col]=' ';map[mouse_row][mouse_col+1]='&';mouse_col+=1;break;}elsebreak;}case 186://向左移动{if(map[mouse_row][mouse_col-1]==' '){map[mouse_row][mouse_col]=' ';map[mouse_row][mouse_col-1]='&';mouse_col-=1;break;}elsebreak;}}}return 0;}