一个很经典的老游戏(吃豆子),,但是用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();
}