#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
#include<bios.h>
#include<math.h>
#define Enter 7181
#define ESC 283
#define UP 18432
#define DOWN 20480
#define LEFT 19200
#define RIGHT 19712
void Initgra(void);
void Initpck(void);
void Initcxy(void);
void Dmap(void);
void Dpck(void);
void Cmov(void);
void Swmg(void);/*处理错误的玩家操作*/
void Hccm(void);/*协助处理玩家操作*/
void Scmv(void);/*处理玩家操作*/
void Epck(void);
void Caam(void);
void Cwls(void);
void Dcil(int,int,int);/*画圆*/
int x0,y0,x1,y1,check1,check2,key=0,num;
struct Pancake
{int x;int y;int color;}Pc[5];
main()
{Initgra();/*初始化图形驱动程序*/
Initpck();/*初始化饼*/
Initcxy();/*初始化圆的坐标*/
while(1)
{Dmap();/*画地图*/
Dpck();/*画饼*/
Cmov();/*玩家操作*/
Epck();/*吃饼*/
Caam();/*自动操作*/
Cwls();/*判断输赢*/
if(key==ESC)/*结束游戏*/
break;
if(key==Enter)/*继续游戏*/
{Initpck();
Initcxy();
key=0;}
delay(15000);
}
closegraph();
}
void Dcil(int x,int y, int color)
{setcolor(color);
setfillstyle(1,color);
circle(x,y,10);
floodfill(x,y,color);
}
void Dmap()/*地图为网格*/
{int i;
setcolor(4);
for(i=0;i<=7;i++)
{line(0,80*i,560,80*i);
line(80*i,0,80*i,560);
}
}
void Cmov()
{ if(bioskey(1))
{key=bioskey(0);
Swmg();
switch(key)
{case UP:Hccm();y0-=5;Scmv();break;
case DOWN:Hccm();y0+=5;Scmv();break;
case LEFT:Hccm();x0-=5;Scmv();break;
case RIGHT:Hccm();x0+=5;Scmv();break;
default:break;
}
}
}
void Swmg()
{if(x0%80==0&&y0%80!=0)
switch(key)
{case LEFT:
case RIGHT:key=0;break;
default:break;
}
else if(x0%80!=0&&y0%80==0)
switch(key)
{case UP:
case DOWN:key=0;break;
default:break;
}
}
void Scmv()/*玩家控制的圆*/
{if(x0%80==0&&y0%80!=0)/*位于纵线*/
{if(check2>y0)
{Dcil(x0,y0+5,0);Dcil(x0,y0,4);}
else
if(check2<y0)
{Dcil(x0,y0-5,0);Dcil(x0,y0,4);}
}
else
if(x0%80!=0&&y0%80==0)/*位于横线*/
{if(check1>x0)
{Dcil(x0+5,y0,0);Dcil(x0,y0,4);}
else
if(check1<x0)
{Dcil(x0-5,y0,0);Dcil(x0,y0,4);}
}
else
if(x0%80==0&&y0%80==0)/*位于交点*/
{if(check1==x0&&check2>y0)
{Dcil(x0,y0+5,0);Dcil(x0,y0,3);}
else
if(check1==x0&&check2<y0)
{Dcil(x0,y0-5,0);Dcil(x0,y0,3);}
else
if(check2==y0&&check1>x0)
{Dcil(x0+5,y0,0);Dcil(x0,y0,3);}
else
if(check2==y0&&check1<x0)
{Dcil(x0-5,y0,0);Dcil(x0,y0,3);}
}
}
void Caam()/*自动控制的圆,根据玩家控制的圆的位置,自行移动*/
{if(x1%80==0&&y1%80!=0)
{if(y0>y1)
{Dcil(x1,y1,0);y1+=2;Dcil(x1,y1,1);}
else
if(y0<y1)
{Dcil(x1,y1,0);y1-=2;Dcil(x1,y1,1);}
}
else
if(y1%80==0&&x1%80!=0)
{if(x0>x1)
{Dcil(x1,y1,0);x1+=2;Dcil(x1,y1,1);}
else
if(x0<x1)
{Dcil(x1,y1,0);x1-=2;Dcil(x1,y1,1);}
}
else
if(x1%80==0&&y1%80==0)
{if((x0-x1)>0&&abs(y0-y1)<=(x0-x1))
{Dcil(x1,y1,0);x1+=2;Dcil(x1,y1,2);}
else if((x0-x1)<0&&abs(y0-y1)<=(x1-x0))
{Dcil(x1,y1,0);x1-=2;Dcil(x1,y1,2);}
else if((y0-y1)>0&&abs(x0-x1)<(y0-y1))
{Dcil(x1,y1,0);y1+=2;Dcil(x1,y1,2);}
else if((y0-y1)<0&&abs(x0-x1)<(y1-y0))
{Dcil(x1,y1,0);y1-=2;Dcil(x1,y1,2);}
}
}
void Initgra()
{int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\tc");
}
void Hccm()
{check1=x0;
check2=y0;
}
void Initpck()/*初始化饼*/
{int i;
num=5;
randomize();
for(i=0;i<5;i++)
{Pc[i].x=(random(6)+1)*80;
Pc[i].y=(random(6)+1)*80;
Pc[i].color=random(14)+1;
}
}
void Dpck()/*画饼*/
{int i;
for(i=0;i<num;i++)
{setcolor(Pc[i].color);
setfillstyle(1,Pc[i].color);
circle(Pc[i].x,Pc[i].y,5);
floodfill(Pc[i].x,Pc[i].y,Pc[i].color);
}
}
void Epck()/*吃饼*/
{int i;
for(i=0;i<num;i++)
if(x0==Pc[i].x&&y0==Pc[i].y)
{for(i++;i<5;i++)
Pc[i-1]=Pc[i];
num--;
break;
}
}
void Cwls()
{if(!num)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"YOU WIN");
key=bioskey(0);
cleardevice();
}
else
if(abs(x0-x1)<5&&abs(y0-y1)<5)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"YOU LOSE");
key=bioskey(0);
cleardevice();
}
}
void Initcxy()
{randomize();
x0=random(555);
x0=x0-x0%5+5;
y0=random(400);
y0=y0-y0%80+80;
x1=random(480);
x1=x1-x1%80+80;
y1=random(478);
y1=y1-y1%2+2;
}
#include<stdlib.h>
#include<dos.h>
#include<bios.h>
#include<math.h>
#define Enter 7181
#define ESC 283
#define UP 18432
#define DOWN 20480
#define LEFT 19200
#define RIGHT 19712
void Initgra(void);
void Initpck(void);
void Initcxy(void);
void Dmap(void);
void Dpck(void);
void Cmov(void);
void Swmg(void);/*处理错误的玩家操作*/
void Hccm(void);/*协助处理玩家操作*/
void Scmv(void);/*处理玩家操作*/
void Epck(void);
void Caam(void);
void Cwls(void);
void Dcil(int,int,int);/*画圆*/
int x0,y0,x1,y1,check1,check2,key=0,num;
struct Pancake
{int x;int y;int color;}Pc[5];
main()
{Initgra();/*初始化图形驱动程序*/
Initpck();/*初始化饼*/
Initcxy();/*初始化圆的坐标*/
while(1)
{Dmap();/*画地图*/
Dpck();/*画饼*/
Cmov();/*玩家操作*/
Epck();/*吃饼*/
Caam();/*自动操作*/
Cwls();/*判断输赢*/
if(key==ESC)/*结束游戏*/
break;
if(key==Enter)/*继续游戏*/
{Initpck();
Initcxy();
key=0;}
delay(15000);
}
closegraph();
}
void Dcil(int x,int y, int color)
{setcolor(color);
setfillstyle(1,color);
circle(x,y,10);
floodfill(x,y,color);
}
void Dmap()/*地图为网格*/
{int i;
setcolor(4);
for(i=0;i<=7;i++)
{line(0,80*i,560,80*i);
line(80*i,0,80*i,560);
}
}
void Cmov()
{ if(bioskey(1))
{key=bioskey(0);
Swmg();
switch(key)
{case UP:Hccm();y0-=5;Scmv();break;
case DOWN:Hccm();y0+=5;Scmv();break;
case LEFT:Hccm();x0-=5;Scmv();break;
case RIGHT:Hccm();x0+=5;Scmv();break;
default:break;
}
}
}
void Swmg()
{if(x0%80==0&&y0%80!=0)
switch(key)
{case LEFT:
case RIGHT:key=0;break;
default:break;
}
else if(x0%80!=0&&y0%80==0)
switch(key)
{case UP:
case DOWN:key=0;break;
default:break;
}
}
void Scmv()/*玩家控制的圆*/
{if(x0%80==0&&y0%80!=0)/*位于纵线*/
{if(check2>y0)
{Dcil(x0,y0+5,0);Dcil(x0,y0,4);}
else
if(check2<y0)
{Dcil(x0,y0-5,0);Dcil(x0,y0,4);}
}
else
if(x0%80!=0&&y0%80==0)/*位于横线*/
{if(check1>x0)
{Dcil(x0+5,y0,0);Dcil(x0,y0,4);}
else
if(check1<x0)
{Dcil(x0-5,y0,0);Dcil(x0,y0,4);}
}
else
if(x0%80==0&&y0%80==0)/*位于交点*/
{if(check1==x0&&check2>y0)
{Dcil(x0,y0+5,0);Dcil(x0,y0,3);}
else
if(check1==x0&&check2<y0)
{Dcil(x0,y0-5,0);Dcil(x0,y0,3);}
else
if(check2==y0&&check1>x0)
{Dcil(x0+5,y0,0);Dcil(x0,y0,3);}
else
if(check2==y0&&check1<x0)
{Dcil(x0-5,y0,0);Dcil(x0,y0,3);}
}
}
void Caam()/*自动控制的圆,根据玩家控制的圆的位置,自行移动*/
{if(x1%80==0&&y1%80!=0)
{if(y0>y1)
{Dcil(x1,y1,0);y1+=2;Dcil(x1,y1,1);}
else
if(y0<y1)
{Dcil(x1,y1,0);y1-=2;Dcil(x1,y1,1);}
}
else
if(y1%80==0&&x1%80!=0)
{if(x0>x1)
{Dcil(x1,y1,0);x1+=2;Dcil(x1,y1,1);}
else
if(x0<x1)
{Dcil(x1,y1,0);x1-=2;Dcil(x1,y1,1);}
}
else
if(x1%80==0&&y1%80==0)
{if((x0-x1)>0&&abs(y0-y1)<=(x0-x1))
{Dcil(x1,y1,0);x1+=2;Dcil(x1,y1,2);}
else if((x0-x1)<0&&abs(y0-y1)<=(x1-x0))
{Dcil(x1,y1,0);x1-=2;Dcil(x1,y1,2);}
else if((y0-y1)>0&&abs(x0-x1)<(y0-y1))
{Dcil(x1,y1,0);y1+=2;Dcil(x1,y1,2);}
else if((y0-y1)<0&&abs(x0-x1)<(y1-y0))
{Dcil(x1,y1,0);y1-=2;Dcil(x1,y1,2);}
}
}
void Initgra()
{int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\tc");
}
void Hccm()
{check1=x0;
check2=y0;
}
void Initpck()/*初始化饼*/
{int i;
num=5;
randomize();
for(i=0;i<5;i++)
{Pc[i].x=(random(6)+1)*80;
Pc[i].y=(random(6)+1)*80;
Pc[i].color=random(14)+1;
}
}
void Dpck()/*画饼*/
{int i;
for(i=0;i<num;i++)
{setcolor(Pc[i].color);
setfillstyle(1,Pc[i].color);
circle(Pc[i].x,Pc[i].y,5);
floodfill(Pc[i].x,Pc[i].y,Pc[i].color);
}
}
void Epck()/*吃饼*/
{int i;
for(i=0;i<num;i++)
if(x0==Pc[i].x&&y0==Pc[i].y)
{for(i++;i<5;i++)
Pc[i-1]=Pc[i];
num--;
break;
}
}
void Cwls()
{if(!num)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"YOU WIN");
key=bioskey(0);
cleardevice();
}
else
if(abs(x0-x1)<5&&abs(y0-y1)<5)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"YOU LOSE");
key=bioskey(0);
cleardevice();
}
}
void Initcxy()
{randomize();
x0=random(555);
x0=x0-x0%5+5;
y0=random(400);
y0=y0-y0%80+80;
x1=random(480);
x1=x1-x1%80+80;
y1=random(478);
y1=y1-y1%2+2;
}