C语言实现简易扫雷

本文介绍了一个简单的扫雷游戏的实现过程,通过C语言编程,使用两个二维数组分别作为隐藏炸弹和显示界面,利用随机数生成炸弹位置。游戏包括初始化、放置炸弹、用户交互和计数判断等功能,帮助理解基本的游戏逻辑和编程技巧。
摘要由CSDN通过智能技术生成

做这样一个的小游戏我们要搞清楚他的原理,分析要写成几个步骤来进行实现,就像是我们玩的扫雷一样,我们选择一个区域就会显示附近区域有几个地雷,当然我们平常玩的是如果周围为零就会扩大范围,我今天写的仅仅是点一下出这个周围有几个炸弹,比较简单。

先放代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
char arr[11][11] = { 0 };
char ar[11][11] = { 0 };
void oo(char arr[11][11],int x,int y)
{
	int i, j;
	for (i = 0; i < x; i++)
	{
		arr[0][i] = i+48;
	}
	for (i = 0; i < y; i++)
	{
		arr[i][0] = i+48;
	}
	for (i = 1; i < x; i++)
	{
		for (j = 1; j < y; j++)
		{
			arr[i][j] = '*';
		}
	}
}
void op(char ar[9][9], int x, int y)
{
	int count = 10;
	while (count)
	{
		srand(time(NULL));//生成随机数  
		int a = rand() % 9+1;
		int b = rand() % 9+1;
		if (ar[a][b] == '0')
		{
			count--;
			ar[a][b] = '1';
		}
	}
}
void print(char arr[11][11],int x,int y)
{
	int i, j;
	for (i = 0; i < x; i++)
	{
		for (j = 0;j < y; j++)
		{
			printf("%c", arr[i][j]);
		}
		printf("\n");
	}
}
void oop(char ar[11][11], int x, int y)
{
	int i, j;
	for (i = 0; i < x+2; i++)
	{
		for (j = 0; j < y+2; j++)
		{
			ar[i][j] = '0';
		}
	}
}
void bianhuan(char arr[11][11], char ar[11][11], int a, int b)
{
	arr[a][b] =48+ ar[a][b - 1] + ar[a + 1][b - 1] + ar[a - 1][b] + ar[a + 1][b] + ar[a + 1][b + 1] + ar[a][b + 1] + ar[a - 1][b - 1] + ar[a - 1][b + 1]-8*48;
}
void game(char arr[11][11], char ar[11][11], int x, int y)
{
	int a, b,count=71;
	while(count)
	{
		printf("\n请输入你猜的坐标:\n");
		scanf("%d %d", &a, &b);
		if (a <= 9 && b <= 9 && a > 0 && b > 0)
		{
			if (ar[a][b] == '1')
			{
				printf("你被炸死了\n");
				break;
			}
			else
			{
				bianhuan(arr, ar, a, b);
				count--;
			}
			print(arr, 10, 10);
		}
		else
		{
			printf("坐标非法请重新输入");
		}
	}
}
int main()
{
	int n;
	do
	{
		printf("******************\n");
		printf("****1>开始游戏****\n");
		printf("****0<退出游戏****\n");
		printf("******************\n");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			printf("游戏开始\n");
			oo(arr,10,10);//初始化
			oop(ar, 9, 9);
			op(ar, 9, 9);//生成炸弹
			print(arr,10,10);
			print(ar, 11, 11);
			game(arr,ar, 10, 10);
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (n);
	return 0;
}

游戏界面

根据自己喜好做一个开始的界面

do
	{
		printf("******************\n");
		printf("****1>开始游戏****\n");
		printf("****0<退出游戏****\n");
		printf("******************\n");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			printf("游戏开始\n");
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (n);

游戏本体

在开始做之前我么要想一下一个这样的扫雷,是如何保存的,例如一个9*9的对应我们c语言中我们很容易联想到的是数组,我们就做一个二维数组来进行保存,就是一个我们要在上面放炸弹,还要进行计数,再进行打印,这样一想发现这个棋盘怎么也不够用,我们需要再搞一个棋盘,进行功能分配,一个作为暗中的棋盘进行放炸弹,判断炸弹,一个进行打印,好了可以了。(在判断的时候我们是判断这个棋子周围的炸弹如果在边界我们可能出现判断错误所以我们需要把数组高的大一点)

初始化棋盘

一个我们采用1 0来进行判断是否为炸弹所以一个全是0,一个用*和0到9进行布盘

	oo(arr,10,10);//初始化
			oop(ar, 9, 9);
void oo(char arr[11][11],int x,int y)
{
	int i, j;
	for (i = 0; i < x; i++)
	{
		arr[0][i] = i+48;
	}
	for (i = 0; i < y; i++)
	{
		arr[i][0] = i+48;
	}
	for (i = 1; i < x; i++)
	{
		for (j = 1; j < y; j++)
		{
			arr[i][j] = '*';
		}
	}
}
void oop(char ar[11][11], int x, int y)
{
	int i, j;
	for (i = 0; i < x+2; i++)
	{
		for (j = 0; j < y+2; j++)
		{
			ar[i][j] = '0';
		}
	}
}

(这个是我放玩炸弹的样子)

放炸弹

 我们防炸单讲究就是一个随机,我们想到随机数取余来实现

op(ar, 9, 9);//生成炸弹
void op(char ar[9][9], int x, int y)
{
	int count = 10;
	while (count)
	{
		srand(time(NULL));//生成随机数  
		int a = rand() % 9+1;
		int b = rand() % 9+1;
		if (ar[a][b] == '0')
		{
			count--;
			ar[a][b] = '1';
		}
	}
}

这样我们的前置工作就搞完了,我们到了我们开始选坐标的阶段了

开始扫雷

其中我们要判断坐标是否非法,以及你是否炸死

void game(char arr[11][11], char ar[11][11], int x, int y)
{
	int a, b,count=71;
	while(count)
	{
		printf("\n请输入你猜的坐标:\n");
		scanf("%d %d", &a, &b);
		if (a <= 9 && b <= 9 && a > 0 && b > 0)
		{
			if (ar[a][b] == '1')
			{
				printf("你被炸死了\n");
				break;
			}
			else
			{
				bianhuan(arr, ar, a, b);
				count--;
			}
			print(arr, 10, 10);
		}
		else
		{
			printf("坐标非法请重新输入");
		}
	}
}

判断几个炸弹

我们可以选用很多方法这里,我选用的是将周围八个加起来减去8个字符零在加上0与字符零这种的差值48实现将*转换为1 2  3等

void bianhuan(char arr[11][11], char ar[11][11], int a, int b)
{
	arr[a][b] =48+ ar[a][b - 1] + ar[a + 1][b - 1] + ar[a - 1][b] + ar[a + 1][b] + ar[a + 1][b + 1] + ar[a][b + 1] + ar[a - 1][b - 1] + ar[a - 1][b + 1]-8*48;
}

这样大致结束了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值