用c语言简单实现小游戏——扫雷

本文介绍了如何使用C语言来实现经典的小游戏——扫雷。通过创建头文件、测试文件和源文件,逐步讲解了扫雷游戏的实现过程,包括设置菜单、构建雷盘、初始化、布置雷、打印雷盘、判断和展开等关键步骤。虽然有一定难度,但作者认为与三子棋类似,通过学习和实践,可以掌握扫雷的编程技巧。
摘要由CSDN通过智能技术生成

用c语言简单实现小游戏——扫雷
扫雷是大家小时候大家在电脑上都玩过的单机游戏,它点开一个可能会展开一大片,你要通过这个数字判断他周围的雷个数。
首先扫雷要写三个文件:
头文件:game.h //包含函数各种声明,宏定义
源文件:test.c //主要负责测试整个代码
源文件:game.c //包含各种函数的定义
整体思路
1.玩游戏之前,首先我们需要一个菜单,来确定你是不是要玩游戏。


void menu()
{
   
	printf("***********************************************\n");
	printf("*******     1.play         0.exit        ******\n");
	printf("***********************************************\n");
}

2.我们需要利用二维数组来构建雷盘,

char mine[ROWS][COLS] = {
    0 };
char show[ROWS][COLS] = {
    0 };

并且使用宏定义来定义雷盘,这样方便修改雷盘的大小

# define ROW 9 //雷盘行数
# define COL 9
#define ROWS ROW+2 //雷盘的实际行数
#define COLS COL+2

3.定义完之后,我们初始化雷盘,利用InitBoard函数来实现。

void InitBoard(char board[ROWS][COLS], int row, int col, char set)//初始化雷盘
{
   
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
   
		for (j = 0; j < col; j++)
		{
   
			board[i][j] = set;
		}
	}
}

4.初始化雷盘之后,我们需要在雷盘上布置雷,利用SetMine函数来实现。这里的rand需要调用<time.h>来实现。利用这个函数srand((unsigned int)(time(NULL)));来生成随机数。

void SetMine(char mine[ROWS][COLS], int row, int col)//布置雷
{
   
	int count = EASY_COUNT;
	while (count)
	{
   
		int x;
		int y;
		x = rand() % row + 1;//保证行坐标在1到9之间
		y = rand() % col + 1;
		if (mine[x][y] = '0')//判断该位置是否布置过雷
		{
   
			mine[x][y] = '1';
			count--;
		}
	}
}

5.布置完雷之后,我们需要把雷盘打印出来,这样才能使我们更方面的开始玩游戏。

void DisplayBoard(char board[ROWS][COLS], int row, int col)//打印雷盘
{
   
	system("CLS");//每次打印雷盘之前清屏一次
	int i = 0;
	int j = 0;
	
	for (i = 0; i <= row; i++)
		printf("%d ", i);//打印列坐标1 2 3 4 5 6 7 8 9 
	printf("\n");
	for (i = 1; i <= row; i++)
	{
   
		printf("%d ", i);//打印行坐标1 2 3 4 5 6 7 8 9 
		for (j = 1; j <= row; j++)
		{
   
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}	
}

6.我们需要开始扫雷,在扫雷之前我们需要保证第一次点开的不是雷,因为刚开始如果点开就是雷,那这个游戏还要怎么玩下去。

void FirstMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
   
	int x;
	int y;
	int ret = 0;
	int count = 0;
	printf("请输入要排查的坐标:");
	scanf("%d,%d", &x, &y);
	if (mine[x][y] == '1')
	{
   
		mine[x][y] = '0';
		count = GetMineCount(mine, x, y);
		show[x][y] = count + '0';
		while (ret)//随机生成一个雷
		{
   
			x = rand() % ROW + 1;
			y = rand() % COL + 1;
			if (mine[x][y] == '0')
			{
   
				mine[x][y] = '1';
			}
			ret--;
		}
	}
	OpenMine(mine, show, row, col, x, y);
	DisplayBoard(show, row,col);
}

7.我们还需要做到判断点开一个数之后的周围是否有雷。

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
   
	return mine[x - 1][y] +
		mine[x - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值