我的五子棋源程序,还不够厉害,谁能继续完善

    技术2022-05-11  182

         /* By ZhouDahua.  1999,3,30 */    /*TC2.0*/      #include  <stdio.h>      #include  <graphics.h>      #include  <process.h>      #include  <stdlib.h>      #include  <dos.h>      #include  <ctype.h>      #define DOWN 80      #define UP 72      #define F1 59      #define LEFT 75      #define RIGHT 77      #define Q 16      #define E 18      #define X 45      #define R 19      #define ESC 1      #define ENTER 28

          int judge(int);      int getkey();      void decide();      void count(int,int,int);      void sd();      int tx,ty;      int a[16][16]={0}, b[16][16]={0};     /* 全局变量 */

         void main()      {       int x,y,m,n,h=0,s=0,done;  int hx=150,sy=80;       int ch;       void *buf_curse;       unsigned size;

           int graphdriver=DETECT;       int graphmode;       registerbgidriver(EGAVGA_driver);       initgraph(&graphdriver,&graphmode," "); begin:sd();       for(x=0;x<16;x++)       for(y=0;y<16;y++) a[x][y]=0;       setfillstyle(1,13);       bar(0,0,12,12);       size=imagesize(0,0,12,12);       buf_curse=malloc(size);       getimage(0,0,12,12,buf_curse); /* save imag 保存图象 */       putimage(0,0,buf_curse,XOR_PUT);

           tx=1000,ty=1000;       cleardevice();       setcolor(WHITE);       h=0;s=0;hx=154;sy=84;       setfillstyle(1,CYAN);       bar(0,0,639,510);       setfillstyle(1,BLACK);       bar(157,87,483,413);    /*   setfillstyle(1,DARKGRAY);       bar(157,87,483,413);   */    setfillstyle(1,4);/*BROWN); */       bar(147,77,473,403);       setfillstyle(1,LIGHTGRAY);       bar(151,81,469,399);

           for(x=160;x<=460;x+=20)  line(x,90,x,390);       for(y=90;y<=390;y+=20)  line(160,y,460,y);   /* SETUP FACE */      putimage(154,84,buf_curse,XOR_PUT); /* xor option*/      setfillstyle(1,13);      bar(150,420,470,460);  /* */      setfillstyle(1,BLACK);      bar(153,460,475,467);      bar(470,424,475,467);      setfillstyle(1,13);      setcolor(YELLOW);      outtextxy(160,430,"WZQ program  By ZhouDahua 1999-5-1.");      outtextxy(160,448,"V1.3A");      setcolor(10);      outtextxy(500,100,"R to restar ");      outtextxy(500,120,"Esc to quit");      outtextxy(500,140,"Q or Enter to put");      outtextxy(500,160,"Enter to put down");

       /*   outtextxy(50,110,"Please:"); */wait: do{ done=1;  ch=getkey();  switch(ch)   {  case 76 :      case DOWN:   {putimage(hx,sy,buf_curse,XOR_PUT);    if(s==15) s=0;    else s+=1;    sy=84+s*20;    putimage(hx,sy,buf_curse,XOR_PUT);    break;   }

           case UP:   {putimage(hx,sy,buf_curse,XOR_PUT);    if(s==0) s=15;    else s-=1;    sy=84+s*20;    putimage(hx,sy,buf_curse,XOR_PUT);    break;   }

           case LEFT:   {putimage(hx,sy,buf_curse,XOR_PUT);    if(h==0) h=15;    else h-=1;    hx=154+h*20;    putimage(hx,sy,buf_curse,XOR_PUT);    break;   }

           case RIGHT:   {putimage(hx,sy,buf_curse,XOR_PUT);    if(h==15) h=0;    else h+=1;    hx=154+h*20;    putimage(hx,sy,buf_curse,XOR_PUT);    break;}       case R:       {putimage(hx,sy,buf_curse,XOR_PUT);        setcolor(WHITE);  goto begin;  }       case X:       case E:       case ESC: goto end;

           case Q:       case ENTER: done=0;break;   }

     } while(done); if(a[h][s]!=0) {  bar(150,420,470,460);setcolor(10); outtextxy(160,430,"You do not put it here!");sd(); goto wait;}

          a[h][s]=1;      for(x=6;x>0;x--)      { setcolor(13);      circle(160+h*20,90+s*20,x);}

          if(judge(1)) {  bar(150,420,470,460);setcolor(YELLOW);      outtextxy(160,430,"Wokao  You Win ! ");      outtextxy(160,445,"Press R to again"); sd();      aa: if(getch()!='r') {sd();goto aa;}      putimage(hx,sy,buf_curse,XOR_PUT);    setcolor(WHITE);      goto begin;  }

          decide(a);      if(judge(2)) {  bar(150,420,470,460);setcolor(YELLOW);      outtextxy(160,430,"Sorry, You Fail ");      outtextxy(160,445,"Press R to again "); sd();      bb: if(getch()!='r') {sd();goto bb;}      putimage(hx,sy,buf_curse,XOR_PUT);   setcolor(WHITE);      goto begin;  }     goto wait;

    end:      closegraph(); free(buf_curse);      for(h=0;h<1;h++) {sd();delay(800);}

    }

    /***********************************/void  decide(arr)      int arr[16][16];   {       int i,j,x,y,l,l1,l2,l3,l4;       int max_1,max_2,n=1,m=2;       int  x_1=0,y_1=0; int x_2=0,y_2=0;   for(i=6;i>0;i--)   {setcolor(15);    circle(tx,ty,i);}

     see:    for(i=0;i<16;i++)  for(j=0;j<16;j++) b[i][j]=0;

      for(i=0;i<16;i++)  for(j=0;j<16;j++)   if(arr[i][j]==0)    {  for(x=i,y=j,l1=0;arr[x][y+1]==n&&y<15;y++)l1+=2;       if(arr[x][y+1]==m) l1--;       for(x=i,y=j;     arr[x][y-1]==n&&y>0;y--) l1+=2;       if(arr[x][y-1]==m) l1--;        count(l1,i,j);       for(x=i,y=j,l2=0;arr[x+1][y-1]==n&&x<15&&y>0;x++,y--) l2+=2;       if(arr[x+1][y-1]==m)l2--;       for(x=i,y=j;     arr[x-1][y+1]==n&&x>0&&y<15;x--,y++) l2+=2;       if(arr[x-1][y+1]==m)l2--;        count(l2,i,j);       for(x=i,y=j,l3=0;arr[x+1][y+1]==n&&x<15&&y<15;x++,y++) l3+=2;       if(arr[x+1][y+1]==m)l3--;       for(x=i,y=j;     arr[x-1][y-1]==n&&x>0&&y>0;x--,y--) l3+=2;       if(arr[x-1][y-1]==m)l3--;        count(l3,i,j);       for(x=i,y=j,l4=0;arr[x+1][y]==n&&x<15;x++) l4+=2;       if(arr[x+1][y]==m)l4--;       for(x=i,y=j;     arr[x-1][y]==n&&x>0;x--) l4+=2;       if(arr[x-1][y]==m)l4--;        count(l4,i,j);

         }

         if(n==1)       { max_1=b[0][0];  for(i=0;i<16;i++)  for(j=0;j<16;j++)  if(b[i][j]>=max_1)     {max_1=b[i][j];      x_1=i;      y_1=j;     } n++; m--; goto see;      }

        if(n==2)      { max_2=b[0][0]; for(i=0;i<16;i++) for(j=0;j<16;j++) if(b[i][j]>=max_2) {max_2=b[i][j]; x_2=i;y_2=j;} n++;m--;  }

       if(max_2>=90||(max_1<90&&max_2>=50)||max_2>=max_1) {x_1=x_2; y_1=y_2;}

       tx=160+x_1*20;ty=90+y_1*20;   for(i=6;i>0;i--)   {setcolor(15);if(i<3)setcolor(BLACK);    circle(tx,ty,i);}

       arr[x_1][y_1]=2;

      }

    void count(int l,int i,int j)   {     switch(l)     {     case -1:     case 0:  break;     case 1:  b[i][j]+=2;   break;  /*2*/     case 2:  b[i][j]+=4;   break;  /*4*/     case 3:  b[i][j]+=7;   break;     case 4:  b[i][j]+=10;  break;     case 5:  b[i][j]+=13;  break;     case 6:  b[i][j]+=50;  break;     case 7:     case 8:  b[i][j]+=95;  break;     case 9:     case 10:     case 11:     case 13:     case 14:     case 15:     case 16:     case 17:     case 18: b[i][j]+=150;     default: b[i][j]+=0; break;     }   }

    int judge(int n)  {   int i,j,x,y,ju=0,l1,l2,l3,l4;   for(i=0;i<16;i++)   for(j=0;j<16;j++)   if(a[i][j]==n)   {for(x=i,y=j,l1=1;a[x][y+1]==n&&y<15;y++) l1++; if(l1>=5) {ju=1;goto re;}    for(x=i,y=j,l2=1;a[x+1][y-1]==n&&x<15&&y>0;x++,y--) l2++; if(l2>=5) {ju=1;goto re;}    for(x=i,y=j,l3=1;a[x+1][y+1]==n&&x<15&&y<15;x++,y++) l3++; if(l3>=5) {ju=1;goto re;}    for(x=i,y=j,l4=1;a[x+1][y]==n&&x<15;x++) l4++; if(l4>=5) {ju=1;goto re;}   }re: if(i!=16&&j!=16) {setcolor(WHITE);circle(160+i*20,90+j*20,10);}   return(ju); }

    int getkey(){union REGS rg; rg.h.ah=0; int86(0x16,&rg,&rg); return rg.h.ah;}void sd(){sound(720);delay(3500);nosound();}


    最新回复(0)