c语言简单版扫雷游戏(挺有意思的)

这个程序需要采用C语言中的rand()函数,但是呢,直接用rand函数是不行的。原因看下图:
在这里插入图片描述
无论执行了多少次,结果都是这个数,但这并不是我们想要的结果,所以我们需要用上srand函数。

srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);
srand和rand()配合使用产生伪随机数序列。
所以我们函数的布置地雷的函数为

void makebomb()//布置地雷的函数
{
	srand((int)time(0));//随机数种子
	int i,j;
	while(count>0)//count是你设置的地雷数目
	{
		int x=(rand()%(9-1+1))+1;
		/*随机产生地雷*/
		int y=(rand()%(9-1+1))+1;
		if(disbomb[x][y]!=1)
		{
			disbomb[x][y]=1;
			count--;//地雷数目减少一
		}
	}
}

然后另一个比较难的地方是怎么判断周围八个格雷的个数

int countbomb(int x,int y)//根据x和y找到相应的坐标
{
	int countbomb=0;
	if(disbomb[x-1][y-1]&&disbomb[x-1][y-1]==1)
		countbomb++;
	if(disbomb[x-1][y]&&disbomb[x-1][y]==1)
		countbomb++;
	if(disbomb[x-1][y+1]&&disbomb[x-1][y+1]==1)
		countbomb++;
	if(disbomb[x][y-1]&&disbomb[x][y-1]==1)
		countbomb++;
	if(disbomb[x][y+1]&&disbomb[x][y+1]==1)
		countbomb++;
	if(disbomb[x+1][y-1]&&disbomb[x+1][y-1]==1)
		countbomb++;
	if(disbomb[x+1][y]&&disbomb[x+1][y]==1)
		countbomb++;
	if(disbomb[x+1][y+1]&&disbomb[x+1][y+1]==1)
		countbomb++;

	a[x][y]=countbomb;
	return countbomb;
}

总的程序代码如下:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int count=10;
int flag=1;
int disbomb[10][10];//展示雷的数组
int a[10][10];//显示数组

void printbomb();//打印函数
void gameover();//游戏结束后打印出来
int countbomb(int x,int y);//统计雷的个数
void makebomb();//布置雷的函数
void printbomb()
{
	int i,j;
	for(i=1;i<10;i++)
	{
		for(j=1;j<10;j++)
			printf("%d",a[i][j]);
		printf("\n");
	}
}
void gameover()
{
	int i,j;
	for(i=1;i<10;i++)
	{
		for(j=1;j<10;j++)
		{
			printf("%d ",disbomb[i][j]);
		}
		printf("\n");
	}
}
int main(void)
{
	int x,y;
	int i,j;
	printf("**********\n");
	for(i=1;i<10;i++)
	{
		for(j=1;j<10;j++)
		{
			disbomb[i][j]=0;
			printf("%d ",disbomb[i][j]);
		}
		printf("\n");
	}
	makebomb();
	while(flag)
	{
		printf("请输入x和y:\n");
		scanf("%d %d",&x,&y);
		if(disbomb[x][y]==0)
		{
			countbomb(x,y);
			printbomb();
		}
		else
		{
			printf("sorry,gameover");
			gameover();
			flag=-1;
			break;
		}
	}
	return 0;
}
void makebomb()
{
	srand((int)time(0));
	while(count>0)
	{
		int x=(rand()%(9-1+1))+1;
		int y=(rand()%(9-1+1))+1;
		if(disbomb[x][y]!=1)
		{
			disbomb[x][y]=1;
			count--;
		}
	}
}
int countbomb(int x,int y)//根据x和y找到相应的坐标
{
	int countbomb=0;
	if(disbomb[x-1][y-1]&&disbomb[x-1][y-1]==1)
		countbomb++;
	if(disbomb[x-1][y]&&disbomb[x-1][y]==1)
		countbomb++;
	if(disbomb[x-1][y+1]&&disbomb[x-1][y+1]==1)
		countbomb++;
	if(disbomb[x][y-1]&&disbomb[x][y-1]==1)
		countbomb++;
	if(disbomb[x][y+1]&&disbomb[x][y+1]==1)
		countbomb++;
	if(disbomb[x+1][y-1]&&disbomb[x+1][y-1]==1)
		countbomb++;
	if(disbomb[x+1][y]&&disbomb[x+1][y]==1)
		countbomb++;
	if(disbomb[x+1][y+1]&&disbomb[x+1][y+1]==1)
		countbomb++;

	a[x][y]=countbomb;
	return countbomb;
}

程序执行窗口如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值