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

c语言的五子棋代码(博弈算法),要能够执行的,谢谢大家了!... c语言的五子棋代码(博弈算法),要能够执行的,谢谢大家了! 展开
 我来答
宿啥品8397
推荐于2017-12-16 · TA获得超过4530个赞
知道大有可为答主
回答量:3273
采纳率:60%
帮助的人:1804万
展开全部
#include <stdio.h>
  #include <bios.h>
  #include <ctype.h>
  #include <conio.h>
  #include <dos.h>
  #define CROSSRU     0xbf   /*右上角点*/
  #define CROSSLU     0xda   /*左上角点*/
  #define CROSSLD     0xc0   /*左下角点*/
  #define CROSSRD     0xd9   /*右下角点*/
  #define CROSSL       0xc3   /*左边*/
  #define CROSSR       0xb4   /*右边*/
  #define CROSSU       0xc2   /*上边*/
  #define CROSSD       0xc1   /*下边*/
  #define CROSS       0xc5   /*十字交叉点*/

  /*定义棋盘左上角点在屏幕上的位置*/
  #define MAPXOFT     5
  #define MAPYOFT     2

  /*定义1号玩家的操作键键码*/
  #define PLAY1UP     0x1157/*上移--'W'*/
  #define PLAY1DOWN   0x1f53/*下移--'S'*/
  #define PLAY1LEFT   0x1e41/*左移--'A'*/
  #define PLAY1RIGHT   0x2044/*右移--'D'*/
  #define PLAY1DO     0x3920/*落子--空格键*/

  /*定义2号玩家的操作键键码*/
  #define PLAY2UP     0x4800/*上移--方向键up*/
  #define PLAY2DOWN   0x5000/*下移--方向键down*/
  #define PLAY2LEFT   0x4b00/*左移--方向键left*/
  #define PLAY2RIGHT   0x4d00/*右移--方向键right*/
  #define PLAY2DO     0x1c0d/*落子--回车键Enter*/

  /*若想在游戏中途退出, 可按 Esc 键*/
  #define ESCAPE       0x011b

  /*定义棋盘上交叉点的状态, 即该点有无棋子 */
  /*若有棋子, 还应能指出是哪个玩家的棋子   */
  #define CHESSNULL   0   /*没有棋子*/
  #define CHESS1       'O'/*一号玩家的棋子*/
  #define CHESS2       'X'/*二号玩家的棋子*/

  /*定义按键类别*/
  #define KEYEX99v         0/*退出键*/
  #define KEYFALLCHESS   1/*落子键*/
  #define KEYMOVECURSOR   2/*光标移动键*/
  #define KEYINVALID     3/*无效键*/

  /*定义符号常量: 真, 假 --- 真为1, 假为0 */
  #define TRUE         1
  #define FALSE       0

  /**********************************************************/
  /* 定义数据结构                                           */

  /*棋盘交叉点坐标的数据结构*/
  struct point
  {
  int x,y;
  };


  或者下面这个:
  #include <graphics.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <conio.h>
  #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

  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:
  ;
  }


  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<w[i][j].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;
  }

  }


  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<d[i][j])

  {

  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;

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

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

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

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

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

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

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

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

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

  case 12: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);

  }


  int wtu(int a[N+1][N+1],int write)

  {

  int i=1;

  map(a);

  zuobiao(zx,zy,1);

  while(i)

  {

  int k;

  k=tu(a,write);

  if(k==OK) i=0;

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

  }

  }


  int getkey()

  {

  int key,lo,hi;

  key=bioskey(0);

  lo=key&0x00ff;

  hi=(key&0xff00)>>8;

  return((lo==0) ? hi+256:lo);

  }


  int key()

  {

  int k;

  k=getkey();

  switch(k)

  {

  case 27: return (STOP);

  case 13:

  case ' ': return (OK);

  case 328: return (UP);

  case 336: return (DOWN);

  case 331: return (LEFT);

  case 333: return (RIGHT);

  default: return (NO);

  }

  }


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

  {

  int r;

  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);

  }

  else if(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);

  }

  }

  }


  int tu(int a[N+1][N+1],int write)

  {

  int k;

  re:

  k=key();

  if(k==OK)

  {

  if(a[zy][zx]==0)

  {

  a[zy][zx]=write;

  }

  else

  goto re;

  }

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

  if(k==NO) goto re;

  if(k==UP)

  {

  int i,j;

  if(zy==1) j=zy;

  else j=zy-1;

  zuobiao(zx,zy,0);

  zuobiao(zx,j,1);

  zy=j;

  goto re;

  }

  if(k==DOWN)

  {

  int i,j;

  if(zy==N) j=zy;

  else j=zy+1;

  zuobiao(zx,zy,0);

  zuobiao(zx,j,1);

  zy=j;

  goto re;

  }

  if(k==LEFT)

  {

  int i,j;

  if(zx==1) i=zx;

  else i=zx-1;

  zuobiao(zx,zy,0);

  zuobiao(i,zy,1);

  zx=i;

  goto re;

  }

  if(k==RIGHT)

  {

  int i,j;

  if(zx==N) i=zx;

  else i=zx+1;

  zuobiao(zx,zy,0);

  zuobiao(i,zy,1);

  zx=i;

  goto re;

  }

  }


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

  {

  if(i!=0)

  {

  if(i==1)

  setcolor(8);

  else if(i==-1)

  setcolor(WHITE);

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

  {

  circle(x,y,i);

  }

  }

  }


  void map(int a[N+1][N+1])

  {

  int i,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);

  }
追问
运行时出现:fatal error C1083: Cannot open include file: 'bios.h': No such file or directory
说这个bios.h是tc自带的扩展库,不具有可移植性,请问如何解决?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式