
c语言贪吃蛇代码
-
2023年2月28日发(作者:女生拼音)#include"graphics.h"
#include"stdio.h"
#defineMAX200
#defineMAXX30
#defineMAXY30
#defineUP18432
#defineDOWN20480
#defineLEFT19200
#defineRIGHT19712
#defineESC283
#defineENTER7181
#definePAGEUP18688
#definePAGEDOWN20736
#defineKEY_U5749
#defineKEY_K9579
#defineCTRL_P6512
#defineTRUE1
#defineFALSE0
#defineGAMEINIT1
#defineGAMESTART2
#defineGAMEHAPPY3
#defineGAMEOVER4
structSPlace
{
intx;
inty;
intst;
}place[MAX];
intspeed;
intcount;
intscore;
intcontrol;
inthead;
inttear;
intx,y;
intbabyx,babyy;
intclass;
inteat;
intgame;
intgamedelay[]={5000,4000,3000,2000,1000,500,250,100};
intgamedelay2[]={1000,1};
staticinthitme=TRUE,hit=TRUE;
voidinit(void);
voidnextstatus(void);
voiddraw(void);
voidinit(void)
{
inti;
for(i=0;i { place[i].x=0; place[i].y=0; place[i].st=FALSE; } place[0].st=TRUE; place[1].st=TRUE; place[1].x=1; speed=9; count=0; score=0; control=4; head=1; tear=0; x=1; y=0; babyx=rand()%MAXX; babyy=rand()%MAXY; eat=FALSE; game=GAMESTART; } voidnextstatus(void) { inti; intexit; intxx,yy; xx=x; yy=y; switch(control) { case1:y--;yy=y-1;break; case2:y++;yy=y+1;break; case3:x--;xx=x-1;break; case4:x++;xx=x+1;break; } hit=TRUE; if(((control==1)||(control==2))&&((y=MAXY-1))|| (((control==3)||(control==4))&&((x=MAXX-1)))) { hit=FALSE; } if((y=MAXY)|| (x=MAXX)) { game=GAMEOVER; control=0; return; } for(i=0;i { if((place[i].st)&& (x==place[i].x)&& (y==place[i].y)) { game=GAMEOVER; control=0; return; } if((place[i].st)&& (xx==place[i].x)&& (yy==place[i].y)) { hit=FALSE; gotoOUT; } } OUT: if((x==babyx)&&(y==babyy)) { eat=TRUE; count++; score+=(1+class)*10; } head++; if(head>=MAX)head=0; place[head].x=x; place[head].y=y; place[head].st=TRUE; if(eat==FALSE) { place[tear].st=FALSE; tear++; if(tear>=MAX)tear=0; } else { eat=FALSE; exit=TRUE; while(exit) { babyx=rand()%MAXX; babyy=rand()%MAXY; exit=FALSE; for(i=0;i if((place[i].st)&&(place[i].x==babyx)&&(place[i].y==babyy)) exit++; } } if(head==tear)game=GAMEHAPPY; } voiddraw(void) { chartemp[50]; inti,j; for(i=0;i { setfillstyle(1,9); if(place[i].st) bar(place[i].x*15+1,place[i].y*10+1,place[i].x*15+14,place[i].y*10+9); } setfillstyle(1,4); bar(babyx*15+1,babyy*10+1,babyx*15+14,babyy*10+9); setcolor(8); setfillstyle(1,8); bar(place[head].x*15+1,place[head].y*10+1,place[head].x*15+14,place[head].y*10+9); /*for(i=0;i<=MAXX;i++) line(i*15,0,i*15,10*MAXY); for(j=0;j<=MAXY;j++) line(0,j*10,15*MAXX,j*10); */ rectangle(0,0,15*MAXX,10*MAXY); sprintf(temp,"Count:%d",count); settextstyle(1,0,2); setcolor(8); outtextxy(512,142,temp); setcolor(11); outtextxy(510,140,temp); sprintf(temp,"1P:%d",score); settextstyle(1,0,2); setcolor(8); outtextxy(512,102,temp); setcolor(12); outtextxy(510,100,temp); sprintf(temp,"Class:%d",class); setcolor(8); outtextxy(512,182,temp); setcolor(11); outtextxy(510,180,temp); } main() { intpause=0; chartemp[50]; intd,m; intkey; intp; staticintkeydown=FALSE; intexit=FALSE; intstchange=0; d=VGA; m=VGAMED; initgraph(&d,&m,""); setbkcolor(3); class=3; init(); p=1; while(!exit) { if(kbhit()) { key=bioskey(0); switch(key) { caseUP:if((control!=2)&&!keydown) control=1; keydown=TRUE; break; caseDOWN:if((control!=1)&&!keydown) control=2; keydown=TRUE; break; caseLEFT:if((control!=4)&&!keydown) control=3; keydown=TRUE; break; caseRIGHT:if((control!=3)&&!keydown) control=4; keydown=TRUE; break; caseESC:exit=TRUE;break; caseENTER:init();break; casePAGEUP:class--;if(class<0)class=0;break; casePAGEDOWN:class++;if(class>7)class=7;break; caseKEY_U:if(((control==1)||(control==2))&&!keydown) control=3; elseif(((control==3)||(control==4))&&!keydown) control=1; keydown=TRUE; break; caseKEY_K:if(((control==1)||(control==2))&&!keydown) control=4; elseif(((control==3)||(control==4))&&!keydown) control=2; keydown=TRUE; break; caseCTRL_P:pause=1-pause;break; } } stchange++; putpixel(0,0,0); if(stchange>gamedelay[class]+gamedelay2[hit]) { stchange=0; keydown=FALSE; p=1-p; setactivepage(p); cleardevice(); if(!pause) nextstatus(); else { settextstyle(1,0,4); setcolor(12); outtextxy(250,100,"PAUSE"); } draw(); if(game==GAMEOVER) { settextstyle(0,0,6); setcolor(8); outtextxy(101,101,"GAMEOVER"); setcolor(15); outtextxy(99,99,"GAMEOVER"); setcolor(12); outtextxy(100,100,"GAMEOVER"); sprintf(temp,"LastCount:%d",count); settextstyle(0,0,2); outtextxy(200,200,temp); } if(game==GAMEHAPPY) { settextstyle(0,0,6); setcolor(12); outtextxy(100,300,"YOUWIN"); sprintf(temp,"LastCount:%d",count); settextstyle(0,0,2); outtextxy(200,200,temp); } setvisualpage(p); } } closegraph(); }