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;
}
相关推荐
饶了我吧,放了我吧24 分钟前
计算机网络实验——无线局域网安全实验
计算机网络·安全·web安全
阿捏利1 小时前
C Primer Plus 第6版 编程练习——第7章(上)
c语言·编程题·c primer plus
screenCui1 小时前
macOS运行python程序遇libiomp5.dylib库冲突错误解决方案
开发语言·python·macos
linux kernel2 小时前
第七讲:C++中的string类
开发语言·c++
jz_ddk2 小时前
[实战]调频(FM)和调幅(AM)信号生成(完整C语言实现)
c语言·算法·信号处理
玩代码2 小时前
Java线程池原理概述
java·开发语言·线程池
CloudAce云一2 小时前
谷歌云代理商:谷歌云TPU/GPU如何加速您的AI模型训练和推理
算法
泰勒疯狂展开2 小时前
Java研学-MongoDB(三)
java·开发语言·mongodb
zzywxc7872 小时前
AI技术通过提示词工程(Prompt Engineering)正在深度重塑职场生态和行业格局,这种变革不仅体现在效率提升,更在重构人机协作模式。
java·大数据·开发语言·人工智能·spring·重构·prompt
高hongyuan2 小时前
Go语言教程-占位符及演示代码
开发语言·后端·golang