美文网首页
扫雷beta0.1

扫雷beta0.1

作者: b6aed1af4328 | 来源:发表于2016-11-07 19:58 被阅读11次

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

    #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++;
    }
    

    相关文章

      网友评论

          本文标题:扫雷beta0.1

          本文链接:https://www.haomeiwen.com/subject/xpwouttx.html