扫雷小游戏详解(数组实现)

思路:
创建一个9*9的数组(char mine[9][9]初始化数组内容为字符‘0’)作为棋盘使用(存放布置雷的信息),在里面随机放10个雷(雷用字符‘1’来表示)。

假如当我们排查34这个位置时,发现他周围只有一个雷,所以他会显示‘1’,这时就会与我们用‘1’来表示雷产生冲突,这时我们就需要重新创建一个99的数组(char show[9][9])棋盘专门用来存放排查出的雷的信息(这个棋盘展示给用户)。

当没有排查雷时,棋盘show内容初始化为'*'

这时候我们发现,当我们去排查棋盘最外边一圈时,会出现越界访问的情况,而为了防止这个问题,我们创建棋盘时创建为1111,但是我们只用到其中99的范围

实现扫雷游戏:
test.c测试游戏的逻辑
game.c游戏代码的实现
game.h游戏代码的声明(函数声明,符号定义)

第一步:我们做一个简易的菜单:
利用do...while循环,使得菜单无条件打印一次

void menu()
{
   
	printf("******************************\n");
	printf("****** 欢迎来到扫雷游戏 ******\n");
	printf("*********   1.play   *********\n");
	printf("*********   0.exit   *********\n");
	printf("******************************\n");
}

int main()
{
   
	int input = 0;
	do
	{
   
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
   
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}
	} while(input);
	return 0;
}

第二部:初始化棋盘:

//第一版:
//test.c

char mine[ROWS][COLS] = {
    0 };//存放布置好的雷的信息
char show[ROWS][COLS] = {
    0 };//存放排查出的雷的信息
//初始化数组的内容为指定的内容

//mine 数组在没有布置雷的时候,都是'0'
InitBoard(mine, ROWS, COLS);
//show 数组在没有排查雷的时候,都是'*'
InitBoard(show, ROWS, COLS);

//game.h
void InitBoard(char board[ROWS][COLS],int rows,int cols);


//game.c
void InitBoard(char board[ROWS][COLS], int rows, int cols)
{
   
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
   
		for (j = 0; j < cols; j++)
		{
   
			board[i][j] = ;
		}
	}
}

image.png
当第一版写到这里时,我们发现代码并不能一次初始化两个棋盘,解决方法就是把各自需要初始化的值通过一个变量set传递过来:

//第二版:
//test.c

char mine[ROWS][COLS] = {
    0 };//存放布置好的雷的信息
char show[ROWS][COLS] = {
    0 };//存放排查出的雷的信息
//初始化数组的内容为指定的内容

//mine 数组在没有布置雷的时候,都是'0'
InitBoard(mine, ROWS, COLS, '0');
//show 数组在没有排查雷的时候,都是'*'
InitBoard(show, ROWS, COLS, '*');

//game.h
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);


//game.c
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
   
	int i 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值