扫雷beta0.1

2016-11-07  本文已影响11人  b6aed1af4328

未完成地雷标记、盲区计数等。

#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++;
}
上一篇下一篇

猜你喜欢

热点阅读