2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > c语言链表贪吃蛇教程 编《贪吃蛇》最简单的算法 链表法

c语言链表贪吃蛇教程 编《贪吃蛇》最简单的算法 链表法

时间:2023-03-04 06:00:05

相关推荐

c语言链表贪吃蛇教程 编《贪吃蛇》最简单的算法 链表法

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

#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();

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。