栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

扫雷小游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

扫雷小游戏

扫雷游戏是基于学习C语言二维数组之后的一个练习项目

在扫雷游戏开始之前,我们首先要了解扫雷的逻辑,游戏原理以及玩法。当我们点开一个格子后,这个格子显示的是几,就代表着这个格子周围的八个格子中有几个雷,当然 这个数字不会大于八的。

但是我们写的扫雷游戏,我们的基本思路是这样子的

1.在这个游戏开始的时候需要一系列的选择,这时候我们创建一个 menu函数,用来打印我们的菜单,从而使我么可以进入游戏

2.我么的游戏都是会在一个game.c的文件里面保存,

        1>首先我么需要创建两个二维数组,一个用来存放布置好雷的信息(mine),一个用来存放排查出来雷的信息(show)

        2>接下来我们需要初始化棋盘 这个时候我么mine数组里面应该初识化为'0',show数组里应初始化为'*'

void init_board(char arr[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			arr[i][j] = set;
		}
	}
}

3>接下来我们需要做一个将这个棋盘打印出来的函数,但是这个时候我们并不需要将mine其盘打印出来,那看到了雷我么游戏就没有玩的bi'yao'le

void show_board(char arr[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 ", arr[i][j]);
		}
		printf("n");
	}
	printf("------------扫雷------------n");

}

4>接下来我们应该在这个mine数组里面来布置我们的雷,当然这些雷都是随机排列的,

void set_mine(char mine[ROWS][COLS], int row, int col)
{
	int count = EASY_COUNT;
	int x = 0;
	int y = 0;
	while (count)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';//布置雷
			count--;
		}
	}
}

5>接下来我们需要开始排查雷了

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';
}

void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while (win < row * col - EASY_COUNT)
	{
		printf("请输入要排查的坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (mine[x][y] == '1')
			{
				printf("很遗憾,被炸死了n");
				show_board(mine, ROW, COL);
				break;
			}
			else
			{
				int count = get_mine_count(mine, x, y);
				show[x][y] = count + '0';
				show_board(show, ROW, COL);
				win++;
			}
		}
		else
		{
			printf("坐标非法,重新输入n");
		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("恭喜你,排雷成功n");
		show_board(mine, ROW, COL);
	}
}

这个排查雷的过程中当我么们排查到雷的时候就需要提示我们被炸死了,因此打印出来棋盘,break跳出循环,这个游戏结束、

这个就是我们简单的一个扫雷的游戏,这还需要很多优化的地方   具体的详细代码liar/C++ - Gitee.comhttps://gitee.com/liarbt/test/tree/master/%E6%89%AB%E9%9B%B7

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号