c语言的五子棋代码(博弈算法)

#include  #include  #include  #include  #include  #defineCROSSRU0xbf/*右上角点*/  #defineCROSSLU0xda/*左上角点*/  #defineCROSSLD0xc0/*左下角点*/  #defineCROSSRD0xd9/*右下角点*/  #defineCROSSL0xc3/*左边*/  #defineCROSSR0xb4/*右边*/  #defineCROSSU0xc2/*上边*/  #defineCROSSD0xc1/*下边*/  #defineCROSS0xc5/*十字交叉点*/  /*定义棋盘左上角点在屏幕上的位置*/  #defineMAPXOFT5  #defineMAPYOFT2  /*定义1号玩家的操作键键码*/  #definePLAY1UP0x1157/*上移--'W'*/  #definePLAY1DOWN0x1f53/*下移--'S'*/  #definePLAY1LEFT0x1e41/*左移--'A'*/  #definePLAY1RIGHT0x2044/*右移--'D'*/  #definePLAY1DO0x3920/*落子--空格键*/  /*定义2号玩家的操作键键码*/  #definePLAY2UP0x4800/*上移--方向键up*/  #definePLAY2DOWN0x5000/*下移--方向键down*/  #definePLAY2LEFT0x4b00/*左移--方向键left*/  #definePLAY2RIGHT0x4d00/*右移--方向键right*/  #definePLAY2DO0x1c0d/*落子--回车键Enter*/  /*若想在游戏中途退出,可按Esc键*/  #defineESCAPE0x011b  /*定义棋盘上交叉点的状态,即该点有无棋子*/  /*若有棋子,还应能指出是哪个玩家的棋子*/  #defineCHESSNULL0/*没有棋子*/  #defineCHESS1'O'/*一号玩家的棋子*/  #defineCHESS2'X'/*二号玩家的棋子*/  /*定义按键类别*/  #defineKEYEX99v0/*退出键*/  #defineKEYFALLCHESS1/*落子键*/  #defineKEYMOVECURSOR2/*光标移动键*/  #defineKEYINVALID3/*无效键*/  /*定义符号常量:真,假---真为1,假为0*/  #defineTRUE1  #defineFALSE0  /**********************************************************/  /*定义数据结构*/  /*棋盘交叉点坐标的数据结构*/  structpoint  {  intx,y;  };  或者下面这个:  #include  #include  #include  #include  #defineN15  #defineB7  #defineSTOP-10000  #defineOK1  #defineNO0  #defineUP328  #defineDOWN336  #defineLEFT331  #defineRIGHT333  inta[N+1][N+1];  intzx,zy;  intwrite=1,biaoji=0;  structzn{  longsum;  inty;  intx;  }w[N+1][N+1],max,max1;  voidcbar(inti,intx,inty,intr);  voidmap(inta[][]);  intgetkey();  intkey();  voidzuobiao(intx,inty,inti);  inttu(inta[][],intwrite);  intwtu(inta[][],intwrite);  intzhineng(inta[][]);  intzh5(inty,intx,inta[][]);  longzzh5(intb[][],inti);  main()  {  inti,j;  intgdriver=DETECT;  intgmode;  initgraph(&gdriver,&gmode,);  zx=(N+1)/2;  zy=(N+1)/2;  for(i=1;i((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;  }  }  intzh5(inty,intx,inta[N+1][N+1])  {  inti,j;  intb[6][6];  longc[13];  longd[6][6];  longtemp;  for(i=y;i((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;  }  }  }  }  longzzh5(intb[6][6],intn)  {  inti,j,k,l,m;  switch(n)  {  case1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;  case2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;  case3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;  case4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;  case5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;  case6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;  case7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;  case8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;  case9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;  case10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;  case11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;  case12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;  }  if((i==0&&j==1&&k==1&&l==1&&m==0))  return(900);  if((i==0&&j==-1&&k==-1&&l==-1&&m==0))  return(1000);  if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))  return(20);  if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))  return(20);  if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))  return(-60);  if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))  return(-60);  }  intwtu(inta[N+1][N+1],intwrite)  {  inti=1;  map(a);  zuobiao(zx,zy,1);  while(i)  {  intk;  k=tu(a,write);  if(k==OK)i=0;  if(k==STOP)return(STOP);  }  }  intgetkey()  {  intkey,lo,hi;  key=bioskey(0);  lo=key&0x00ff;  hi=(key&0xff00)>>8;  return((lo==0)?hi+256:lo);  }  intkey()  {  intk;  k=getkey();  switch(k)  {  case27:return(STOP);  case13:  case'':return(OK);  case328:return(UP);  case336:return(DOWN);  case331:return(LEFT);  case333:return(RIGHT);  default:return(NO);  }  }  voidzuobiao(intx,inty,inti)  {  intr;  if(i!=0)  {  setcolor(GREEN);  for(r=1;r<=5;r++)  circle(75+25*x,25+25*y,r);  }  else  {  if(a[zy][zx]==1)  {  setcolor(8);  for(r=1;r<=5;r++)  circle(75+25*x,25+25*y,r);  }  elseif(a[zy][zx]==-1)  {  setcolor(WHITE);  for(r=1;r<=5;r++)  circle(75+25*x,25+25*y,r);  }  else  {  setcolor(B);  for(r=1;r<=5;r++)  circle(75+25*x,25+25*y,r);  setcolor(RED);line(75+25*zx-5,25+25*zy,75+25*x+5,25+25*zy);  line(75+25*zx,25+25*zy-5,75+25*zx,25+25*zy+5);  }  }  }  inttu(inta[N+1][N+1],intwrite)  {  intk;  re:  k=key();  if(k==OK)  {  if(a[zy][zx]==0)  {  a[zy][zx]=write;  }  else  gotore;  }  if(k==STOP)return(STOP);  if(k==NO)gotore;  if(k==UP)  {  inti,j;  if(zy==1)j=zy;  elsej=zy-1;  zuobiao(zx,zy,0);  zuobiao(zx,j,1);  zy=j;  gotore;  }  if(k==DOWN)  {  inti,j;  if(zy==N)j=zy;  elsej=zy+1;  zuobiao(zx,zy,0);  zuobiao(zx,j,1);  zy=j;  gotore;  }  if(k==LEFT)  {  inti,j;  if(zx==1)i=zx;  elsei=zx-1;  zuobiao(zx,zy,0);  zuobiao(i,zy,1);  zx=i;  gotore;  }  if(k==RIGHT)  {  inti,j;  if(zx==N)i=zx;  elsei=zx+1;  zuobiao(zx,zy,0);  zuobiao(i,zy,1);  zx=i;  gotore;  }  }  voidcbar(inti,intx,inty,intr)  {  if(i!=0)  {  if(i==1)  setcolor(8);  elseif(i==-1)  setcolor(WHITE);  for(i=1;i<=r;i++)  {  circle(x,y,i);  }  }  }  voidmap(inta[N+1][N+1])  {  inti,j;  cleardevice();  setbkcolor(B);  setcolor(RED);  for(i=0;i<N;i++)  {  line(100,50+25*i,75+N*25,50+25*i);  line(100+25*i,50,100+25*i,25+N*25);  }  for(i=1;i<=N;i++)  for(j=1;j<=N;j++)  cbar(a[i][j],75+25*j,25+25*i,10);  }

免责声明:本站发布的游戏攻略(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!