C语言中的经典,强力推荐!!!

作者在 2008-01-29 19:41:15 发布以下内容
心情: 高兴


  一个很经典的老游戏(吃豆子),,但是用C语言写出来,感觉就是非同寻常!

  大家看看,强力推荐~~~

代码:

/*................................................................include files*/
#include<graphics.h>
#include<stdlib.h>
#include<time.h>
#include<bian.h>
#include<house.h>
#include<dbox.h>
#include<player.h>
#include<enemy.h>
#include<dou.h>


/*........................................................................defines*/
#define up 0x4800
#define down 0x5000
#define left 0x4b00
#define right 0x4d00
#define esc 0x011b

#define M 30
#define N 22
#define E 4

 

 

long score=0;


/*........................................................................................................map*/
int map[N][M]={
    {1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1},
    {1 ,0 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1},
    {1 ,2 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,1 ,1 ,2 ,2 ,2 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,2 ,2 ,2 ,1 ,1 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,1 ,2 ,2 ,1 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,3 ,3 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1},
    {1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,3 ,3 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,1 ,2 ,2 ,1 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,1 ,1 ,1 ,2 ,2 ,2 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,2 ,2 ,2 ,1 ,1 ,1 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,1},
    {1 ,2 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,1 ,2 ,1 ,1 ,1 ,2 ,1},
    {1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1},
    {1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1}
};

 

