C语言第十课----------------扫雷----------数组的经典练手题

作者前言

🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂

   🎂      作者介绍:                              🎂🎂

       🎂 🎉🎉🎉🎉🎉🎉🎉              🎂

          🎂作者id:老秦包你会,         🎂

简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

             喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨         🎂🎂🎂🎂🎂🎂🎂🎂

                 🎂个人主页::小小页面🎂

                  🎂gitee页面:秦大大🎂

                   🎂🎂🎂🎂🎂🎂🎂🎂
        🎂  一个爱分享的小博主 欢迎小可爱们前来借鉴🎂

_______________________________________________________

______________________________________________________________________

目录

扫雷

        分析

        代码

——————————————————————————————————————

扫雷

 如上图,玩扫雷的原理就是避开雷找出所有的雷就胜利,废话不多说,我们直接开始扫雷分析

分析

俗话说的好,玩游戏第一步进入游戏,我们就写出一个游戏菜单出来,让玩家选择

void meun()
{
	printf("*********        扫雷       ********\n");
	printf("************************************\n");
	printf("*********       0.exit      ********\n");
	printf("*********       1.paly      ********\n");
	printf("************************************\n");


}

下面我们要写一个框架,选择玩或者不玩,

int input;
	srand((unsigned)time(NULL));
	do
	{
		meun();
		printf("进入扫雷界面,请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			printf("开始游戏\n");
			game();
			break;
		default :
			printf("输入不符合规定,请重新输入\n");
			break;

		}

下面我们就要开始写扫雷的内容了,首先扫雷我们要给出扫雷的游戏画面,在这个过程中我们可以创建两个数组,一个用于计算,一个用于显示

 左边是计算,右边是显示 然后我们就要设计一下输出的界面,要玩家有好的体验

void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			
			mine[i][j] = str;
		}
	}


}
void Carving(char mine[ROWS][COLS], int row, int col)
{

	int i = 0;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	printf("--------------------\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d|", i);
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			
			printf("%c ", mine[i][j]);
		}
		printf("\n");
	}
}

然后我们就要布置雷了,雷的设计要随机可以使用rand(),记得设计出源点srand((unsigned)time(NULL))

代码如下:

void Production(char mine[ROWS][COLS], int row, int col)
{
	int count = Count;
	while (count)
	{
		int x = ((rand() % (row)) + 1);
		int y = ((rand() % (col)) + 1);
		
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

下面我们就要模拟玩家扫雷了,玩家扫雷要输入坐标, 然后判断是否踩到雷或者已经排查过了,如果没有就要统计周边雷的个数,然后反馈给显示数组,最后判断是否排除完全部雷了,

void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{
	int count = 0;
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请玩家输入坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
		{
			if (mine[x][y] == '0')
			{
				mine[x][y] = ' ';
				count++;
				//统计周边的雷数
				int sum = 0;
				int i = x - 1;
				for (i = x - 1; i <= x + 1; i++)
				{
					int j = y - 1;
					for (j = y - 1; j <= y + 1; j++)
					{
						if (i != x && j != y)
							sum = sum + (mine[i][j] - '0');
					}
				}
				show_mine[x][y] = '0' + sum;
				printf("扫雷情况:\n");
				Carving(show_mine, ROW, COL);
				printf("\n");
				if (count == (row * col) - Count)
				{
					printf("你胜利了\n");
					goto  aa;


				}
			}
			else if (mine[x][y] == '1')
			{
				printf("你被炸死了,游戏结束\n");
				break;
			}

		}
		else
		{
			printf("请重新输入,你输入的不符合规定\n");
		}
	}
aa:
	;

}

 下面是全部代码:

扫雷.c

#include"扫雷.h"
void meun()
{
	printf("*********        扫雷       ********\n");
	printf("************************************\n");
	printf("*********       0.exit      ********\n");
	printf("*********       1.paly      ********\n");
	printf("************************************\n");


}
int main()
{
	int input;
	srand((unsigned)time(NULL));
	do
	{
		meun();
		printf("进入扫雷界面,请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			printf("开始游戏\n");
			game();
			break;
		default :
			printf("输入不符合规定,请重新输入\n");
			break;

		}


	} while (input);





	return 0;
}

扫雷函数.c

#include"扫雷.h"
void game()
{
	char mine[ROWS][COLS];
	char show_mine[ROWS][COLS];
	//数组初始化
	initialization(mine, ROWS, COLS, '0');
	initialization(show_mine, ROWS, COLS, '*');

	//布置雷
	Production(mine, ROW, COL);

	//雕刻扫雷棋盘
	Carving(mine, ROW, COL);
	printf("\n");
	Carving(show_mine, ROW, COL);
	
	//玩家扫雷
	paly_mine(mine, show_mine, ROW, COL);
	/*printf("%p", &mine);
	printf("%p", &show_mine);*/

}

void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			
			mine[i][j] = str;
		}
	}


}

void Carving(char mine[ROWS][COLS], int row, int col)
{

	int i = 0;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	printf("--------------------\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d|", i);
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			
			printf("%c ", mine[i][j]);
		}
		printf("\n");
	}
}
//布置雷
void Production(char mine[ROWS][COLS], int row, int col)
{
	int count = Count;
	while (count)
	{
		int x = ((rand() % (row)) + 1);
		int y = ((rand() % (col)) + 1);
		
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

//玩家扫雷
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{
	int count = 0;
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请玩家输入坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
		{
			if (mine[x][y] == '0')
			{
				mine[x][y] = ' ';
				count++;
				//统计周边的雷数
				int sum = 0;
				int i = x - 1;
				for (i = x - 1; i <= x + 1; i++)
				{
					int j = y - 1;
					for (j = y - 1; j <= y + 1; j++)
					{
						if (i != x && j != y)
							sum = sum + (mine[i][j] - '0');
					}
				}
				show_mine[x][y] = '0' + sum;
				printf("扫雷情况:\n");
				Carving(show_mine, ROW, COL);
				printf("\n");
				if (count == (row * col) - Count)
				{
					printf("你胜利了\n");
					goto  aa;


				}
			}
			else if (mine[x][y] == '1')
			{
				printf("你被炸死了,游戏结束\n");
				break;
			}

		}
		else
		{
			printf("请重新输入,你输入的不符合规定\n");
		}
	}
aa:
	;

}

扫雷.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define Count 10
//
void game(void);
//初始化
void initialization(char mine[ROWS][COLS], int row, int col, char str);
//打印棋盘
void Carving(char mine[ROWS][COLS], int row, int col);
//布置雷
void Production(char mine[ROWS][COLS], int row, int col);
//玩家扫雷
vo

总结:

扫雷代码就在这里了,这个代码还可以进一步改进,但是由于时间原因,其他功能没写,有不懂的小可啊可以私聊我

  • 42
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老秦包你会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值