简易扫雷小游戏

游戏规则

扫描出棋盘中的所有雷即胜利。在本程序中要依次选出棋盘不是雷的位置,若不是雷,则会显示当前位置周围一圈范围内雷的个数,若是雷,则游戏结束。

程序设计

本次程序实现的简易版的扫雷,和Windows上自带的扫雷有所区别。

  1. 未实现标记雷的功能;
  2. 当前程序扫描雷的算法过于笨重,只是逐个判断每个位置是否是雷,最终根据已经判断过的位置个数来决定是否胜利。
    程序整体流程与三子棋类似,下面分析一下整个程序结构。
    int input;
	char mine[ROW_EXT][ROW_EXT] = {
      0 };
	char show[ROW_EXT][ROW_EXT] = {
      0 };

	srand((unsigned char)time(NULL));
	do 
	{
     
		menu();
		printf(">>> ");
		scanf("%d", &input);
		switch (input)
		{
     
		case 1:game(mine, show, ROW_EXT, COL_EXT); break;
		case 0: break;
		default:printf("input error!\n"); break;
		}
	} while (input);

程序一开始定义两个数组,其中mine数组用来埋雷,埋雷的方式是采用随机值,show数组是用来显示给用户的扫雷过程中棋盘的变换。考虑到角落和边界周围没有8个值,所以在定义数组时,要比显示给用户的棋盘多一圈,也就是上下各增加一行,左右各增加一列。

void game(char mine[ROW_EXT][COL_EXT], char show[ROW_EXT][COL_EXT], int rows, int cols)
{
     
	InitBoard(mine, rows, cols, '0');
	InitBoard(show, rows, cols, '*');
	
	DisplayBoard(show, ROW, COL);

	SetMine(mine, ROW,COL, MINE_CNT);

	while (FindMine(mine, show, ROW, COL))
	{
     
		DisplayBoard(show, ROW, COL);
	}
	
}

游戏首先初始化两个数组,将埋雷数组mine全都初始化为字符0,将显示给用户的棋盘全部初始化为*。然后显示棋盘。接着埋雷,埋雷的实现这里随机得到位于棋盘(不是棋盘最外面一圈)的坐标,然后设为字符1,这样mine数组不是0就是1,好处是在计算周围雷的个数是,可以直接利用ASCII码计算。

用户扫雷是通过查看棋盘的实况确定下一步的输入坐标。输入的坐标要和mine数组中比较,若是雷,则游戏结束,不是则继续。

源码

https://github.com/Tempest227/EasyGames

你可能感兴趣的:(编程,游戏,c语言)