/*................................................................................................main start*/
int main(void)
{

/*................................................................................................define vary*/
 int gd=VGA,gm=VGAHI;
 int mx,my,mn=0;/*map x,y*/
 int px,py,pn,pl,ex[E],ey[E],ei;
 int key,flag=1;

 

/*.................................................................................................init and prepares*/
 px=1,py=1,pn=1,pl=1;
 for(ei=0;ei<E;ei++)
 {
  ex[ei]=15,ey[ei]=13;
 }


 initgraph(&gd,&gm,'');
 randomize();

 bian(6);
/*------------------------------------------------------------------------------------------------------draw map*/
 for(my=0;my<N;my++)
       for(mx=0;mx<M;mx++)
        {if(map[my][mx]==1) dbox(19+20*mx,25+20*my);
         else {if((map[my][mx]==3)&&(map[my+1][mx]==3)&&(map[my][mx+1]==3)&&(map[my+1][mx+1]==3)&&(map[my][mx-1]!=3)) house(19+20*mx,25+20*my);
               else if(map[my][mx]==2) dou(19+20*mx,25+20*my);}
         }
/*........................................................................................................game start*/
 while(flag)
    {
     while(!kbhit()&&pl)/*game sourse*/
      {
        gotoxy(3,1);
        printf("score:  %d",score);
        setcolor(0);
        setfillstyle(1,0);
        bar(19+20*px,25+20*py,19+20*px+19,25+20*py+19);

 

 

        switch(pn)
         {
           case 1:
             {if(map[py-1][px]!=1&&map[py-1][px]!=3) {py-=1;if(map[py][px]==2) {map[py][px]=0;score+=10;}break;}
             else break;}
           case 2:
             {if(map[py][px-1]!=1&&map[py][px-1]!=3) {px-=1;if(map[py][px]==2) {map[py][px]=0;score+=10;}break;}
             else break;}
           case 3:
             {if(map[py+1][px]!=1&&map[py+1][px]!=3) {py+=1;if(map[py][px]==2) {map[py][px]=0;score+=10;}break;}
             else break;}
           case 4:
             {if(map[py][px+1]!=1&&map[py][px+1]!=3) {px+=1;if(map[py][px]==2) {map[py][px]=0;score+=10;}break;}
             else break;}
          } /*control player*/

 

       for(ei=0;ei<E;ei++)

      {
          switch (random(23))
      {
       case 0: if(map[ey[ei]-1][ex[ei]]!=1&&map[ey[ei]-1][ex[ei]]!=3)
               {setcolor(0);setfillstyle(1,0);bar(19+20*ex[ei],25+20*ey[ei],19+20*ex[ei]+19,25+20*ey[ei]+19);if(map[ey[ei]][ex[ei]]==2) dou(19+20*ex[ei],25+20*ey[ei]);else;ey[ei]--; break;}
       case 1: if(map[ey[ei]][ex[ei]-1]!=1&&map[ey[ei]][ex[ei]-1]!=3)
               {setcolor(0);setfillstyle(1,0);bar(19+20*ex[ei],25+20*ey[ei],19+20*ex[ei]+19,25+20*ey[ei]+19);if(map[ey[ei]][ex[ei]]==2) dou(19+20*ex[ei],25+20*ey[ei]);else;ex[ei]--; break;}
       case 2: if(map[ey[ei]+1][ex[ei]]!=1&&map[ey[ei]+1][ex[ei]]!=3)
               {setcolor(0);setfillstyle(1,0);bar(19+20*ex[ei],25+20*ey[ei],19+20*ex[ei]+19,25+20*ey[ei]+19);if(map[ey[ei]][ex[ei]]==2) dou(19+20*ex[ei],25+20*ey[ei]);else;ey[ei]++; break;}
       case 3: if(map[ey[ei]][ex[ei]+1]!=1&&map[ey[ei]][ex[ei]+1]!=3)
               {setcolor(0);setfillstyle(1,0);bar(19+20*ex[ei],25+20*ey[ei],19+20*ex[ei]+19,25+20*ey[ei]+19);if(map[ey[ei]][ex[ei]]==2) dou(19+20*ex[ei],25+20*ey[ei]);else;ex[ei]++; break;}
       case 4:
       case 5:
       case 6:
       case 7:
       case 8:
       case 9:
       case 10:
       case 11:
       case 12:
       case 13:
       case 14:
       case 15:
       case 16:
       case 17:
       case 18:
       case 19:
       case 20:
       case 21:   if(!random(2))
                    {if((ex[ei]<px)&&map[ey[ei]][ex[ei]+1]!=1&&map[ey[ei]][ex[ei]+1]!=3)
                     {setcolor(0);setfillstyle(1,0);bar(19+ex[ei]*20,25+ey[ei]*20,19+ex[ei]*20+19,25+ey[ei]*20+19);if(map[ey[ei]][ex[ei]]==2) dou(19+ex[ei]*20,25+ey[ei]*20);else;ex[ei]++;}  else;
                     if((ex[ei]>px)&&map[ey[ei]][ex[ei]-1]!=1&&map[ey[ei]][ex[ei]-1]!=3)
                     {setcolor(0);setfillstyle(1,0);bar(19+ex[ei]*20,25+ey[ei]*20,19+ex[ei]*20+19,25+ey[ei]*20+19);if(map[ey[ei]][ex[ei]]==2) dou(19+ex[ei]*20,25+ey[ei]*20);else;ex[ei]--;}  else;
                     if((ey[ei]<py)&&map[ey[ei]+1][ex[ei]]!=1&&map[ey[ei+1]][ex[ei]]!=3)
                     {setcolor(0);setfillstyle(1,0);bar(19+ex[ei]*20,25+ey[ei]*20,19+ex[ei]*20+19,25+ey[ei]*20+19);if(map[ey[ei]][ex[ei]]==2) dou(19+ex[ei]*20,25+ey[ei]*20);else;ey[ei]++;}  else;
                     if((ey[ei]>py)&&map[ey[ei]-1][ex[ei]]!=1&&map[ey[ei]-1][ex[ei]]!=3)
                     {setcolor(0);setfillstyle(1,0);bar(19+ex[ei]*20,25+ey[ei]*20,19+ex[ei]*20+19,25+ey[ei]*20+19);if(map[ey[ei]][ex[ei]]==2) dou(19+ex[ei]*20,25+ey[ei]*20);else;ey[ei]--;}  else;
                     }

                   break;

 


       default : break;}
       }/*contrlo enemy*/

/*------------------------------------touch test*/
       for(ei=0;ei<E;ei++)
       if(ex[ei]==px&&ey[ei]==py) {flag=0;pl=0;break;}else;

 

/*--------------------------------draw man*/

        for(ei=0;ei<E;ei++)
        enemy(19+ex[ei]*20,25+ey[ei]*20);


        player(px,py,0);
        delay(20000);
        player(px,py,pn);
        delay(30000);

      }/*end of while(!kbhit())*/

     key=bioskey(0);

     if(key==esc)/*esc to exit*/
       flag=0;
       else
         if(key==up)
           pn=1;
           else
             if(key==right)
                pn=4;
                else
                  if(key==left)
                    pn=2;
                    else
                      if(key==down)
                        pn=3;else;

 

     }/*end of while(flag)*/

 

 for(my=0;my<N;my++)
       for(mx=0;mx<M;mx++)
       {if(map[my][mx]==2) mn++;else;}


 cleardevice();
 closegraph();
 if(!pl)
 {gotoxy(22,8);
  printf("you lost");}
 if(!mn)
 {gotoxy(22,8);
  printf("congratulations");}
 gotoxy(22,10);
 printf("your score is :   %d",score);

 getch();
}

C | 阅读 2604 次
文章评论,共0条
游客请输入验证码
浏览50188次
最新评论