📄 fivezhiqi.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 + -