C语言:简单的扫雷游戏

       扫雷游戏想必大家都玩过,像一些大佬呀,十几秒能通关,给大佬点赞,那咱们也设计一个扫雷游戏,具体怎么实现呢,跟上我的脚步,看看用C语言怎么实现简单的扫雷游戏。

80843dfeb63b46d9939227cd60408c82.webp

 一:扫雷游戏的框架

b18f86d60d084fe9bcc0968fa48edb75.png

二:test.c的实现

①:写出主函数。

主函数主要是能循环,继续玩,并且能包括扫雷所有功能。

792ef95f917b43c4b6b82f3244e28555.png

②: 其次game()函数的实现。(实现玩游戏)

//1.初始化棋盘
void InitBord(char board[ROWS][COLS], int row, int col, char set);

//2.打印棋盘
void DisPlayBoard(char board[ROWS][COLS], int row, int col);

//3.布置雷
void SetMine(char board[ROWS][COLS], int row, int col);

//4.排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

void game()
{
	char mine[ROWS][COLS] = { '0' };//存放布好的雷
	char show[ROWS][COLS] = { '*' };//存放排查出雷的信息
	
	//初始化棋盘
	InitBord(mine, ROWS, COLS, '0');//存放布好的雷
	InitBord(show, ROWS, COLS, '*');//存放排查出雷的信息
	
	//打印棋盘
	printf("雷的布置为\n");
	DisPlayBoard(mine, ROW, COL);//存放布好的雷
	printf("排查出雷的信息\n");
	DisPlayBoard(show, ROW, COL);//存放排查出雷的信息

	//布置雷
	SetMine(mine, ROW, COL);
	DisPlayBoard(mine, ROW, COL);//存放布好的雷

	//排查雷
	FindMine(mine, show,ROW,COL);
}

细节注意:雷的排布是不用打印出来的,这里只是演示,其中ROWS是列=11,COLS是行=11

ROW是列=9,COL是行=9,那为什么要这样初始化呢?

71ad87c774cf4cab8a56f6fabeb0129b.png

 三:game.c的实现

①:打印菜单

//打印菜单
void menu()
{
	printf("*****************************\n");
	printf("*******     1.play     ******\n");
	printf("*******     0.exit     ******\n");
	printf("*****************************\n");
}

②:初始化棋盘

细节说明:要初始化成11×11的格子。
    InitBord(mine, ROWS, COLS, '0');存放布好的雷
    InitBord(show, ROWS, COLS, '*');存放排查出雷的信息

//初始化棋盘
void InitBord(char board[ROWS][COLS], int row, int col, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = set;
		}
	}
	打印(测试)
	//for (i = 0; i < row; i++)
	//{
	//	for (j = 0; j < col; j++)
	//	{
	//		printf("%c",board[i][j]);

	//	}
	//	printf("\n");
	//}
}

③:打印棋盘

细节说明:可以先打印初始化雷的布局和棋盘布局。

为能更好看些,加上了一些行列的输出。

2c8d1858d97f4c0fa7615abe29cf6f76.png

//打印棋盘
void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 1;
	int j = 1;
	printf("-----扫雷 游戏-----\n");
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
}

④:布置雷。

细节说明:

定义了一个#define Thunder 10 使雷的个数为10,

#include<stdlib.h>  #include<time.h>  采用两个函数,能产生随机数。

在主函数中要写上srand((unsigned int)time(NULL));(这里不再细讲了,可以看看博主C语言猜字游戏,里面有讲述)

//布置雷
void SetMine(char board[ROWS][COLS], int row, int col)
{
	int thunder = Thunder;
	int count = 1;
	while (count <= thunder)
	{
		int x = rand() % row + 1; //范围 1~9
		int y = rand() % row + 1; //范围 1~9
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count++;
		}
	}
}

⑤:排查雷(重点)

细节注意:

0a9a5aa5ad7948ce94c0fc04498c2408.png

 faef598522fb470ba0f2a459ed61c6b3.png

//排查雷
//计算周围雷的个数
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
	return (mine[x][y + 1] + mine[x][y - 1] +
			mine[x - 1][y] + mine[x + 1][y] +
			mine[x - 1][y + 1] + mine[x + 1][y + 1] +
			mine[x - 1][y - 1] + mine[x + 1][y - 1] -
			8 * '0');
}

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 1;
	int y = 1;
	int win_count = 0;
	while (win_count <= row*col - Thunder)
	{
		printf("请玩家输入坐标:");
		scanf("%d %d", &x, &y);

		//判断玩家输入的坐标是否正确
		if ((x < 1 && x > 9) && (y < 1 && y > 9))
		{
			printf("输入的坐标有误,请重新输入:");
			scanf("%d %d", &x, &y);
		}

		//判断玩家是否踩到雷
		if (mine[x][y] == '1')
		{
			printf("你踩到雷了,游戏结束\n");
			DisPlayBoard(mine, ROW, COL);//存放布好的雷
			break;
		}
		else
		{
			int ret = GetMineCount(mine, x, y);//判断输赢函数
			show[x][y] = ret + '0';
			win_count++;
			DisPlayBoard(show, ROW, COL);//存放排查出雷的信息
			
			if (win_count == row * col - Thunder)
			{
				printf("恭喜你,排雷成功^-^\n");
				printf("---查看雷的排布---\n");
				DisPlayBoard(mine, ROW, COL);
				break;
			}
		}
	}
}

四:game.h实现

#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 9           //列      
#define COL 9           //行
#define ROWS ROW + 2    //列 11 
#define COLS COL + 2    //行 11
#define Thunder 10      //雷的个数

//1.打印菜单
void menu();

//2.初始化棋盘
void InitBord(char board[ROWS][COLS], int row, int col, char set);

//3.打印棋盘
void DisPlayBoard(char board[ROWS][COLS], int row, int col);

//4.布置雷
void SetMine(char board[ROWS][COLS], int row, int col);

//5.排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

        不知不觉就到了尾声啦,作为小白的我,可能写的不是很好,不对的地方还请各位小伙伴留言给我谢谢啦。7221dfce3a9741758214cd250913d198.pngfbd9f005bc434c6194c5e57df8ebe7ae.png

d2e0d89ca18346e297af6ae28ad277b6.gif

猜你喜欢

转载自blog.csdn.net/AAlykk/article/details/130578044