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

📄 fivezhiqi.c

📁 一个五子棋的小程序
💻 C
字号:
/*五子棋程序*/ 
/*ZJ*/ 
#include"graphics.h" 
#include"stdio.h" 
#include"dos.h" 
#include"conio.h" 
#include"stdlib.h" 
#include"mima.c" 
#define KEY_E 18 
#define KEY_S 31 
#define KEY_D 32 
#define KEY_F 33 
#define KEY_SPACE 57 
#define KEY_UP 72 
#define KEY_LEFT 75 
#define KEY_DOWN 80 
#define KEY_RIGHT 77 
#define KEY_ENTER  28 
#define KEY_ESC 1 
#define N 5 
#define TRUE 1 
#define FALSE 0 
char sr[11]; 
int s[40][40]; 
int charge(); 
int judge(); 
FILE *fp; 
void hz2(int x,int y,int a,int col,int color,char *s) 
{ unsigned char qh,wh; 
  register i,j,m,n; 
  unsigned long offset; 
  unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; 
  char mat[32]; 
  int row; 
  row=col; 
  while(*s) 
  { qh=*(s)-0xa0; 
    wh=*(s+1)-0xa0; 
    offset=(94*(qh-1)+(wh-1))*32L; 
    fseek(fp,offset,SEEK_SET); 
    fread(mat,32,1,fp); 
    for(i=0;i<16;i++) 
      for(n=0;n<row;n++) 
      for(j=0;j<16;j++) 
for(m=0;m<col;m++) 
if((mask[j%8]&mat[i*2+j/8])!=NULL) 
  putpixel(x+j*col+m,y+i*row+n,color); 
    x=x+a; 
    s=s+2; 
  } 
} 
main() 
{ int graphdriver,graphmode; 
  int size; 
  int i; 
  int x,y; 
  int key; 
  int done; 
  int p,w=1; 
  int h,k; 
  int pass; 
  char *buf_redchess; 
  char *buf_whitechess; 
  char *buf_sign; 
  char *buf_end; 
  char *buf_redsuccess; 
  char *buf_whitesuccess; 
  registerbgidriver(EGAVGA_driver); 
  graphdriver=DETECT; 
  initgraph(&graphdriver,&graphmode," "); 
  
  setbkcolor(BLUE); 
  setcolor(RED); 

  circle(100,100,5); 
  setfillstyle(1,RED); 
  floodfill(100,100,RED); 
  size=imagesize(95,95,105,105); 
  buf_redchess=malloc(size); 
  getimage(95,95,105,105,buf_redchess); 
  putimage(95,95,buf_redchess,XOR_PUT); 

  setcolor(WHITE); 
  circle(200,200,5); 
  setfillstyle(1,WHITE); 
  floodfill(200,200,WHITE); 
  size=imagesize(195,195,205,205); 
  buf_whitechess=malloc(size); 
  getimage(195,195,205,205,buf_whitechess); 
  putimage(195,195,buf_whitechess,XOR_PUT); 

  setcolor(GREEN); 
  line(50,50,60,60); 
  line(60,50,50,60); 
  circle(55,55,4); 
  size=imagesize(50,50,60,60); 
  buf_sign=malloc(size); 
  getimage(50,50,60,60,buf_sign); 
  putimage(50,50,buf_sign,XOR_PUT); 

  cleardevice(); 
  hz2(50,100,50,2,RED,"谢谢使用"); 
  setcolor(GREEN); 
  rectangle(49,9,251,141); 
  size=imagesize(49,99,251,141); 
  buf_end=malloc(size); 
  getimage(49,99,251,141,buf_end); 
  putimage(49,99,buf_end,XOR_PUT); 

  hz2(50,100,50,2,RED,"红方胜利"); 
  setcolor(GREEN); 
  rectangle(49,99,251,141); 
  size=imagesize(49,99,251,141); 
  buf_redsuccess=malloc(size); 
  getimage(49,99,251,141,buf_redsuccess); 
  putimage(49,99,buf_redsuccess,XOR_PUT); 

  hz2(50,100,50,2,WHITE,"白方胜利"); 
  setcolor(WHITE); 
  rectangle(49,99,251,141); 
  size=imagesize(49,99,251,140); 
  buf_whitesuccess=malloc(size); 
  getimage(49,99,251,141,buf_whitesuccess); 
  putimage(49,99,buf_whitesuccess,XOR_PUT); 
  cleardevice(); 
  settextstyle(0,0,1); 

  loop: 
  for(h=0;h<40;h++) 
  for(k=0;k<40;k++) 
s[h][k]=0; 
  p=5;w=6; 
  setbkcolor(BLUE); 
  setcolor(GREEN); 
  rectangle(20,40,620,440); 
  line(420,40,420,440); 
  for(i=30;i<420;i+=10) 
  line(i,40,i,440); 
  for(i=50;i<440;i+=10) 
  line(20,i,420,i); 
  putimage(200-N,200-N,buf_sign,XOR_PUT); 

  hz2(420,80,17,1,WHITE,"白方"); 
  outtextxy(460,85,"E:      D:"); 
  hz2(480,80,20,1,WHITE,"向上"); 
  hz2(550,80,20,1,WHITE,"向下"); 
  outtextxy(460,105,"S:      F:"); 
  hz2(480,100,20,1,WHITE,"向左"); 
  hz2(550,100,20,1,WHITE,"向右"); 

  hz2(422,120,17,1,RED,"红方"); 
  outtextxy(460,125,"UP:      DOWN:"); 
  hz2(500,120,20,1,RED,"向上"); 
  hz2(585,120,20,1,RED,"向下"); 
  outtextxy(460,145,"LEFT:    RIGHT:"); 
  hz2(500,140,20,1,RED,"向左"); 
  hz2(585,140,20,1,RED,"向右"); 

  setcolor(GREEN); 
  circle(520,230,70); 
  arc(490,220,50,130,30); 
  arc(550,220,50,130,30); 
  arc(520,230,220,320,40); 

  hz2(430,420,30,1,RED,"中华五子棋"); 
  hz2(20,5,50,2,RED,"中华五子棋"); 
  x=200; 
  y=200; 
  do{ done=FALSE; 
      putimage(510,50,buf_whitechess,COPY_PUT); 
      do{ key=get_key(); 
  switch(key){ 
  case KEY_E: putimage(x-N,y-N,buf_sign,XOR_PUT); 
      if(y==40) y=440; 
      else y-=10; 
      putimage(x-N,y-N,buf_sign,XOR_PUT); 
      break; 
  case KEY_S: putimage(x-N,y-N,buf_sign,XOR_PUT); 
      if(x==20) x=420; 
      else x-=10; 
      putimage(x-N,y-N,buf_sign,XOR_PUT); 
      break; 
  case KEY_D: putimage(x-N,y-N,buf_sign,XOR_PUT); 
      if(y==440) y=40; 
      else y+=10; 
      putimage(x-N,y-N,buf_sign,XOR_PUT); 
      break; 
  case KEY_F: putimage(x-N,y-N,buf_sign,XOR_PUT); 
      if(x==420) x=20; 
      else x+=10; 
      putimage(x-N,y-N,buf_sign,XOR_PUT); 
      break; 
  case KEY_SPACE: 
  p=charge(x,y,1); 
  if(p==0) break; 
  else{ 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  putimage(x-N,y-N,buf_whitechess,COPY_PUT); 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  w=judge(); 
  if(w==1){ settextjustify(0,0); 
settextstyle(1,0,3); 
outtextxy(440,350,"white success!"); 
putimage(150,200,buf_whitesuccess,COPY_PUT); 
sleep(3); 
                                                settextstyle(0,0,1); 
cleardevice(); 
goto loop; 
  } 
  done=TRUE; 
  break; 
  } 
  case KEY_ESC:  putimage(150,200,buf_end,COPY_PUT); sleep(3); 
                          exit(0); 
} 
      }while(!done); 
      done=FALSE; 
      putimage(510,50,buf_redchess,COPY_PUT); 
      do{ key=get_key(); 
  switch(key){ 
  case KEY_UP: putimage(x-N,y-N,buf_sign,XOR_PUT); 
if(y==40) y=440; 
else y-=10; 
putimage(x-N,y-N,buf_sign,XOR_PUT); 
break; 
  case KEY_LEFT: putimage(x-N,y-N,buf_sign,XOR_PUT); 
  if(x==20) x=420; 
  else x-=10; 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  break; 
  case KEY_DOWN: putimage(x-N,y-N,buf_sign,XOR_PUT); 
  if(y==440) y=40; 
  else y+=10; 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  break; 
  case KEY_RIGHT: putimage(x-N,y-N,buf_sign,XOR_PUT); 
  if(x==420) x=20; 
  else x+=10; 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  break; 
  case KEY_ENTER: 
  p=charge(x,y,2); 
  if(p==0) break; 
  else{ 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  putimage(x-N,y-N,buf_redchess,COPY_PUT); 
  putimage(x-N,y-N,buf_sign,XOR_PUT); 
  w=judge(); 
  if(w==2){ settextjustify(0,0); 
settextstyle(1,0,3); 
outtextxy(440,350,"red success!"); 
putimage(150,200,buf_redsuccess,COPY_PUT); 
sleep(3); 
settextstyle(0,0,1); 
cleardevice(); 
goto loop; 
  } 
  done=TRUE; 
  break; 
  } 
  case KEY_ESC:  putimage(150,200,buf_end,COPY_PUT);  sleep(3); 
                          exit(0); 
  } 
      }while(!done); 
  }while(1); 
  getch(); 
  closegraph(); 
} 
int charge(int a,int b,int c) 
{ int e,f; 
  e=(b-40)/10; 
  f=(a-20)/10; 
  if(s[e][f]==0){ 
  if(c==1) s[e][f]=1; 
  if(c==2) s[e][f]=2; 
  return 4; 
  } 
  else return 0; 
} 
int judge() 
{ int i,k,t,m,n,h,r; 
  for(i=0;i<40;i++) 
  for(k=0;k<36;k++){ 
m=k;n=0; 
for(t=0;t<5;t++){ 
if(s[m]==1) n++; 
m++; 
} 
if(n==5) return 1; 
m=k;n=0; 
for(t=0;t<5;t++){ 
if(s[m]==2) n++; 
m++; 
} 
if(n==5) return 2; 
  } 
  for(i=0;i<40;i++) 
  for(k=0;k<36;k++){ 
m=k;n=0; 
for(t=0;t<5;t++){ 
if(s[m]==1) n++; 
m++; 
} 
if(n==5) return 1; 
  for(t=0;t<5;t++){ 
if(s[m]==2) n++; 
m++; 
  } 
  if(n==5) return 2; 
  } 
  for(i=35;i>=0;i--){ 
r=i; 
  for(k=0;k<36-i;k++,r++){ 
m=k;n=0;h=r; 
for(t=0;t<5;t++){ 
  if(s[m][h]==1) n++; 
  m++;h++; 
} 
if(n==5) return 1; 
m=k;h=r;n=0; 
for(t=0;t<5;t++){ 
  if(s[m][h]==2) n++; 
  m++;h++; 
} 
if(n==5) return 2; 
  } 
  } 
  for(i=35;i>0;i--){ 
r=i; 
  for(k=0;k<36-i;k++,r++){ 
m=k;n=0;h=r; 
for(t=0;t<5;t++){ 
  if(s[h][m]==1) n++; 
  m++;h++; 
} 
if(n==5) return 1; 
m=k;h=r;n=0; 
for(t=0;t<5;t++){ 
  if(s[h][m]==2) n++; 
  m++;h++; 
} 
if(n==5) return 2; 
} 
  } 
  for(i=4;i<40;i++){ 
r=i; 
  for(k=0;k<=i-4;k++,r--){ 
m=k;h=r;n=0; 
for(t=0;t<5;t++){ 
  if(s[m][h]==1) n++; 
  m++;h--; 
} 
if(n==5) return 1; 
m=k;h=r;n=0; 
for(t=0;t<5;t++){ 
  if(s[m][h]==2) n++; 
  m++;h--; 
} 
if(n==5) return 2; 
} 
  } 
  for(i=35;i>0;i--){ 
r=i; 
  for(k=39;k>=i+4;k--,r++){ 
m=k;h=r;n=0; 
for(t=0;t<5;t++){ 
  if(s[h][m]==1) n++; 
  h++;m--; 
} 
if(n==5) return 1; 
m=k;h=r;n=0; 
for(t=0;t<5;t++){ 
  if(s[h][m]==2) n++; 
  h++;m--; 
} 
if(n==5) return 2; 
  } 
  } 
  return 3; 
} 
int get_key() 
{ union REGS rg; 
  rg.h.ah=0; 
  int86(0x16,&rg,&rg); 
  return rg.h.ah; 
}

⌨️ 快捷键说明

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