这个程序需要采用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;
}
程序执行窗口如下: