当前位置:   article > 正文

C语言小项目——扫雷(基础版)

C语言小项目——扫雷(基础版)

前言

扫雷游戏是C语言初学者都需要练习的一个小项目,本文所实现的扫雷为最基础的版本(即一次只能扫一格),实际的扫雷游戏会有一种功能:在玩家点击格子的时候会向外展开,直到即将遇到雷为止。本文目前暂无实现这一功能。

代码详解

一、主函数

int main()
{
   
	int i = 0;
	srand((unsigned int)time(NULL));
	do
	{
   
		menu();//打印菜单
		scanf("%d", &i);
		switch (i)
		{
   
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (i);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

1、srand((unsigned int)time(NULL))

为随机数生成器,后续布置雷的时候需要利用到rand()函数。

2、do-while循环

用于玩家多次游玩,直到玩家选择游戏结束,则终止循环。
menu()函数为菜单函数,用于打印简易菜单供玩家选择。

void menu()
{
   
	printf("*************************\n");
	printf("****** 1、开始游戏 ******\n");
	printf("****** 0、结束游戏 ******\n");
	printf("*************************\n");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运用switch-case函数,若玩家输入"1",则开始游戏;若玩家输入"0",则游戏结束,同时循环中止;若玩家输入其他数字,则会提示玩家并让玩家重新输入,直到输入的数字为"0"或者"1"为止。

二、游戏实现函数

本扫雷游戏的实现依靠两个二维数组:mine数组用于系统随机布置雷,show数组展现给玩家,供玩家进行排雷。当除了雷以外的格子都被玩家选中之后,玩家获得胜利。

void game()
{
   
	//初始化
	char mine[ROWS][COLS] = {
    0 };//存放布置雷的信息
	char show[ROWS][COLS] = {
    0 };//存放玩家操作的信息
	//初始化布置雷界面
	Init_board(mine, ROWS, COLS, '0');
	//初始化玩家操作界面
	Init_board(show, ROWS, COLS, '*');
	//随机生成雷
	Mine_set(mine, ROW, COL);
	//打印扫雷界面
	Display_board(show, ROW, COL);
	//排雷
	Mine_sweep(mine, show, ROW, COL);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

1、char mine[ROWS][COLS] = { 0 },char show[ROWS][COLS] = { 0 }

用于创建并初始化二维数组,作为扫雷的界面
本项目采用9*9的格子,为了便于日后的修改,此处采用了define ROW和COL的方式。
除了ROW和COL之外,额外定义了ROWS和COLS这两个变量名。玩家在扫雷的时候,若没有选到雷,被选中的格子会显示周围雷的个数,但边界处的格子在计算时会有一部分的格子在边界外,如果不加以处理的话不利于之后的计算。因此,本项目选择额外在最外围加了一圈,这样的即便是边界处也可以计算周围的雷的个数。

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2
  • 1
  • 2
  • 3
  • 4
  • 5

2、void Init_board(char board[ROWS][COLS], int row, int col, char set)

该函数声明为扫雷界面初始化函数声明,将mine初始化为字符’0’,show初始化为’*'(此处通过建立char类型的变量set,赋予set不同的值,可以将界面初始化为任何字符,避免了需要建立两个函数分别初始化mine和show

void Init_board(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;
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3、Mine_set(mine, ROW, COL)

该函数用于随机生成雷。利用count计数,若该处未布置雷,则放置字符’1’代表雷(此处放置’1’便于之后的计算周围雷的个数),count相应减1。


                
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/1009132
推荐阅读
相关标签
  

闽ICP备14008679号