【C语言小游戏】——老鼠走迷宫

一、效果图展示

我们来实现一个小游戏,就是老鼠走迷宫,效果图如下所示:

 

二、数据结构分析

首先,我们先来分析一下数据结构。

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;
				}
				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;
}

  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值