⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 五子棋.txt

📁 五子棋c语言程序代码(数据结构)有的短哦@!
💻 TXT
字号:
  #include   <stdio.h>   
  #include   <graphics.h>   
  #include   <conio.h>   
  #define   ESC   27   
  #define   LEFT     'a'   
  #define   RIGHT   'd'   
  #define   UP   'w'   
  #define   DOWN   's'   
  #define   MAXLIE   20   
  #define   MAXHANE   20   
  #define   MAXMARK   2000000000   
  void   beep()   
  {   
  printf("\a");   
  }   
  /*       box()         */   
  void   box(int   xl,int   yu,int   xr,int   yd)   
  {   
  line(xl,yu,xr,yu);   
  line(xl,yu,xl,yd);   
  line(xl,yd,xr,yd);   
  line(xr,yu,xr,yd);   
  }   
  /*   end   */   
  long     int   basemark(char   chess[MAXHANE][MAXLIE],int   x,int   y,char   who);   
  void   basefind(char   chess[MAXHANE][MAXLIE],int   *xp,int   *yp,char   who);   
  main()   
  {   
  int   x,y,xr,yr,xb,yb,xstart,ystart,xtemp,ytemp,xfind,yfind;   
  int   player1=1,player2=2,playernow;   
  int   player1color,player2color,movecancolor,movecannotcolor;   
  int   normalcolor,blackcolor,gd=VGA,gm=VGAHI;   
  int   i,ii;   
  char   chess[MAXHANE][MAXLIE],c;   
  initgraph(&gd,&gm,"");   
  player1color=EGA_GREEN;player2color=EGA_YELLOW;   
  xr=xstart=getmaxx()/(MAXLIE+4);   
  yr=ystart=getmaxy()/(MAXHANE+4);   
  if(xr%2==1)xr=xr/2;else   xr=xr/2-1;   
  if(yr%2==1)yr=yr/2;else   yr=yr/2-1;   
  normalcolor=15;   
  blackcolor=1;   
  movecancolor=EGA_GREEN;   
  movecannotcolor=EGA_RED;   
  for(i=0;i<MAXLIE;i++)   
  for(ii=0;ii<MAXHANE;ii++)   
  chess[ii][i]=0;   
  setcolor(normalcolor);   
  setbkcolor(blackcolor);   
  clrscr();   
  playernow=player1;   
  x=0;y=0;   
  for(i=0;i<MAXLIE;i++)   
  for(ii=0;ii<MAXHANE;ii++)   
  {   
  xtemp=xstart*(i+1);ytemp=ystart*(ii+1);   
  setcolor(normalcolor);   
  box(xtemp,ytemp,xtemp+xstart,ytemp+ystart);   
  if(chess[ii][i]==player1)   
  {   
  setcolor(player1color);   
  fillellipse(xtemp+xr,ytemp+yr,xr,yr);   
  }   
  if(chess[ii][i]==player2)   
  {   
  setcolor(player2color);   
  fillellipse(xtemp+xr,ytemp+yr,xr,yr);   
  }   
  }   
    
  /*>>>>>>>>>>>>>>>>     in   mani()                           <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*//*>>>>>>>>>>>>>>>>>in   main()<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/   
  do{   
  if(chess[y][x]==0)   
  if(playernow==player1)setcolor(player1color);else   setcolor(player2color);   
  else   
  setcolor(movecannotcolor);   
  xtemp=xstart*(x+1);   
  ytemp=ystart*(y+1);   
  xb=x;yb=y;   
  box(xtemp,ytemp,xtemp+xstart,ytemp+ystart);   
  if(playernow==player1)   
  {   
  setcolor(player1color);   
  outtextxy(xstart,ystart*(MAXHANE+2)+3,"It's   player1's   turns");   
  }   
  else   
  {   
  setcolor(player2color);   
  outtextxy(xstart,ystart*(MAXHANE+2)+3,"It's   player2's   turns");   
  }   
  if(playernow==player1)c=getch();   
  else   
  {   
    basefind(chess,&xfind,&yfind,playernow);   
    if(x<xfind)c=RIGHT;   
    else   if(y<yfind)c=DOWN;   
    else   if(x>xfind)c=LEFT;   
    else   if(y>yfind)c=UP;   
    else   c='\r';   
    }   
  switch(c)   
  {   
  case   RIGHT:   
      if(x<MAXLIE-1)   
  x++;   
      else   
  x=0;   
      goto   lable1;   
  case   LEFT:if(x>0)   
  x--;   
      else   
  x=MAXLIE-1;   
      goto   lable1;   
  case   UP:     if(y>0)   
  y--;   
      else   
  y=MAXHANE-1;   
      goto   lable1;   
  case   DOWN:if(y<MAXHANE-1)   
  y++;   
      else   
  y=0;   
      lable1:   
  xtemp=xstart*(xb+1);   
  ytemp=ystart*(yb+1);   
  setcolor(normalcolor);   
  box(xtemp,ytemp,xtemp+xstart,ytemp+ystart);   
  break;   
  case   '\r':   
      if(chess[y][x]==0)   
  {   
  chess[y][x]=playernow;   
  if(playernow==player1)   
  setcolor(player1color);   
  else   
  setcolor(player2color);   
  xtemp=xstart*(x+1);   
  ytemp=ystart*(y+1);   
  fillellipse(xtemp+xr+1,ytemp+yr+1,xr,yr);   
  if(basemark(chess,x,y,playernow)>=MAXMARK)   
  {   
  if(playernow==player1)   
  outtextxy(xstart,ystart*(MAXHANE   +3),"Player1   win,press   any   key   to   quit");   
  else   
  outtextxy(xstart,ystart*(MAXHANE+3   ),"Player2   win,press   any   key   to   quit");   
  getch();   
  clrscr();   
  exit();   
  }   
  if(playernow==player1)   
  playernow=player2;   
  else   
  playernow=player1;   
    
  }   
      else   
  beep();   
      break;   
  case   'y':if(playernow==player1)   
  playernow=player2;   
    else   
  playernow=player1;   
    break;   
  case   ESC:exit();   
  }   
  }while(1);   
  clrscr();   
  exit();   
  }   
  /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/   
  long     int   basemark(char   chess[MAXHANE][MAXLIE],int   x,int   y,char   who)   
  {   
  long     int   mark,m[6];   
  int   xtp,ytp,xn,yn,xn2,yn2,xr,xl,yu,yd,i1,i2,i3;   
  int   xad[4],yad[4],i,ii,whobk=-1,mm;   
  char   whoa;   
  m[0]=0;m[1]=1;m[2]=m[1]*20;m[3]=m[2]*16*2;m[4]=m[3]*12*2;m[5]=m[4]*8*2;   
  xad[0]=1;yad[0]=0;   
  xad[1]=1;yad[1]=1;   
  xad[2]=0;yad[2]=1;   
  xad[3]=-1;yad[3]=1;   
  mark=0;   
  if(chess[y][x]!=0)   
  {   
  whobk=chess[y][x];   
  chess[y][x]=0;   
  }   
  for(i=0;i<=3;i++)   
  {   
  whoa=0;xn=x;yn=y;   
  for(ii=1;ii<=4;ii++)   
  {   
  xtp=xn-xad[i];   
  ytp=yn-yad[i];   
  if(xtp<0||xtp>=MAXLIE)break;   
  if(ytp<0||ytp>=MAXHANE)break;   
  if(whoa==0)whoa=chess[ytp][xtp];   
  if(whoa!=chess[ytp][xtp]&&chess[ytp][xtp]!=0)break;   
  xn=xtp;yn=ytp;   
  }   
  xl=xn;yu=yn;   
  xn=x;yn=y;whoa=0;   
  for(ii=1;ii<=4;ii++)   
  {   
  xtp=xn+xad[i];   
  ytp=yn+yad[i];   
  if(xtp<0||xtp>MAXLIE)break;   
  if(ytp<0||ytp>MAXHANE)break;   
  if(whoa==0)whoa=chess[ytp][xtp];   
  if(whoa!=chess[ytp][xtp]&&chess[ytp][xtp]!=0)break;   
  xn=xtp;yn=ytp;   
  }   
  xr=xn;yd=yn;xn=xl;yn=yu;   
  if(yd>yu)i1=yd-yu+1;   
  else   i1=xr-xl+1;   
  for(i2=0;i2<=i1-5;i2++)   
  {   
  whoa=0;mm=1;   
  xn2=xn;yn2=yn;   
  for(i3=1;i3<=5;i3++)   
  {   
  if(whoa==0)whoa=chess[yn2][xn2];   
  if(whoa!=chess[yn2][xn2]&&chess[yn2][xn2]!=0)   
  {mm=0;break;}   
  if(chess[yn2][xn2]!=0)mm++;   
  xn2=xn2+xad[i];yn2=yn2+yad[i];   
  }   
  mark=mark+m[mm];   
  if(whoa==who)   
  {   
  if(mm==5)   
  {   
  mark=MAXMARK;   
  return   mark;   
  }   
  else   
  mark=mark+m[mm];   
  }   
  xn=xn+xad[i];yn=yn+yad[i];   
  }   
  }   
  if(whobk!=-1)chess[y][x]=whobk;   
  return   mark;   
  }   
  /*>>>>>>>>>>>>>>>>>>>>   basemark()   end         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     <<,<<<<<<<<<<<<<<<<<<<<<<<<<*/   
  void   basefind(char   chess[MAXHANE][MAXLIE],int   *xp,int   *yp,char   who)   
  {   
  int   i,ii,xa=-1,ya=-1;   
  long   int   maxmark=-1,mark;   
  for(i=0;i<MAXHANE;i++)   
  for(ii=0;ii<MAXLIE;ii++)   
  {   
  if(chess[i][ii]==0)   
  {   
  mark=basemark(chess,ii,i,who);   
  outtextxy(100,getmaxy()-16,ltoa(ii,"abc",1));   
  if(mark>maxmark)   
  {   
  maxmark=mark;   
  xa=ii;   
  ya=i;   
  }   
  }   
  }   
  *xp=xa;*yp=ya;   
  }   
  /*>>>>>>>>>>>>>>>>>>>>>>>>>>>.   basefind()   end   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,,*/   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -