c语言链表贪吃蛇教程,编《贪吃蛇》最简单的算法,链表法
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
#include
#include
#include
#include
#include
#define?ESC?0x011b
#define?UP?0x4800
#define?DOWN?0x5000
#define?LEFT?0x4b00
#define?RIGHT?0x4d00
struct?rode
{int?x;
int?y;
struct?rode?*next;
};
struct?rode?*head,food;
void?initgra()
{int?dr=DETECT,mode=0;
registerbgidriver(EGAVGA_driver);
initgraph(&dr,&mode,"");
}
int?message(char?*s)
{?char?c;
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);else?return(1);
}
initgame()
{
int?i;
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(int?x,int?y)
{
struct?rode?*newrode;
newrode=(struct?rode*)malloc(sizeof(struct?rode));
newrode->x=x;
newrode->y=y;
newrode->next=head;
head=newrode;
draw(x,y);
}
delete()
{struct?rode?*p1,*p2;
p1=p2=head;
while?(p1->next?!=NULL)?{
p2=p1;
p1=p1->next;
}
redraw(p1->x,p1->y);
free(p1);
p2->next=NULL;
}
long?getkey(long?oldkey)
{long?k;
if(bioskey(1)==0)?return?0;
k=bioskey(0);
if(oldkey==UP?&&?k==DOWN)?return?0;
if(oldkey==DOWN?&&k==UP)?return?0;
if(oldkey==RIGHT&&k==LEFT)?return?0;
if(oldkey==LEFT&&k==RIGHT)?return?0;
return?k;
}
clear()
{struct?rode?*p1,*p2;
p1=p2=head;
while(p1){
p2=p1->next;
free(p1);
p1=p2;
}
head=NULL;
}
draw(int?x,int?y)
{setcolor(1);
setfillstyle(1,1);
bar((x-1)*20+1,(y-1)*20+1,x*20-1,y*20-1);
}
redraw(int?x,int?y)
{int?c;
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()
{struct?time?t;
int?oldtime;
long?key,oldkey;
int?nx,ny,x,y;
long?getkey(long?oldtime);
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)
{case?UP:x=0;y=-1;break;
case?DOWN:x=0;y=1;break;
case?LEFT:x=-1;y=0;break;
case?RIGHT: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("Do?you?want?play?again?[Y/N]")?)?goto?again;
else
gameover();
delete();
add(nx,ny);
}
}
gameover();
}
總結
以上是生活随笔為你收集整理的c语言链表贪吃蛇教程,编《贪吃蛇》最简单的算法,链表法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 正则 或者_如何彻底搞懂面向 We
- 下一篇: efi分区咋移动到c盘里_如何移动的EF