一个简单的扫雷

做一个扫雷需要什么:
1份菜单

void menu()
{
	printf("***************************\n");
	printf("******  1. paly  **********\n");
	printf("******  0. exit  **********\n");
	printf("***************************\n");
}

那你是想玩还是退出呢
玩是1,退是0

void test()
{
	int input;
	srand((unsigned int)time(NULL));
	do{
		menu();
		printf("请选择\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (input);
}

一个扫雷,用二维数组的话
初始化它

void chushihua(char arr[HANGS][LIES], int hang, int lie, char set)
{
	int i, j;
	for (i = 0; i<hang; i++)
	for (j = 0; j<lie; j++)
		arr[i][j] = set;
}

顺手打印一下

void print(char arr[HANGS][LIES], int hang, int lie)
{
	int i, j;
	for (i = 0; i <= HANG; i++)
		printf("%-2d ", i);
	printf("\n");
	for (i = 1; i <= hang; i++)
	{
		printf("%-2d", i);
		for (j = 1; j <= lie; j++)
			printf(" %c ", arr[i][j]);
		printf("\n");
	}
}

放几颗雷到数组里面

void display(char arr[HANGS][LIES], int hang, int lie)
{
	int x, y;
	int i;
	for (i = 0; i<boom;)
	{
		x = rand() % hang + 1;
		y = rand() % lie + 1;
		if (arr[x][y] == '0')
		{
			arr[x][y] = '1';
			i++;
		}
	}
}

当你输入你要扫的位置时,怎么知道周围有几颗雷

int shuliang(char lei[HANGS][LIES], int x, int y)
{
	int count = 0;
	if (lei[x - 1][y - 1] == '1')
	{
		count++;
	}

	if (lei[x - 1][y ] == '1')
	{
		count++;
	}

	if (lei[x - 1][y + 1] == '1')
	{
		count++;
	}

	if (lei[x ][y - 1] == '1')
	{
		count++;
	}

	if (lei[x ][y + 1] == '1')
	{
		count++;
	}

	if (lei[x+ 1][y - 1] == '1')
	{
		count++;
	}

	if (lei[x +1][y ] == '1')
	{
		count++;
	}

	if (lei[x + 1][y + 1] == '1')
	{
		count++;
	}
	return count;
}

一颗一颗扫很累的,来直接炸开吧

void zhakai(char lei[HANGS][LIES], char show[HANGS][LIES], int i, int j)
{
	if (lei[i][j] == '0'&&i >= 0 && j >= 0 && show[i][j] == '*')
	{
		show[i][j]=shuliang(lei, i, j)+'0';
	}
	if (lei[i][j - 1] == '0'&&i >= 0 && j - 1 >= 0 && show[i][j - 1] == '*')
	{
		show[i][j - 1] = shuliang(lei, i, j - 1) + '0';
		if (shuliang(lei, i, j - 1) == 0)
		{
			zhakai(lei, show, i, j - 1);
		}
	}
	if (lei[i][j + 1] == '0'&&i >= 0 && j + 1 >= 0 && show[i][j + 1] == '*')
	{
		show[i][j + 1] = shuliang(lei, i, j + 1) + '0';
		if (shuliang(lei,  i, j + 1) == 0)
		{
			zhakai(lei, show, i, j + 1);
		}
	}
	if (lei[i - 1][j] == '0'&&i - 1 >= 0 && j >= 0 && show[i - 1][j] == '*')
	{
		show[i - 1][j] = shuliang(lei, i - 1, j) + '0';
		if (shuliang(lei,  i - 1, j) == 0)
		{
			zhakai(lei, show, i - 1, j);
		}
	}
	if (lei[i - 1][j - 1] == '0'&&i - 1 >= 0 && j - 1 >= 0 && show[i - 1][j - 1] == '*')
	{
		show[i - 1][j - 1] = shuliang(lei, i - 1, j - 1) + '0';
		if (shuliang(lei,  i - 1, j - 1) == 0)
		{
			zhakai(lei, show, i - 1, j - 1);
		}
	}
	if (lei[i - 1][j + 1] == '0'&&i - 1 >= 0 && j + 1 >= 0 && show[i - 1][j + 1] == '*')
	{
		show[i - 1][j + 1] = shuliang(lei,  i - 1, j + 1) + '0';
		if (shuliang(lei,  i - 1, j + 1) == 0)
		{
			zhakai(lei, show, i - 1, j + 1);
		}
	}
	if (lei[i + 1][j + 1] == '0'&&i + 1 >= 0 && j + 1 >= 0 && show[i + 1][j + 1] == '*')
	{
		show[i + 1][j + 1] = shuliang(lei,  i + 1, j + 1) + '0';
		if (shuliang(lei,  i + 1, j + 1) == 0)
		{
			zhakai(lei, show, i + 1, j + 1);
		}
	}
	if (lei[i + 1][j] == '0'&&i + 1 >= 0 && j >= 0 && show[i + 1][j] == '*')
	{
		show[i + 1][j] = shuliang(lei,  i + 1, j) + '0';
		if (shuliang(lei,  i + 1, j) == 0)
		{
			zhakai(lei, show, i + 1, j);
		}
	}
	if (lei[i + 1][j - 1] == '0'&&i + 1 >= 0 && j - 1 >= 0 && show[i + 1][j - 1] == '*')
	{
		show[i+1][j-1]=shuliang(lei,  i + 1, j - 1)+'0';
		if (shuliang(lei,  i + 1, j - 1) == 0)
		{
			zhakai(lei, show, i + 1, j - 1);
		}
	}
}

第一次直接死了怎么办,救你一命

void live(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie)
{
	int x, y;
	int z = 1;
	int i, j;
	while (z)
	{
		printf("请输入坐标\n");
		scanf_s("%d %d", &x, &y);
		if (x > 0 && x <= hang && y > 0 && y <= lie)
		{
			if (lei[x][y] == '1')
			{
				lei[x][y] = '0';
				zhakai(lei, show, x, y); 
				print(show, HANG, LIE);
				z = 0;
				while (1)
				{
					i = rand() % hang+1;
					j = rand() % lie+1;
					if (lei[i][j] == '0' && (i!=x || j!=y))
					{
						lei[i][j] = '1';
						print(lei, HANG, LIE);
						break;
					}
				}
			}
			else
			{
				z = 0;
				zhakai(lei, show, x, y);
				print(show, HANG, LIE);
			}
	}
	else
		printf("输入错误\n");

	}

}

举个例子,9 * 9的格,10个雷,9 * 9-10=71
当 count=71时,你就胜利了,在其他函数中使用

int tiaojian(char show[HANGS][LIES], int hang, int lie)
{
	int i, j;
	int count=0;
	for (i = 1; i <= hang;i++)
	for (j = 1; j <= lie; j++)
	{
		if (show[i][j] != '*')
			count++;
	}
	return count;
}

输入坐标,是生是死都是这个函数,加上上面的count
活着返回1,死了返回0

char play(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie)
{
	int a, b;
	live(lei, show, hang, lie);

	while (1)
	{
		printf("请输入坐标\n");
		scanf_s("%d %d", &a, &b);
		if (a > 0 && a <= hang && b > 0 && b <= lie && show[a][b] == '*')
		{

			if (lei[a][b] == '1')
			{
				return 0;
			}
			else if (lei[a][b] == '0')
			{
				zhakai(lei, show, a, b);
				print(show, HANG, LIE);
			}
		}
		else
		{
			printf("输入错误,请从新输入\n");
		}
		if (tiaojian(show, hang, lie) >= (over - boom))
		{
			break;
		}
	}
		return 1;

}

一口气调用所有函数

void test()
{
	int input;
	srand((unsigned int)time(NULL));
	do{
		menu();
		printf("请选择\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (input);
}

主函数

int main()
{
	test();
	system("pause");
	return 0;
}

再来个头文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define HANG 9
#define LIE 9

#define HANGS HANG+2
#define LIES LIE+2

#define boom 13

void print(char arr[HANGS][LIES], int hang, int lie);
void chushihua(char arr[HANGS][LIES], int hang, int lie, int set);
void display(char arr[HANGS][LIES], int hang, int lie);
int shuliang(char lei[HANGS][LIES], int x, int y);
void live(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie);
void zhakai(char lei[HANGS][LIES], char show[HANGS][LIES], int x, int y);
int tiaojian(char show[HANG][LIE], int hang, int lie);
char play(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie);
void shu(char lei[HANGS][LIES], char show[HANGS][LIES], int x, int y);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值