扫雷简易版-创新互联

用C语言实现扫雷这样的小游戏,本身逻辑并不复杂,大体上来说就是布置雷和排除雷。因此在用代码实现的时候,一定要注意每个代码的可行性以及语法问题。

在阿坝州等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、网站建设 网站设计制作定制开发,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,外贸网站建设,阿坝州网站建设费用合理。

首先,该游戏需要运用到多个函数,可以创建两个源文件test.c和game.c,分别用来实现游戏运行逻辑和函数定义。为了让test.c可以使用game.c中的函数定义,还需要再头文件中创建game.h实现函数声明。

先来看看函数声明,了解本次制作的大致思路:

#define _CRT_SECURE_NO_WARNINGS 1
#include#include#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINE 10
//初始化棋盘
void init(char board[ROWS][COLS], int row, int col, char i);
//打印棋盘
void print(char show[ROWS][COLS], int row, int col);
//布置地雷
void Putmine(char mine[ROWS][COLS], int row, int col);
//排除地雷
void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col);
//获取周围地雷信息
int Getmine(char mine[ROWS][COLS],char show[ROWS][COLS], int x, int y);

其中的ROWS与COLS是为了获得一个11*11的棋盘,而本次玩家所能使用的扫雷棋盘为9*9(目的是为了后续获取周围地雷信息更加方便,不会发生数组越界的错误)

大体思路如上,现在来看看test.c中的主函数部分:

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
#includeint main()
{
	test();
	return 0;
}

再看看test():

void test()
{
	menu();
	int input = 0;
	do
	{
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("输入非法,请选择玩或不玩\n");
		}
	} while (input);
}

因为只是调用test函数,所以不需要test返回值,直接用void即可

接下来看看游戏逻辑Game()部分:

void Game()
{
	char mine[ROWS][COLS] = { 0 };
	char show[ROWS][COLS] = { 0 };
	init(mine, ROWS, COLS, '0');
	init(show, ROWS, COLS, '#');
	print(show, ROW, COL);//打印棋盘
	Putmine(mine, ROW, COL);//布置地雷
	//print(mine, ROW, COL);//用来测试游戏的透视版本
	Findmine(mine,show, ROW, COL);//排除地雷
}

首先创建两个二维数组,一个用来布置地雷,另一个则给玩家游玩

里面的init函数 print函数 Putmine函数 Findmine函数分别对应

初始化棋盘 打印棋盘 放置地雷 扫除地雷

1.初始化棋盘:

void init(char board[ROWS][COLS], int rows, int cols, char ret)
{
	for (int i = 0; i< rows; i++)
	{
		for (int j = 0; j< cols; j++)
		{
			board[i][j] = ret;
		}
	}
}

我们将mine棋盘全部初始化为字符0(‘0’),show棋盘全部初始化为字符#(‘#’)

2.打印棋盘:

void print(char show[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("---------扫雷----------\n");
	for (j = 0; j<= col; j++)
	{
		printf("%d ", j);
	}
	printf("\n");
	for (i = 1; i<= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j<= col; j++)
		{
			printf("%c ", show[i][j]);
		}
		printf("\n");
	}
	printf("---------扫雷----------\n");
}

需要注意的是,每次调用棋盘都是用的mine/show[ROWS][COLS],而不是mine/show[ROWS][COLS]!并且为了让玩家玩到9*9的棋盘,我们要在11*11的初始化棋盘里打印出9*9的棋盘给玩家游玩

3.放置地雷:

void Putmine(char mine[ROWS][COLS], int row, int col)
{
	int count = MINE;
	srand((unsigned int)time(NULL));
	while (count >0)
	{
		int x = rand() % 9 + 1;
		int y = rand() % 9 + 1;
		if (mine[x][y] != '1')
		{
			mine[x][y] = '1';
		}
		else if (mine[x][y] == '1')
		{
			continue;
		}
		count--;
	}
}

我们让mine中每一个地雷为字符1(‘1’),当随机值放置的地雷与原先地雷重合时,则用continue函数重新返回布置

4.扫除地雷:

void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col)
{
	int win = 0;
	while (win< ROW * COL - MINE)
	{
	int x = 0;
	int y = 0;
	scanf("%d %d", &x, &y);
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{
			if (mine[x][y] == '0'&&show[x][y] == '#')
			{
				int n = Getmine(mine, show, x, y);
				show[x][y] = n + '0';
				print(show, ROW, COL);
				win++;
			}
			else if (show[x][y] == '0')
			{
				printf("该坐标已被排除,请重新选择坐标\n");
				continue;
			}
			else if (mine[x][y] == '1')
			{
				printf("砰!很遗憾,游戏结束\n");
				print(mine, ROW, COL);
				break;
			}
		}
	}
}

其中获取周围地雷信息的Getmine函数如下:

int Getmine(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)
{
	return (mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y - 1] + mine[x][y + 1]) - 8 * '0';
}

注意这里用的是int整形来存储Getmine的值。当Getmine的值返回后,通过 数字+‘0’ = ‘数字’(字符数字)的方式,将周围地雷的信息存储于show棋盘上。

最后,让程序运行,简易版的扫雷即完成了。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:扫雷简易版-创新互联
URL标题:http://cdiso.cn/article/dhcies.html

其他资讯