C语言最简单的扫雷实现(解析加原码)

头文件

c 复制代码
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define numlei 10

do while可以循环玩

两个板子,内板子放0,外板子放*
set函数初始化两个板子
lei函数,x,y随机两数,把内板子某些0改为1
print函数打印内或外板子
board返回周围8个格子雷的个数

c 复制代码
#include "game.h"
void set(char arr[ROWS][COLS], int row, int col,char set)
{
	for (int i = 0;i < ROWS;i++)
	{
		for (int j = 0;j < COLS;j++)
		{
			arr[i][j] = set;
		}
	}
}
void lei(char arr[ROWS][COLS], int row, int col)
{
	int count = numlei;
	while (count)
	{
		int x = rand() % 9 + 1;
		int y = rand() % 9 + 1;
		if (arr[x][y]=='0')
		{
			arr[x][y] = '1';
			count--;
		}
	}
}
void print(char arr[ROWS][COLS], int row, int col)
{
	for (int i=0;i<=row;i++)
	{
		printf("%d ",i);
	}
	printf("\n");
	for (int i = 1;i <= row;i++)
	{
		printf("%d ", i);
		for (int j = 1;j <= col;j++)
		{   
			printf("%c ", arr[i][j]);
		}
		printf("\n");
	}
}
int board(char mine[ROWS][COLS], int x, int y)
{
	return  (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y-1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1]-8*'0');

}


void game()
{
	printf("********************\n");
	printf("**** 1.游戏开始 ****\n");
	printf("**** 0.退出游戏 ****\n");
	printf("********************\n");
	int input;
	char show[ROWS][COLS];
	char inside[ROWS][COLS];
	do
	{
		
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			set(show, ROW, COL, '*');
			print(show, ROW, COL);
			set(inside, ROW, COL, '0');
			lei(inside, ROW, COL);
			int win = 0;
			while (win<ROW*COL-numlei)
			{

				int x, y;
				scanf("%d %d", &x, &y);
				if (x >= 1 && y >= 1 && x <= ROW && y <= COL)
				{
					if (inside[x][y] == '1')
					{
						printf("你被炸了\n");
						print(inside, ROW, COL);
						break;
					}
					else
					{
						int c = board(inside, x, y);
						show[x][y] = c + '0';
						print(show, ROW, COL);
						win++;
					}
				}
				else
					printf("输入坐标错误,请重新输入\n");
			}
			if (win == ROW * COL - numlei)
			{
				printf("排雷成功\n");
				print(inside, ROW, COL);
			}
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("重新输入\n");
			break;
		}
	} while (input);
}

int main()
{   
	srand((unsigned) time(NULL));
	game();
	return 0;
}
相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
luckys.one1 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
TomCode先生2 小时前
c#动态树形表达式详解
开发语言·c#
高-老师2 小时前
基于R语言的物种气候生态位动态量化与分布特征模拟
开发语言·r语言·物种气候
大翻哥哥3 小时前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
~|Bernard|3 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师3 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo33 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
weixin_437830943 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
鹿鹿学长4 小时前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模