未完成地雷标记、盲区计数等。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
void xuhuan(int (*a)[100],int p,int q,int select1);
void main()
{
int select1=0;
int select2=0;
int n1=0;
// system("clear");
printf("选择尺寸\n");
scanf("%d",&select1);
// system("clear");
printf("选择难度\n");
printf("1.简单\n");
printf("2.中等\n");
printf("3.很难\n");
scanf("%d",&select2);
switch(select2)
{
case 1:
n1=5;
break;
case 2:
n1=4;
break;
case 3:
n1=3;
break;
}
int a[100][100]={0};
int i=0;
int j=0;
srand((unsigned)time(NULL));
for(i=0;i<=select1-1;i++)
{
for(j=0;j<=select1-1;j++)
{
a[i][j]=rand()%n1;
if(a[i][j]!=0)
{
a[i][j]=0;
}
else if(a[i][j]==0)
{
a[i][j]=-1;
}
}
}
for(i=0;i<=select1-1;i++)
{
for(j=0;j<=select1-1;j++)
{
// printf("%3d ",a[i][j]);
}
printf("\n");
}
int m=-1;
int n=-1;
for(i=0;i<=select1-1;i++)
{
for(j=0;j<=select1-1;j++)
{
for(m=-1;m<=1;m++)
{
if(a[i][j]==-1)
continue;
for(n=-1;n<=1;n++)
{
if(i+m<0||j+n<0||i+m>select1-1||j+n>select1-1||(m==0&&n==0))
continue;
if(a[i+m][j+n]==-1)
a[i][j]++;
}
}
}
}
printf("\n");
for(i=0;i<=select1-1;i++)
{
for(j=0;j<=select1-1;j++)
{
// printf(" * ");
// printf("%3d ",a[i][j]);
}
printf("\n");
}
int p;
int q;
while(1)
{
scanf("%d%d",&p,&q);
system("clear");
if(a[p-1][q-1]==-1)
{
printf("碰到地雷了啊!\n");
return;
}
xuhuan(a,p-1,q-1,select1);
}
}
void xuhuan(int (*a)[100],int p,int q,int select1)
{
static int c[100][2]={0};
static int b=0;
int i1;
int j1;
int m1=0;
//printf("\n\n%d %d %d\n\n",b,p,q);
for(i1=0;i1<=select1-1;i1++)
{
for(j1=0;j1<=select1-1;j1++)
{
if(a[i1][j1]==-1)
m1++;
}
}
//printf("%d %d\n\n",b,(select1*select1-m1-1));
if(b==(select1*select1-m1))
{
printf("已过关\n");
exit(0);
}
// a[b][0]=p;
// a[b][1]=q;
int i;
int j;
int m;
for(m=0;m<=b-1;m++)
{
if(c[m][0]==p&&c[m][1]==q)
{
break;
}
}
if(c[m][0]==p&&c[m][1]==q&&m<=b-1)//b--是为了防止重复计数 m<=b-1是为了防止取p=0q=0
{ //时重复计数。
b--;
}
else
{
c[b][0]=p;
c[b][1]=q;
}
for(i=0;i<=select1-1;i++)
{
for(j=0;j<=select1-1;j++)
{
//static int v=1;
for(m=0;m<=b;m++)
{
if(i==c[m][0]&&j==c[m][1])
{
printf("%2d ",a[i][j]/*,v,i,j*/);
// v++;
// printf("2\n");
break;
}
}
if(i==0&&j==0&&m<=b)
{
continue;
}
if(i==0&&j==0&&m==b+1)
{
}
//printf("\n\n%d %d %d\n\n",m,b,j);
else if(i==c[m][0]&&j==c[m][1])//这里,因为m++ m=1 而c[m][0] c[m][1]
{ //都为1,符合条件而跳出此次循环。
//printf("3\n");
continue;
}
// if(i==p-1&&j==q-1)
// {
// printf("%2d ",a[i][j]);
// continue;
// }
// printf("4\n");
// printf(" *%d %d %d ",v,i,j);
// v++;
// printf("%3d ",a[i][j]);
printf(" * ");
}
printf("\n");
}
b++;
}
网友评论