简易的扫雷小游戏(C语言)

简易的扫雷小游戏(C语言),第1张

一,框架

跟上次的三子棋一样,我们需要game.c,game.h还有test.c。

game.c用来实现游戏功能

test.c是主体

game.h放入各种声明和宏定义

 

 这是部分演示

二,菜单及其功能实现

菜单很简单,输入1就是玩游戏,0就是退出游戏。因为考虑到玩家玩完一局还想玩一局,还有1,0这样的选择。我们使用while和Switch结合实现。

三,游戏实现 3.1数组创建及其初始化

首先创建两个数组,mine数组存放布置的雷,第二个show数组用来展示给玩家。mine数组初始化为‘0’,雷为‘1’,show数组初始化为‘*’。因为我们需要的是9*9的扫雷游戏,但是我在数雷的个数时需要把坐标的周围都得数一遍,因此当坐标在临边的时候,如果数组为9*9的,扫描一周的话就会数组越界,因此需要把棋盘+2。方便雷的计数。而初始化就只需要用for循环就可以了。

 

 3.2棋盘的实现

定义一个DISboard()函数用于打印棋盘。本质就是直接打印上面的show数组。但是因为要输入坐标来扫雷,因此在两边用于看坐标的数字,方便玩家输入。

 

3.3雷的布置 

雷的设置实际就是对于随机数的使用。只要随机的那个坐标没有被设置雷,就设置。而因为坐标对的范围是1~9。所以需要在rand()%row和rand()%col上+1。如果不加一的话就是0~8。我们这个设置10个雷,用while循环来设置。

3.4找雷 

找雷是输入坐标。因此有两种情况,一种输入坐标合法,一个非法。非法有越界和坐标已经找过雷了。然后判断是不是雷,不是雷后需要统计周围8个位置一共有几个雷,然后显示出来。如果是雷就直接game over。当把雷排完就胜利。

int getMineCount(char mine[ROWS][COLS], int x, int y)
{    
	return mine[x - 1][y - 1] + mine[x][y-1] + mine[x + 1][y - 1] + mine[x-1][y] + mine[x+1][y] + mine[x - 1][y + 1] + mine[x][y+1] + mine[x + 1][y + 1] - 8 * '0';
}
void findmine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col)
{
	int win = 0;
	int x, y;
	
	while (win < row * col - EASY_COUNT)
	{
		printf("请输入坐标:>\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
		{
			if (show[x][y] != '*')
			{
				printf("坐标已经被排查过了,请重新输入!\n");
			}
			else
			{
				if (mine[x][y] == '1')
				{
					printf("对不起你被炸死了!\n");
					Disboard(mine, ROW, COL);
					break;
				}
				else
				{
					win++;
					int count = getMineCount(mine, x, y);
					
					show[x][y] =count+'0';
					Disboard(show, ROW, COL);

				}

			}
		}
		else
		{
			printf("坐标非法,请重新输入!\n");
			break;

		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("恭喜你,你成功了!\n");
		Disboard(mine, ROW, COL);

	}
}
 四,总结。

这就是扫雷代码,我的代码写的一般,并且解说也只是粗略的说一下大概。如果有哪错误,请谅解。感谢浏览。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/875078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存