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;
}
相关推荐
无敌最俊朗@4 分钟前
unity3d————接口基础知识点
开发语言·c#
Michael_Good7 分钟前
【计算机网络】网卡NIC的工作内容包括哪些呢?
网络·计算机网络
engchina21 分钟前
Oracle ADB 导入 BANK_GRAPH 的学习数据
数据库·学习·oracle·graph
不爱学习的YY酱23 分钟前
【计网不挂科】计算机网络第二章< 物理层 >习题库(含答案)
java·数据库·计算机网络
一丝晨光31 分钟前
gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
c语言·开发语言·c++·gnu·clang·gcc·g++
南城花随雪。42 分钟前
Spring框架之装饰者模式 (Decorator Pattern)
java·开发语言·装饰器模式
究极无敌暴龙战神X1 小时前
前端学习之ES6+
开发语言·javascript·ecmascript
虞书欣的61 小时前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
TN_stark9321 小时前
多进程/线程并发服务器
服务器·算法·php
Komorebi.py1 小时前
【Linux】-学习笔记03
linux·笔记·学习