用c语言实现简易c语言扫雷游戏

cpp 复制代码
void test(void)
{
	int input = 0;
	
	do
	{
		menu();
		printf("请选择: >");
		scanf("%d", &input);
		switch (input)
		{
			menu();
			case 1:
				printf("扫雷\n");
				game();
				break;
			case 2:
				printf("退出游戏\n");
				break;
			default:
				printf("输入错误,请重新输入");
				break;
		}
	} while (input);//0退出游戏


}
int main(void)
{

	test();
	return 0;
}

1、主函数及游戏开始结束的界面设计

cpp 复制代码
void menu()
{
	printf("*************************\n");
	printf("*******  1:开始游戏      *******\n");
	printf("*******  0:退出游戏      *******\n");
	printf("*************************\n");

}

2、菜单函数

cpp 复制代码
void game()
{
	char mine[ROWS][COLS] = { 0 };//存雷
	char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息

	//初始化棋盘   尽量设计成一样的
	InitBoard(mine,ROWS, COLS,'0');
    
	InitBoard(show,ROWS, COLS,'*');//调试时打印该表,玩的时候可以不打印

	//打印棋盘
	DisplayBoard(show, ROW, COL);

	//布置雷
	SetMine(mine, ROW, COL);
	DisplayBoard(mine, ROW, COL);//棋盘雷信息
	//排查雷
	FindMine(mine, show, ROW, COL);


}

3、游戏模块

头文件参数封装

cpp 复制代码
#define ROW 9        //棋盘显示区域
#define COL 9

#define ROWS ROW + 2//棋盘宽度
#define COLS COL + 2

#define EASY_COUNT 20//雷的数量


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

void DisplayBoard(char board[ROWS][COLS], int row, int col);//实际显示的棋盘区域

void SetMine(char mine[ROWS][COLS],int row,int col);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS],int row,int col);

初始化棋盘 尽量设计成一样的

cpp 复制代码
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	for (i = 0;i < rows;i++)
	{
		int j = 0;
		for (j = 0;j < cols;j++)
		{
			board[i][j] = set;
		}
	}
}

打印棋盘

cpp 复制代码
void DisplayBoard(char board[ROWS][COLS], int row, int col)//实际显示的棋盘区域
{
	int i = 0;
	for (i = 0;i <= col;i++)
	{
		printf("%d ", i);//打印行列
	}
	printf("\n");

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

}

布置雷

cpp 复制代码
//布置雷是在棋盘上随机的找10个坐标
//x范围1~9
//y范围1~9
void SetMine(char mine[ROWS][COLS], int row, int col)
{ 
	int count = EASY_COUNT;//80个雷
	int x = 0;
	int y = 0;
	srand((unsigned int)time(NULL));//随机数清空
	while (count)
	{
		x = rand() % row + 1;//防止出界
		y = rand() % col + 1;

		if (mine[x][y] != '1')
		{
			mine[x][y] = '1';//判断是否有雷
			count--;
		}
	}
}

排查雷

cpp 复制代码
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
	int x = 0;
	int y = 0;
	int win = 1;
	while (1)
	{
		printf("请输入要排查的坐标:");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)//是雷
		{
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你踩雷了,游戏结束\n");
				DisplayBoard(mine, ROW, COL);
				break;
			}
			else
			{
				int count = GetMineCount(mine, x, y);
				show[x][y] = count + '0';
				DisplayBoard(show, ROW, COL);
			}
		}
		else
		{
			printf("输入的坐标有误x(1~9),y(1~9) 请重新输入");
		}
		//游戏胜利
		if (win == row * col - EASY_COUNT)
		{
			printf("恭喜你,排雷成功\n");
			break;
		}
	}
}
统计周围有几个雷

目录

1、主函数及游戏开始结束的界面设计

2、菜单函数

3、游戏模块

[初始化棋盘 尽量设计成一样的](#初始化棋盘 尽量设计成一样的)

打印棋盘

布置雷

排查雷

[法2 统计周围有几个雷](#法2 统计周围有几个雷)


cpp 复制代码
int GetMineCount(char mine[ROWS][COLS], char x, char y)
{
	int i = 0;
	int count = 0;
	for(i = -1;i <= 1;i++)
	{ 
		int j = 0;
		for (j = -1;j <= 1;j++)
		{
			count += mine[x + i][y + j] - '0';
		}
	}
	return count;
}
相关推荐
油泼辣子多加3 小时前
【实战】自然语言处理--长文本分类(1)DPCNN算法
算法·自然语言处理·分类
I'm a winner4 小时前
基于YOLO算法的医疗应用专题:第一章 计算机视觉与深度学习概述
算法·yolo·计算机视觉
vir024 小时前
P1928 外星密码(dfs)
java·数据结构·算法·深度优先·1024程序员节
喜欢吃燃面4 小时前
数据结构算法题:list
开发语言·c++·学习·算法·1024程序员节
寂静山林5 小时前
UVa 12991 Game Rooms
算法·1024程序员节
奔跑吧邓邓子5 小时前
【C语言实战(44)】C语言打造全能简易计算器:突破运算极限
c语言·实战·全能简易计算器
余俊晖6 小时前
RLVR训练多模态文档解析模型-olmOCR 2技术方案(模型、数据和代码均开源)
人工智能·算法·ocr·grpo
凉虾皮6 小时前
2024包河初中组
学习·算法·1024程序员节
m0_748233647 小时前
C++ 模板初阶:从函数重载到泛型编程的优雅过渡
java·c++·算法·1024程序员节
以己之7 小时前
11.盛最多水的容器
java·算法·双指针·1024程序员节