扫雷1.0

目录

一.规则介绍

二.基本思路

三.代码实现


一.规则介绍

扫雷是一个经典的游戏,一张棋盘中有许多不确定是雷还是安全区域的格子,当点击之后若没雷则会在该区域显示周围八个格子雷瑟数目,若踩雷则游戏结束。

二.基本思路

1.创建菜单

2.用二维数组来创建mine 和show棋盘

3.初始化棋盘

4.玩家输入坐标

5.判定游戏是否结束若没有则在刚输入坐标的区域,显示周围八个区域的地雷数并继续游戏

以此类推,直至游戏结束。

三.代码实现

先贴main()函数

扫雷1.0_第1张图片

 所有的代码实现都放在test()函数里

1.创建菜单

扫雷1.0_第2张图片

 与玩家进行交互

扫雷1.0_第3张图片

 运行截图:

扫雷1.0_第4张图片

 当输入数字为零时退出游戏,同时跳出循环,当输入数字为1时,进入game()函数,实现游戏,当为其他数字时,提示输入错误,并不会退出循环。

2.创建棋盘

mineboard  用于实现扫雷相关代码

showboard 用于显示

 这里有预处理数据

 扫雷1.0_第5张图片

 mineboard 比最终打印出的棋盘大一圈,有利于最终计算所选区域附近八个位置的雷的个数,还能够防止数组越界访问

2.初始化棋盘

 扫雷1.0_第6张图片

 mineboard将打印11x11个字符’0‘

showboard将打印9x9个字符’*‘

3.打印棋盘

扫雷1.0_第7张图片

 4.设置雷盘

预处理 easy_type 10 表示最多有10颗雷,用’1‘表示

扫雷1.0_第8张图片

 5.找雷

扫雷1.0_第9张图片 6.计算board[x][y]周围8个位置上的雷的个数

扫雷1.0_第10张图片

 返回值将会被get_mine_count 函数接收,并通过Didplay 函数打印在屏幕上。

7.判断输赢

如果不小心点到雷被炸死,游戏直接结束。

如果找到除10个雷以外的所有区域还没被炸死,则游戏结束,玩家胜利。

扫雷1.0_第11张图片

 至于界面封装,点一个显示一片的代码后面还会添加

扫雷1.0版本所有代码

test.c

扫雷1.0_第12张图片

扫雷1.0_第13张图片

 game.h

扫雷1.0_第14张图片

game.c

#include"game.h"
//初始化棋盘
void Initboard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0, j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

void Display(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	//标行
	for (i = 0; i <= col; i++)
	{
		printf("%d ", i);//标列
	}
	printf("\n");
	for (int i = 0; i <= row; i++)
	{
		for (i = 1; i <= row; i++)
		{
			printf("%d ", i);
			for (j = 1; j <= col; j++)
			{
				printf("%c ", board[i][j]);
			}
			printf("\n");
		}
		printf("\n");
	}
}
//设置雷盘
void Setboard(char mine[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = easy_type;//设置雷数
	while (count)
	{
		x = rand() % row + 1;//生成1~10的随机数
		y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';//用‘1’代表雷
			count--;
		}
		
	}
}
//标记雷数

static int get_mine_count(char board[ROWS][COLS], int x, int y)
{
	return board[x-1][y-1] + board[x-1][y] +
		board[x-1][y+1] + board[x-1][y] + 
		board[x+1][y] + board[x][y+1] +
		board[x][y-1] + board[x+1][y+1]
		- 8 * '0';
}

//找雷
void Findset(char board[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	//循环,找到不是雷的坐标前,不被雷炸死
	while (win");
		scanf("%d %d", &x, &y);
		if (x >= 1 && y >= 1 && x <= row && y <= col)//判断输入的x,y是否合法
		{
			if (board[x][y] == '1')
			{
				printf("恭喜你,游戏结束,你成为了烈士\n");
				break;//结束循环,游戏结束了
			}
			else
			{
				//计算board[x][y]周围8个位置的雷个数
				int n = get_mine_count(board, x, y);
				//将这个数显示在board[x][y]上
				show[x][y] = n + '0';//board为char型
				Display(show, row, col);
				win++;//找到不是雷的坐标后++
			}
		}
		else
			printf("输入坐标非法,请重新输入\n");
	}
	if (win == ROW * COL - easy_type)
	{
		printf("恭喜你完成挑战,获得“英雄”称号\n");
		//打印完成后的棋盘
		Display(board, ROW, COL);
	}

}

你可能感兴趣的:(c++)