五子棋C原码 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

   

    /*turboc2.0下编译通过*/

    #include

    #include

    #include

    #include

    #define N 15

    #define B 7

    #define STOP -10000

    #define OK 1

    #define NO 0

    #define UP 328

    #define DOWN 336

    #define LEFT 331

    #define RIGHT 333

    /*定义了两个数,n为棋盘的大小,

五子棋C原码

。b为背景颜色的数值*/

    int a[N+1][N+1];

    int zx,zy;

    int write=1,biaoji=0;

    struct zn{

    long sum;

    int y;

    int x;

    }w[N+1][N+1],max,max1;

    void cbar(int i,int x,int y,int r);

    void map(int a[][]);

    int getkey();

    int key();

    void zuobiao(int x,int y,int i);

    int tu(int a[][],int write);

    int wtu(int a[][],int write);

    int zhineng(int a[][]);

    int zh5(int y,int x,int a[][]);

    long zzh5(int b[][],int i);

    main()

    {

    int i,j;

    int gdriver=DETECT;

    int gmode;

    initgraph(&gdriver,&gmode,);

    zx=(N+1)/2;

    zy=(N+1)/2;

    for(i=1;i<=N;i++)

    for(j=1;j<=N;j++)

    a[i][j]=0;

    map(a);

    i=1;

    while(i)

    {

    int k,n;

    k=wtu(a,write);

    if(k==STOP) goto end;

    map(a);

    n=zhineng(a);

    if(n==STOP) goto end;

    map(a);

    }

    end:

    ;

    }

    /* 实现对局的程序 ,计算全部N*N个格中,最应该填的格子 */

    int zhineng(int a[N+1][N+1])

    {

    int i,j;

    int k;

    max.sum=-1;

    for(i=0;i<=N;i++)

    for(j=0;j<+N;j++)

    {

    w[i][j].sum=0;

    w[i][j].x=i;

    w[i][j].y=j;

    }

    for(i=1;i<=N-4;i++)

    for(j=1;j<=N-4;j++)

    {

    k=zh5(i,j,a);

    if(k==STOP) return (STOP);

    }

    for(i=1;i<=N;i++)

    for(j=1;j<=N;j++)

    {

    if(max.sum {

    max.sum=w[i][j].sum;

    max.y=i;

    max.x=j;

    }

    else if(max.sum==w[i][j].sum)

    {

    if(((max.y-zy)*(max.y-zy)+(max.x-zx)*(max.x-zx))>((i-zy)*(i-zy)+(j-zx)*(j-zx)))

    max.sum=w[i][j].sum;

    max.y=i;

    max.x=j;

    }

    }

    if(a[max.y][max.x]==0)

    {

    a[max.y][max.x]=-1;

    zy=max.y;

    zx=max.x;

    }

    }

    /* 转换成5*5的数组,计算出在二十五个格子中,最应该填的格 */

    int zh5(int y,int x,int a[N+1][N+1])

    {

    int i,j;

    int b[6][6];

    long c[13];

    long d[6][6];

    long temp;

    for(i=y;i<=y+4;i++)

    for(j=x;j<=x+4;j++)

    b[i+1-y][j+1-x]=a[i][j];

    c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];

    c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];

    c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];

    c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];

    c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];

    c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];

    c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];

    c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];

    c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];

    c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];

    c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];

    c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];

    for(i=1;i<=12;i++)

    {

    switch(c[i])

    {

    case 5:biaoji=1;return(STOP);

    case -5:biaoji=-1;return(STOP);

    case -4:c[i]=100000;break;

    case 4:c[i]=100000;break;

    case -3:c[i]=150;break;

    case 3:c[i]=150;break;

    case -2:c[i]=120;break;

    case 2:c[i]=100;break;

    case -1:c[i]=1;break;

    case 1:c[i]=1;break;

    default: c[i]=0;

    }

    }

    for(i=1;i<=12;i++)

    {

    if(c[i]==150)

    c[i]+=zzh5(b,i);

    }

    for(i=1;i<=5;i++)

    for(j=1;j<=5;j++)

    d[i][j]=0;

    for(i=1;i<=5;i++)

    for(j=1;j<=5;j++)

    {

    if(i==j) d[i][j]+=c[11];

    if((i+j)==6) d[i][j]+=c[12];

    d[i][j]+=c[i]+c[j+5];

    }

    for(i=1;i<=5;i++)

    for(j=1;j<=5;j++)

    {

    if(b[i][j]!=0)

    d[i][j]=-2;

    }

    max1.sum=-1;

    max1.y=0;

    max1.x=0;

    for(i=1;i<=5;i++)

    for(j=1;j<=5;j++)

    {

    if(max1.sum {

    max1.sum=d[i][j];

    max1.y=i;

    max1.x=j;

    w[i+y-1][j+x-1].sum+=max1.sum;

    }

    else if(max1.sum==d[i][j])

    {

    if(((i+y-1-zy)*(i+y-1-zy)+(j+x-1-zx)*(j+x-1-zx))>((max1.y+y-1-zy)*(max1.y+y-1-zy)+(max1.x+x-1-zx)*(max1.x+x-1-zx)))

    {

    max1.sum=d[i][j];

    max1.y=i;

    max1.x=j;

    }

    }

    }

    }

    long zzh5(int b[6][6],int n)

    {

    int i,j,k,l,m;

    switch(n)

    {

    case 1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;

    case 2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;

最新文章