共有回帖数 0 个
-
#includestdio.h
#includedos.h
#includestring.h
#includestdlib.h
#includebios.h
#includegraphics.h
#includeconio.h
#include alloc.h
#includetime.h
#include math.h
#define MAX 3 /*游戏的总关数*/
#define STEPMAX 3 /*悔棋的最大步数*/
#define Key_R 0x1372
#define Key_Up 0x4800
#define Key_Enter 0x1c0d
#define Key_Down 0x5000
#define Key_P 0x1970
#define Key_Esc 0x11b
#define Key_Right 0x4d00
#define Key_Left 0x4b00
#define BKCOLOR GREEN /*设置背景颜色*/
#define STARTX 40 /*画游戏界面时,二维数组中ghose[0][0]左上角顶点在VGA模式下的横坐标*/
#define STARTY 80 /*画游戏界面时,二维数组中ghose[0][0]左上角顶点在VGA模式下的纵坐标*/
int ghose[10][10]; /*用来表示游戏中各种状态的二维数组*/
int BOXNUM; /*每关中箱子的个数*/
int MISSIONNUM; /*玩家正在玩的关数*/
int Key; /*从键盘读取按键值*/
int STEPNUM; /*人走的步数*/
int DIRECTIONKEY; /*用来记录玩家所按的方向键*/
int BOXMOVE[STEPMAX]; /*记录人行走时箱子移动了没有.如有,BOXMOVE=1,否则BOXMOVE=0*/
int STEP[STEPMAX]; /*记录人行走的方向*/
typedef struct CURRENT
{ int x;
int y;
}PLAYER;
PLAYER p; /*p.x和p.y分别表示人当前所在的横纵坐标*/
typedef struct ADD
{ int x;
int y;
}ADD; /*人行走或悔棋时,用来表示人下一步移动需要增加的横纵坐标值*/
typedef struct STAR
{ int x;
int y;
int c;
} STAR;
STAR s[300]; /*画星星闪动的画面,x,y分别表示每颗星星所在的位置,c表示星星的颜色*/
DRAWSTAR1() /*画星星*/
{int i,j,m,n,dotx,doty,color,maxcolor;
m=getmaxx();
n=getmaxy();
maxcolor=getmaxcolor();
for(i=0;i300;i++)
{ s.x=random(m+1);
s.y=random(n+1);
s.c=random(maxcolor);
putpixel(s.x,s.y,s.c);}}
DRAWSTAR() /*让星星的坐标不变,颜色变换*/
{int i,j,m,n,dotx,doty,color,maxcolor;
m=getmaxx();
n=getmaxy();
maxcolor=getmaxcolor();
for(i=0;i300;i++)
{ s.x=random(m+1);
s.y=random(n+1);
s.c=random(maxcolor);
putpixel(s.x,s.y,s.c);
}
do{ for(i=0;i20000;i++)
delay(2);
for(j=0;j300;j++)
{
s[j].c=random(maxcolor);
putpixel(s[j].x,s[j].y,s[j].c);}
}while(!bioskey(1));
}
GOOD() /*画火球滚动的画面*/
{void * ptr;
float i;
setactivepage(1);
setcolor(RED);
setfillstyle(1,14);
fillellipse(10,10,10,10);
ptr=malloc(imagesize(0,0,20,20));
getimage(0,0,20,20,ptr);
randomize();
setactivepage(0);
DRAWSTAR1();
for(i=0;i6.28*4;i=i+0.005)
{putimage(300+8*(cos(i)+i*sin(i)),240+6*(sin(i)-i*cos(i)),ptr,COPY_PUT);
putimage(300+8*(cos(i)+(i)*sin(i)),240+6*(sin(i)-(i)*cos(i)),ptr,COPY_PUT);
if(kbhit()) break;
delay(10);
}
}
void GAME() /*游戏过程的控制*/
{ int i,j,flag;
ADD a;
MISSIONNUM=0;
NEXTMISSION();
do { flag=0;
Key=bioskey(0);
switch(Key)
{ case Key_Enter:{NEXTMISSION();break;}
case Key_Up:{a.x=-1;a.y=0;flag=1;DIRECTIONKEY=Key;break;}
case Key_Down:{a.x=1;a.y=0;flag=1;DIRECTIONKEY=Key;break;}
case Key_Left:{a.x=0;a.y=-1;flag=1;DIRECTIONKEY=Key;break;}
case Key_Right:{a.x=0;a.y=1;flag=1;DIRECTIONKEY=Key;break;}
case Key_R:{MISSIONNUM--;NEXTMISSION();break;}
case Key_P:{REVERSELYMOVE();break;}
case Key_Esc:{DRAWEND();break;}}
if(flag==1)
{ if(MOVE(a))
{ REGISTERSTEP();
if(JUDGEWIN())
{settextstyle(1,0,2);
setcolor(RED);
outtextxy(40,10,"YOU HAVE PASSED THIS MISSION!");
outtextxy(40,30,"PLEASE PRESS ANYKEY TO CONTINUE!");
bioskey(0);
NEXTMISSION();}}}}while(1);
}
NEXTMISSION() /*画下一关的游戏界面*/
{int i,j;
if(MISSIONNUM+1MAX)
MISSIONNUM=1;
else MISSIONNUM++;
cleardevice();
CHOOSEMISSION(MISSIONNUM);
for(i=0;i10;i++)
for(j=0;j10;j++)
DRAWMISSION(ghose[j],j,i);
DRAWINTRODUCTION();
settextstyle(1,0,2);
switch(MISSIONNUM)
{ case 1:outtextxy(60,50,"MISSION 1");break;
case 2:outtextxy(60,50,"MISSION 2");break;
case 3:outtextxy(60,50,"MISSION 3");break;
}
for(i=0;iSTEPMAX;i++)
STEP=BOXMOVE=0;
STEPNUM=0;}
REGISTERSTEP() /*登记步子*/
{ int i;
STEPNUM++;
i=(STEPNUM-1)%STEPMAX;
STEP=DIRECTIONKEY;}
int JUDGEWIN() /*人每走一步,就判断赢了没有*/
{int n=0,i,j;
for(i=0;i10;i++)
for(j=0;j10;j++)
if(ghose[j]==6) n++;
if(n==BOXNUM) return 1;
else return 0;}
REVERSELYMOVE() /*对悔棋的处理*/
{ int i;
ADD a;
i=(STEPNUM-1)%STEPMAX;
if(STEP==0) return;
else{ switch(STEP)
{case Key_Up:{a.x=1;a.y=0;MOVEBACK(a);break;}
case Key_Down:{a.x=-1;a.y=0;MOVEBACK(a);break;}
case Key_Left:{a.x=0;a.y=1;MOVEBACK(a);break;}
case Key_Right:{a.x=0;a.y=-1;MOVEBACK(a);break;} }
STEPNUM--;STEP=0;BOXMOVE=0;}}
MOVE(ADD a) /*依据人的下一位置的状态来控制人的行走*/
{ int flag;
int i=STEPNUM%STEPMAX;
switch(ghose[p.x+a.x][p.y+a.y])
{ case 0:{if(ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=4;}
if(ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=0;}
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
p.x=p.x+a.x;p.y=p.y+a.y;
ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=2;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
flag=1;break;}
case 3:{if(ghose[p.x+2*a.x][p.y+2*a.y]==0||ghose[p.x+2*a.x][p.y+2*a.y]==4)
{if(ghose[p.x+2*a.x][p.y+2*a.y]==0)
{if(ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=4;}
if(ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=0;}
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=ghose[p.x+2*a.x][p.y+2*a.y]=0;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x);
ghose[p.x+a.x][p.y+a.y]=2;
ghose[p.x+2*a.x][p.y+2*a.y]=3;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x); }
if(ghose[p.x+2*a.x][p.y+2*a.y]==4)
{if(ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=4;}
if(ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=0;}
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=ghose[p.x+2*a.x][p.y+2*a.y]=0;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x);
ghose[p.x+a.x][p.y+a.y]=2;
ghose[p.x+2*a.x][p.y+2*a.y]=6;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x); }
p.x=p.x+a.x; p.y=p.y+a.y;flag=1;BOXMOVE=1;}
else flag=0;break;}
case 1:flag=0;break;
case 4:{if(ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=4;}
if(ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=0;}
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
p.x=p.x+a.x;p.y=p.y+a.y;
ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=5;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
flag=1;break;}
case 6:{if(ghose[p.x+2*a.x][p.y+2*a.y]==0||ghose[p.x+2*a.x][p.y+2*a.y]==4)
{if(ghose[p.x+2*a.x][p.y+2*a.y]==0)
{if(ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=4;}
if(ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=0;}
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=ghose[p.x+2*a.x][p.y+2*a.y]=0;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x);
ghose[p.x+a.x][p.y+a.y]=5;
ghose[p.x+2*a.x][p.y+2*a.y]=3;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x); }
if(ghose[p.x+2*a.x][p.y+2*a.y]==4)
{if(ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=4;}
if(ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x][p.y]=0;}
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=ghose[p.x+2*a.x][p.y+2*a.y]=0;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x);
ghose[p.x+a.x][p.y+a.y]=5;
ghose[p.x+2*a.x][p.y+2*a.y]=6;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
DRAWMISSION(ghose[p.x+2*a.x][p.y+2*a.y],p.y+2*a.y,p.x+2*a.x); }
p.x=p.x+a.x; p.y=p.y+a.y;flag=1;BOXMOVE=1;}
else flag=0;break;}}
return flag;
}
MOVEBACK(ADD a) /*分箱子没有移动和箱子移动了两种情况分别进行悔棋*/
{ int i=(STEPNUM-1)%STEPMAX;
if(BOXMOVE==0)
{ if(ghose[p.x+a.x][p.y+a.y]==0&&ghose[p.x][p.y]==2)
{ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=2;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);}
if(ghose[p.x+a.x][p.y+a.y]==4&&ghose[p.x][p.y]==5)
{ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x][p.y]=4;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=5;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);}
if(ghose[p.x+a.x][p.y+a.y]==5&&ghose[p.x][p.y]==0)
{ ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x][p.y]=4;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=2;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);}
if(ghose[p.x+a.x][p.y+a.y]==2&&ghose[p.x][p.y]==4)
{ ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x][p.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=5;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);}
p.x=p.x+a.x;p.y=p.y+a.y;}
else if(BOXMOVE==1)
{
if(ghose[p.x-a.x][p.y-a.y]==3&&ghose[p.x][p.y]==2&&ghose[p.x+a.x][a.y+p.y]==0)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=0;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=3;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=2;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==3&&ghose[p.x][p.y]==5&&ghose[p.x+a.x][a.y+p.y]==0)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=0;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=6;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=2;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==3&&ghose[p.x][p.y]==2&&ghose[p.x+a.x][a.y+p.y]==4)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=0;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=3;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=5;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==3&&ghose[p.x][p.y]==5&&ghose[p.x+a.x][a.y+p.y]==4)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=0;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=6;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=5;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==6&&ghose[p.x][p.y]==2&&ghose[p.x+a.x][a.y+p.y]==0)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=4;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=3;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=2;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==6&&ghose[p.x][p.y]==5&&ghose[p.x+a.x][a.y+p.y]==0)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=4;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=6;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=2;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==6&&ghose[p.x][p.y]==2&&ghose[p.x+a.x][a.y+p.y]==4)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=4;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=3;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=5;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
if(ghose[p.x-a.x][p.y-a.y]==6&&ghose[p.x][p.y]==5&&ghose[p.x+a.x][p.y+a.y]==4)
{ghose[p.x-a.x][p.y-a.y]=ghose[p.x][p.y]=ghose[p.x+a.x][p.y+a.y]=0;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
ghose[p.x-a.x][p.y-a.y]=4;
DRAWMISSION(ghose[p.x-a.x][p.y-a.y],p.y-a.y,p.x-a.x);
ghose[p.x][p.y]=6;
DRAWMISSION(ghose[p.x][p.y],p.y,p.x);
ghose[p.x+a.x][p.y+a.y]=5;
DRAWMISSION(ghose[p.x+a.x][p.y+a.y],p.y+a.y,p.x+a.x);
}
p.x=p.x+a.x; p.y=p.y+a.y;}}
DRAWEND() /*画结束时的界面*/
{ setbkcolor(BLACK);
cleardevice();
setcolor(YELLOW);
setfillstyle(1,YELLOW);
circle(440,100,80);
floodfill(401,101,YELLOW);
setcolor(YELLOW);
settextstyle(1,0,8);
outtextxy(120,240,"GOODBYE !");
DRAWSTAR();
bioskey(0);
exit(0);}
ABOVEALL() /*画开始时的欢迎界面*/
{ setcolor(YELLOW);
setfillstyle(1,YELLOW);
circle(440,100,80);
floodfill(401,101,YELLOW);
setcolor(RED);
settextstyle(1,0,5);
outtextxy(5,240,"WELCOME TO THE BOX WORLD!");
DRAWSTAR();
bioskey(0);
}
void DrawRectangle(int i,int j,int k,int l) /*用于画登陆界面中的矩形边框*/
{ setcolor(RED);
setfillstyle(1,GREEN);
rectangle(i,j,k,l);
floodfill(i+1,j+1,BLACK);
}
void DrawStar() /*用户登陆时在界面指定地方输出文字*/
{ int n;
char *s[4]={"USERS LANDING","ACCOUNTS","PASSWORD","VALIDATE"};
settextstyle(0,0,2);
setcolor(RED);
outtextxy(140,100,s[0]);
settextstyle(0,0,1);
for(n=1;n4;n++)
outtextxy(120,100+n*30,s[n]);
settextstyle(0,0,2);
outtextxy(270,188,"(ACDF)");
}
DRAWLANDING() /*画登陆界面*/
{
DrawRectangle(185,121,360,141);
DrawRectangle(185,152,360,172);
DrawRectangle(185,184,270,204);
DrawStar();
settextstyle(0,0,1);
bioskey(0);
if(!bioskey(1))
{setcolor(GREEN);
outtextxy(187,129,"200531500194");
outtextxy(187,160,"**********");
settextstyle(0,0,2);
outtextxy(187,188,"ACDF");
}
bioskey(0);
}
void Init() /*驱动显卡*/
{
int gd=VGA,gm=VGAHI;
initgraph(&gd,&gm,"c:\tc");
}
DRAWBACK(int i,int j) /*画空地*/
{ setcolor(GREEN);
setfillstyle(1,GREEN);
rectangle(STARTX+i*36,STARTY+j*36,STARTX+(i+1)*36,STARTY+(j+1)*36);
floodfill(STARTX+i*36+18,STARTY+j*36+18,GREEN);}
DRAWMAN(int i,int j) /*画空地上的人*/
{ setcolor(RED);
setfillstyle(1,WHITE);
circle(STARTX+18+i*36,STARTY+18+j*36,18);
floodfill(STARTX+18+i*36,STARTY+18+j*36,RED);
arc(STARTX+18+i*36-6,STARTY+18+j*36-4,20,160,4);
arc(STARTX+18+i*36+6,STARTY+18+j*36-4,20,160,4);
arc(STARTX+18+i*36,STARTY+18+j*36-4,220,320,14);
}
DRAWBOX(int i,int j) /*画空地上的箱子*/
{ setcolor(YELLOW);
setfillstyle(1,BLUE);
rectangle(STARTX+i*36,STARTY+j*36,STARTX+i*36+35,STARTY+j*36+35);
floodfill(STARTX+i*36+18,STARTY+j*36+18,YELLOW);
}
DRAWFLAG(int i,int j) /*画目的地--旗子*/
{setcolor(YELLOW);
arc(STARTX+i*36+12,STARTY+j*36-18,240,300,24);
arc(STARTX+i*36+12,STARTY+j*36-18+18,240,300,24);
arc(STARTX+i*36+12+18,STARTY+j*36-18+30,60,120,12);
arc(STARTX+i*36+12+18,STARTY+j*36-18+48,60,120,12);
line(STARTX+i*36+12-12,STARTY+j*36-18+22,STARTX+i*36+12-12,STARTY+j*36-18+53);
line(STARTX+i*36+12+23,STARTY+j*36-18+20,STARTX+i*36+12+23,STARTY+j*36-18+38);
}
DRAWMAN1(int i,int j) /*画到达目的地后的人*/
{ setcolor(RED);
setfillstyle(1,YELLOW);
circle(STARTX+18+i*36,STARTY+18+j*36,18);
floodfill(STARTX+18+i*36,STARTY+18+j*36,RED);
arc(STARTX+18+i*36-6,STARTY+18+j*36-4,20,160,4);
arc(STARTX+18+i*36+6,STARTY+18+j*36-4,20,160,4);
arc(STARTX+18+i*36,STARTY+18+j*36-4,220,320,14); }
DRAWBOX1(int i,int j) /*画到达目的地后的箱子*/
{ setcolor(YELLOW);
setfillstyle(1,YELLOW);
bar(STARTX+i*36,STARTY+j*36,STARTX+i*36+36,STARTY+j*36+36);
}
DRAWWALL(int i,int j) /*画障碍物--墙壁*/
{setcolor(RED);
setfillstyle(1,RED);
bar(STARTX+i*36,STARTY+j*36,STARTX+i*36+36,STARTY+j*36+36);}
DRAWMAN2(int i,int j) /* 画游戏界面时旁边介绍时用的人(在空地)*/
{ setcolor(RED);
setfillstyle(1,WHITE);
circle(i,j,18);
floodfill(i+1,j+1,RED);
arc(i-6,j-4,20,160,4);
arc(i+6,j-4,20,160,4);
arc(i,j-4,220,320,14);
}
DRAWBOX2(int i,int j) /* 画游戏界面时旁边介绍时用的箱子(在空地)*/
{ setcolor(YELLOW);
setfillstyle(1,BLUE);
rectangle(i,j,i+36,j+36);
floodfill(i+1,j+1,YELLOW);
}
DRAWBOX3(int i,int j) /* 画游戏界面时旁边介绍时用的箱子(在目的地)*/
{setcolor(YELLOW);
setfillstyle(1,YELLOW);
rectangle(i,j,i+36,j+36);
floodfill(i+1,j+1,YELLOW);
}
DRAWFLAG1(int i,int j) /* 画游戏界面时旁边介绍时用的目的地--旗子*/
{setcolor(YELLOW);
arc(i,j,240,300,24);
arc(i,j+18,240,300,24);
arc(i+18,j+30,60,120,12);
arc(i+18,j+48,60,120,12);
line(i-12,j+22,i-12,j+53);
line(i+24,j+20,i+24,j+38);
}
DRAWMAN3(int i,int j) /* 画游戏界面时旁边介绍时用的人(在目的地)*/
{ setcolor(RED);
setfillstyle(1,YELLOW);
circle(i,j,18);
floodfill(i+1,j+1,RED);
arc(i-6,j-4,20,160,4);
arc(i+6,j-4,20,160,4);
arc(i,j-4,220,320,14);}
DRAWWALL1(int i,int j) /* 画游戏界面时旁边介绍时用的障碍物--墙壁*/
{setcolor(RED);
setfillstyle(1,RED);
bar(i,j,i+36,j+36);}
MISSION1() /*画第一关的游戏界面*/
{int m,n;
for(m=0;m10;m++)
for(n=0;n10;n++)
ghose[m][n]=0;
for(m=0;m10;m++)
ghose[0][m]=ghose[9][m]=ghose[m][0]=ghose[m][9]=1;
for(m=1;m3;m++)
ghose[m][5]=1;
for(m=4;m7;m++)
ghose[m][1]=1;
for(m=4,n=7;m7&&n4;m++,n--)
ghose[m][n]=1;
ghose[6][8]=ghose[8][5]=ghose[5][3]=1;
ghose[8][1]=2;
for(m=2;m4;m++)
ghose[m][2]=ghose[3][m]=3;
ghose[1][8]=ghose[6][6]=ghose[8][8]=4;
p.x=8; p.y=1;BOXNUM=3;
}
MISSION2() /*画第二关的游戏界面*/
{int m,n;
for(m=0;m10;m++)
for(n=0;n10;n++)
ghose[m][n]=0;
for(m=0;m10;m++)
ghose[0][m]=ghose[9][m]=ghose[m][0]=ghose[m][9]=1;
for(m=2;m4;m++)
ghose[m][1]=ghose[3][m-1]=1;
for(m=3,n=6;m1&&n8;m--,n++)
ghose[m][n]=1;
for(m=4;m7;m++)
ghose[6][m]=ghose[m+1][5]=1;
ghose[1][4]=ghose[2][8]=1;
ghose[6][8]=2;
for(m=3;m5;m++)
ghose[m][4]=ghose[4][m]=3;
ghose[4][2]=3;
ghose[2][6]=ghose[3][7]=ghose[5][6]=ghose[7][6]=4;
p.x=6; p.y=8;BOXNUM=4;
}
MISSION3() /*画第三关的游戏界面*/
{int m,n;
for(m=0;m10;m++)
for(n=0;n10;n++)
ghose[m][n]=0;
for(m=0;m10;m++)
ghose[0][m]=ghose[9][m]=ghose[m][0]=ghose[m][9]=1;
for(m=2,n=5;m4&&n7;m++,n++)
ghose[m][n]=1;
ghose[1][3]=ghose[3][3]=ghose[4][1]=ghose[5][4]=ghose[6][7]=ghose[7][5]=ghose[8][3]=1;
ghose[4][4]=2;
for(m=6;m8;m++)
ghose[m][2]=ghose[m][4]=3;
ghose[7][3]=3;
for(m=6;m9;m++)
ghose[1][m]=4;
ghose[3][1]=ghose[8][7]=4;
p.x=4; p.y=4; BOXNUM=5; }
DRAWMISSION(int n,int i,int j) /*依据ghose[j]所对应的值,在相应位置画出图像*/
{
switch(n)
{
case 0:DRAWBACK(i,j);break;
case 1:DRAWWALL(i,j);break;
case 2:DRAWMAN(i,j);break;
case 3:DRAWBOX(i,j);break;
case 4:DRAWFLAG(i,j);break;
case 5:DRAWMAN1(i,j);break;
case 6:DRAWBOX1(i,j);break;
}
}
CHOOSEMISSION(int n) /*根据关数去画相应的游戏界面*/
{
int i,j;
for(i=0;i10;i++)
for(j=0;j10;j++)
ghose[j]=0;
switch(n)
{
case 1:MISSION1();break;
case 2:MISSION2();break;
case 3:MISSION3();break;
}
}
DRAWINTRODUCTION( ) /*画游戏界面旁边的介绍*/
{ int n;
char *s[6]={"WALL","MAN","BOX","DESTINATION","MAN&&DESTINATION","BOX&&DESTINATION"};
settextstyle(1,0,2);
outtextxy(430,40,"INTRODUCTION");
settextstyle(0,0,1);
for(n=0;n6;n++)
outtextxy(500,100+n*50,s[n]);
DRAWWALL1(455,82);
DRAWMAN2(473,151);
DRAWBOX2(455,182);
DRAWFLAG1(467,220);
DRAWMAN3(473,301);
DRAWBOX3(455,335);}
void main() /*主函数*/
{
Init();
GOOD();
setbkcolor(BLACK);
cleardevice();
ABOVEALL();
setbkcolor(BLUE);
cleardevice();
DRAWLANDING();
setbkcolor(BKCOLOR);
cleardevice();
GAME();
getch();
closegraph();
}
回复7楼
2006-07-02 11:52
举报 |个人企业举报垃圾信息举报
218.26.102.*
对于我这样的C语言初学者 ~~~~~~真是雾里看花~~~只能看出个大概来~~~~
楼主 2016-02-25 11:08 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知