【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“

C语言实现扫雷小游戏

    • 前言
      • 游戏菜单
      • 地雷盘的实现
      • 盘查雷
      • 初始化棋盘
      • 打印棋盘
      • 布置雷
      • 排查雷
      • 源代码
      • 其他文章推荐

前言

扫雷小游戏是一款非常优秀悠闲的小游戏,在各个pc端上都会有他的身影出现,我们学习了编程,为何不自己做一个游扫雷小戏游戏呢?说做就做,来先看一下大概的效果图。
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第1张图片
在开始前,先来看看我们的游戏功能实现,要在哪一个文件中具体实现什么,要分开实现,这样方便我们未来的一个调整优化。

test.c - 扫雷游戏的测试

game.c - 游戏的实现

game.h - 游戏的函数声明

【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第2张图片

游戏菜单

【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第3张图片

menu函数实现简易菜单

游戏的开始我们是写了一个do循环(条件是输入的选项),如果选择的不等于0 ,那我们是一直在玩的。


地雷盘的实现

  • 我们先来看看棋盘
    【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第4张图片

我们这个小程序的规定是
雷----1
不是雷----0

【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第5张图片
但是可以看见上面的 蓝色1 ,这个并不是 ,**而是提示信息(提示周围有几个雷,**但是这个 蓝1和我们的 1冲突了,我们的1 设定的是雷,但是我们也需要提示信息,所以我们的解决方法是,创建2个棋盘,一个是放雷的,还有一个是显示周围雷的信息,

布雷的:
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第6张图片

显示提示信息的:
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第7张图片
以上是布置雷的相关想法,接下来来看一下,怎么实现排查雷吧。


盘查雷

首先有一个问题,来看下图
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第8张图片
我要是想看这里有没有雷那么 ,它右边的一圈,和下面的周围是不是没有雷盘了,那可能会影响到游戏。
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第9张图片

解决方法:
我们上面的灰色棋盘,是9*9的 ,但是为了不让他越界,我们可以试着扩大2行2列,变成11 * 11 :
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第10张图片
我们先去game.h 定义我们需要的变量
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第11张图片
test.c
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第12张图片

【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第13张图片

初始化棋盘

mine的棋盘全部放0
show的棋盘全部放*
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第14张图片
game.h定义
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第15张图片
game.c 实现
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第16张图片
char set 这个参数是可以改变的 ,前台传过来的值,这边是可以变化的,增加了灵活性


打印棋盘

test.c
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第17张图片
game.h
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第18张图片
game.c 函数的实现
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第19张图片

void DisPlayBoard(char board[ROWS][COLS], int row, int col) 
{
     
	int i = 0;
	int j = 0;
	printf("------------扫雷游戏-------------\n");
	//打印列号
	for ( i = 0; i <= col; 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");
	}
	printf("------------扫雷游戏-------------\n");

}

具体效果是这样的
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第20张图片

以上代码棋盘显示出来了


布置雷

game.h定义雷
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第21张图片
game.c实现设置雷的函数
算法思想:
1:布置10个雷
2:让这个10个雷下标随机
3:种雷
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第22张图片

void SetMine(char mine[ROWS][COLS], int row, int col)
{
     
	//布置10个雷
	int count = 10;
	while (count)
	{
     
		//生产随机的下标
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (mine[x][y] == '0') {
      //看看当前格子是不是空的

			mine[x][y] = '1';	//如果是空的就种一颗雷

			count--;
		}
	}
}

test.c引用
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第23张图片
可以看看自己布置的雷
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第24张图片
成功了


排查雷

game.h定义一个变量 ,用于调整游戏难度,这个是雷的个数
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第25张图片

game.h
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第26张图片
game.c
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第27张图片

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
     
	//1、输入排查的坐标
	//2.检查坐标处是不是雷
		//(1) 是雷 = 炸死了
		//(2) 不是雷 - 统计坐标周围有几个雷- 存储排查雷的信息到show数组,游戏继续
	int x = 0;
	int y = 0;
	int win = 0; //定义一个变量,如果全部排查完了就 提示排查成功
	while (win < row*col - EASY_Count)  //game.h 定义的
	{
     
		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
			{
     
				//不是雷 统计周围有几个雷,xy
				int count = get_mine_count(mine,x,y);
				show[x][y]=count+'0';
				//显示排查的信息
				DisPlayBoard(show,row,col);
				win++;  //每进来一次就 记录一次
			}
		}
		else
		{
     
			printf("坐标不合法,请重新输入\n");
		}
	}	
	if (win==row * col -EASY_Count)  //如果计数的等于 空格子数就赢了
	{
     
		printf("恭喜你排雷成功\n");
		DisPlayBoard(mine, row, col);//看一下怎么炸死的
	}
}

显示雷的个数信息,不需要在头文件定义,因为它只是在FindMine函数里面起作用,加static 只在本文件里使用,别的文件不可以使用
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第28张图片

//雷的个数信息
static int get_mine_count(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';
}

可以看看效果
刚刚那个代码放出来排查的信息
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第29张图片
test.c 显示出来
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第30张图片
来看看效果 这里图片已经是正常的了
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第31张图片

来看看排雷成功的效果(这里是把雷改成80,棋盘是9*9 81格)
【c语言】 我使用c语言基础做了一个老少皆宜的“国民小游戏【扫雷】“_第32张图片
以上差不多扫雷基础已经成功了,当然这还有好多可以扩展的,展开,标记雷


源代码

扫雷小游戏

其他文章推荐

三字棋

.NET动态验证码

你可能感兴趣的:(c语言)