共有回帖数  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号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知