用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;
}
相关推荐
写代码的小球20 分钟前
求模运算符c
算法
学不动CV了4 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
大千AI助手4 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
YuTaoShao5 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记5 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
猫猫的小茶馆6 小时前
【STM32】通用定时器基本原理
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
Tony沈哲6 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
Luna-player6 小时前
黑布淡入淡出效果
经验分享·游戏
刘海东刘海东7 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习