该楼层疑似违规已被系统折叠隐藏此楼查看此楼
#include
#include
#include
#include
#include
#defineESC0x011b
#defineUP0x4800
#defineDOWN0x5000
#defineLEFT0x4b00
#defineRIGHT0x4d00
structrode
{intx;
inty;
structrode*next;
};
structrode*head,food;
voidinitgra()
{intdr=DETECT,mode=0;
registerbgidriver(EGAVGA_driver);
initgraph(&dr,&mode,"");
}
intmessage(char*s)
{charc;
setfillstyle(1,4);
setcolor(1);
settextstyle(0,0,3);
bar(640/2-200,480/2-50,640/2+250,480/2+50);
outtextxy(640/2-200,480/2-20,s);
c=getch();
sleep(2);
if(c=='n'||c=='N')return(0);elsereturn(1);
}
initgame()
{
inti;
randomize();
cleardevice();
clear();
setbkcolor(15);
setcolor(4);
for(i=0;i<=640;i+=20)line(i,0,i,479);
for(i=0;i<=480;i+=20)line(0,i,639,i);
add(5,5);
add(5,6);
add(5,7);
rndfood();
getch();
}
add(intx,inty)
{
structrode*newrode;
newrode=(structrode*)malloc(sizeof(structrode));
newrode->x=x;
newrode->y=y;
newrode->next=head;
head=newrode;
draw(x,y);
}
delete()
{structrode*p1,*p2;
p1=p2=head;
while(p1->next!=NULL){
p2=p1;
p1=p1->next;
}
redraw(p1->x,p1->y);
free(p1);
p2->next=NULL;
}
longgetkey(longoldkey)
{longk;
if(bioskey(1)==0)return0;
k=bioskey(0);
if(oldkey==UP&&k==DOWN)return0;
if(oldkey==DOWN&&k==UP)return0;
if(oldkey==RIGHT&&k==LEFT)return0;
if(oldkey==LEFT&&k==RIGHT)return0;
returnk;
}
clear()
{structrode*p1,*p2;
p1=p2=head;
while(p1){
p2=p1->next;
free(p1);
p1=p2;
}
head=NULL;
}
draw(intx,inty)
{setcolor(1);
setfillstyle(1,1);
bar((x-1)*20+1,(y-1)*20+1,x*20-1,y*20-1);
}
redraw(intx,inty)
{intc;
c=getbkcolor();
setcolor©;
setfillstyle(1,c);
bar((x-1)*20+1,(y-1)*20+1,x*20-1,y*20-1);
}
rndfood()
{
food.x=random(31)+1;
food.y=random(23)+1;
draw(food.x,food.y);
}
gameover()
{clear();
closegraph();
exit(1);
}
main()
{structtimet;
intoldtime;
longkey,oldkey;
intnx,ny,x,y;
longgetkey(longoldtime);
initgra();
again:
initgame();
x=0;
y=1;
oldkey=DOWN;
key=DOWN;
gettime(&t);
oldtime=t.ti_hund;
while(key!=ESC)
{gettime(&t);
if((t.ti_hund+100-oldtime)%100<40)
{
if((key=getkey(oldkey))!=0)
{
switch(key)
{caseUP:x=0;y=-1;break;
caseDOWN:x=0;y=1;break;
caseLEFT:x=-1;y=0;break;
caseRIGHT:x=1;y=0;break;
default:continue;
}
oldkey=key;
}
}
else{
oldtime=t.ti_hund;
nx=head->x+x;
ny=head->y+y;
if(nx==food.x&&ny==food.y)
{
add(food.x,food.y);
rndfood();
continue;
}
if(nx>32||nx<1||ny>24||ny<1)
if(message("Doyouwantplayagain?[Y/N]"))gotoagain;
else
gameover();
delete();
add(nx,ny);
}
}
gameover();
}