荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: oopilix (优雅的), 信区: Visual
标  题: [vc]扫雷核代码简化
发信站: 荔园晨风BBS站 (Thu Jul 31 12:50:21 2003), 站内信件

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
struct bomb
{
                int nisBomb;
                int nisChecked;
            int nBombBeside;//如果本身是雷,其值为-1,表示不能点开

};
int SetRandArray(int a[],int nCountofBomb,int nCount )
{
        int i=0,nrand;   //看看a[]里面有没有,没的话增加,有的话从新rand一次
        srand(time(NULL));
        nrand=rand()%nCount;
        if(nCountofBomb>=1)
        {
                SetRandArray(a,nCountofBomb-1,nCount);
                for(i=0;i<nCountofBomb-1;i++)
                {
                    while(nrand==a[i])
                        nrand=rand()%nCount;
                }
                a[nCountofBomb-1]=nrand;
                return 0;
        }
   return 0;
}
int SetBomb(struct bomb *Bombs,int a[],int len)
{
        int i=0,t;
        for(i=0;i<len;i++)
        {
         t=a[i];
                 (Bombs+t)->nisBomb=1;
        }
        return 0;
}
int SetBombBoard(struct bomb *Bombs ,int i/* current Row*/,int j,int m/*max
Row*/,int n) //i是当前行
{
        int a,b,s=0;
    if(m==i)
                return 0;
        for(a=((i-1)>0?(i-1):0);a<=((i+1)<m?(i+1):(m-1));a++)
                for(b=((j-1)>0?(j-1):0);b<=((j+1)<n?(j+1):(n-1));b++)
                        Bombs[i*m+j].nBombBeside+=Bombs[a*m+b].nisBomb;
        if(1==Bombs[i*m+j].nisBomb)
                Bombs[i*m+j].nBombBeside=-1;
        if(n-1==j)
                SetBombBoard(Bombs,i+1,0,m,n);
        else
                SetBombBoard(Bombs,i,j+1,m,n);
 return 0;
}
int main()
{
        int m=4,n=4,i,j;
        int *a;
        a=(int *)malloc(sizeof(int)*m);
        SetRandArray(a,m,m*n);
    for(i=0;i<m;i++)
                printf("%d\n",a[i]);
        struct bomb *Bombs;

        Bombs=(struct bomb *)malloc(sizeof(struct bomb)*m*n);
    memset(Bombs,0,m*n*sizeof(bomb));
    SetBomb(Bombs,a,m);
    for(i=0;i<m;i++)
    {
           for(j=0;j<n;j++)
           {
                   printf("%2d",Bombs[m*i+j].nisBomb);
           }
           printf("\n");
    }
    printf("==========================\n");
        SetBombBoard(Bombs,0,0,m,n);
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        printf("%2d",(Bombs+m*i+j)->nBombBeside);


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店