C语言贪吃蛇源程序代码双人对抗.docx
《C语言贪吃蛇源程序代码双人对抗.docx》由会员分享,可在线阅读,更多相关《C语言贪吃蛇源程序代码双人对抗.docx(18页珍藏版)》请在冰点文库上搜索。
![C语言贪吃蛇源程序代码双人对抗.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/31c98d04-d12a-4b18-8a80-e99763e22e48/31c98d04-d12a-4b18-8a80-e99763e22e481.gif)
C语言贪吃蛇源程序代码双人对抗
#include
#include
#include
#include
#include
#include
#include
#include
#defineLEFT100
#defineTOP30
#defineRIGHT538
#defineBOTTOM468
#defineSIZE20
#defineSL100/*SL±íʾ²úÉúʳÎïµÄ¸öÊý*/
typedefstructSnake/*±íʾÉߵĽáµã*/
{
intbx,by;
structSnake*next;
}Snake,*SnakeList;
SnakeListcreatesnake(intcx,intcy)/*´´½¨Ò»¸öÉßÍ·¡£*/
{
SnakeListl;
l=(SnakeList)malloc(sizeof(Snake));
l->next=NULL;
l->bx=cx;
l->by=cy;
returnl;
}
voidpaintsnake(SnakeListl,intscoler,inttcoler)/*Êä³öÉßÉíµÄº¯Êý£¬Ò²¿É×÷ΪÏûÈ¥ÉßÉíµÄº¯Êý¡£*/
{
SnakeListp;
intx,y;
p=l;
setfillstyle(SOLID_FILL,scoler);
for(;p->next;)
{
p=p->next;
x=p->bx;
y=p->by;
bar(x,y,x+SIZE,y+SIZE);
}
if(scoler==2)
setfillstyle(SOLID_FILL,scoler);
else
setfillstyle(SOLID_FILL,tcoler);
x=l->bx;
y=l->by;
bar(x,y,x+SIZE,y+SIZE);
}
voidchangsnake(SnakeListl,intfx,intfy,ints)/*fx,fy±íʾÉßÍ·Òƶ¯·½Ïò£¬·Ö±ðȡֵΪ1£¬-1;s±íʾÊÇ·ñ³Ôµ½Ê³Î1±íʾ³Ôµ½£¬0±íʾûÓС£*/
{
SnakeListp=l;
intx,y,t;
x=p->bx;
y=p->by;
p->bx=x+fx*(SIZE+2);
p->by=y+fy*(SIZE+2);
for(;p->next;)
{
p=p->next;
t=p->bx;
p->bx=x;
x=t;
t=p->by;
p->by=y;
y=t;
}
if(s)
{
p->next=(SnakeList)malloc(sizeof(Snake));
p->next->bx=x;
p->next->by=y;
p->next->next=NULL;
}
}
voidsetfood(int*fx,int*fy,SnakeListal,SnakeListbl)/*ÉèÖÃËæ»úʳÎï*/
{
inta,b,s=1,s2;
SnakeListslist1;
SnakeListslist2;
setfillstyle(SOLID_FILL,6);
srand(time(NULL));
for(;s;)
{
slist1=al;
slist2=bl;
a=rand()%(SIZE);
b=rand()%(SIZE);
a=LEFT+(a)*22;
b=TOP+(b)*22;
s2=1;
for(;slist1&&s2;)
{
if(a==slist1->bx&&b==slist1->by)
s2=0;
else
slist1=slist1->next;
}
s2=1;
for(;slist2&&s2;)
{
if(a==slist2->bx&&b==slist2->by)
s2=0;
else
slist2=slist2->next;
}
if(slist1==NULL&&slist2==NULL)
s=0;
}
*fx=a;
*fy=b;
bar(*fx,*fy,*fx+20,*fy+20);
}
voidqufood(intfx,intfy)/*ÏûȥʳÎï*/
{
setfillstyle(SOLID_FILL,2);
bar(fx,fy,fx+20,fy+20);
}
voidfreesnake(SnakeListpsnake)/*ÊÍ·ÅÉߵĿռ䡣*/
{
SnakeListp;
p=psnake->next;
psnake->next=NULL;
for(;p;)
{
p=psnake->next;
free(psnake);
psnake=p;
}
}
intnothit(SnakeListsnake1,SnakeListsnake2,intx,inty)/*¼ì²ésnake1ÊÇ·ñײ»÷snake2¡£*/
{
inta1,a2,b1,b2,bj=1;
a1=snake1->bx;
b1=snake1->by;
a1=a1+x*(SIZE+2);
b1=b1+y*(SIZE+2);
a2=snake2->bx;
b2=snake2->by;
for(;snake2&&bj;)
{
if(a1==a2&&b1==b2)
{
bj=0;
}
else
{
snake2=snake2->next;
a2=snake2->bx;
b2=snake2->by;
}
}
returnbj;
}
voidpaintpig()/*»Ò»¸öÖíÍ·¡£*/
{
setwritemode
(1);/*ÉèÖûæÖÆÏßÌõµÄģʽ£¬1±íʾÒì»òģʽ*/
setfillstyle(1,2);/*ÉèÖÃͼƬÌî³äģʽºÍÑÕÉ«£¬1±íʾʵɫÌî³ä£¬2±íʾÂÌÉ«*/
pieslice(220,140,0,360,80);/*»¶ú¶ä*/
pieslice(420,140,0,360,80);
setfillstyle(1,6);
pieslice(320,240,0,360,150);/*»Á³*/
arc(260,180,30,160,30);/*»Ã¼Ã«*/
arc(380,180,30,160,30);
setfillstyle(1,4);
sector(320,260,0,360,50,40);/*»±Ç×Ó*/
setfillstyle(1,8);
pieslice(300,260,0,360,5);/*±Ç¿×*/
pieslice(340,260,0,360,5);
arc(320,260,230,310,60);/*»×ì*/
}
voidnumtostr(intn,chara[3])/*°ÑÒ»¸öÊý×Önת»»³É×Ö·û´®£¬²¢´æ´¢ÔÚaÖС£*/
{
intw;
w=n%10;
a[1]=w+'0';
w=n/10;
a[0]=w+'0';
a[2]='\0';
}
voidmain()
{
intgr=DETECT,gm;
ints1=0,s2=0,fx1=0,fy1=1,fx2=0,fy2=1;/*s1±íʾsnake1µÄÉí³¤£¬s2±íʾsnake2µÄÉí³¤;fx*,fy*±íʾÉßÍ·Ô˶¯·½Ïò£»*/
intdx,dy,add1,add2,k,k1=1,k2=1;/*dx,dy±íʾʳÎïµÄλÖã»add*=1±íʾÊÇ·ñ³Ôµ½Ê³Îk*=1±íʾÉßÍ·Ô½½ç*/
inti=1,j=0,q=1;/*j=0±íʾֻÓÐÒ»ÌõÉߣ¬j=1±íʾÓÐÁ½ÌõÉߣ¬j=2±íʾûÓÐÉßÍ˳öÓÎÏ·*/
unsignedlongt;/*t±íʾÑÓ³ÙµÄʱ¼ä*/
charw[3];
SnakeListlsnake1,lsnake2;
/*registerbgidriver(EGAVGA_driver);*/
/*detectgraph(*gr,*gm);*/
initgraph(&gr,&gm,"");/*ÉèÖÃÆÁĻΪͼÐÎģʽ*/
cleardevice();/*ÇåÆÁº¯Êý*/
for(;q;)
{
cleardevice();
paintpig();
settextstyle(0,0,3);
outtextxy(100,10,"Ilikepigs!
");
settextstyle(1,0,2);
outtextxy(300,400,"Onesnake!
");
outtextxy(300,420,"Twosnakes!
");
outtextxy(300,440,"QuitGame");
outtextxy(450,420,"Producer:
ChenChen");
outtextxy(450,440,"Time:
May232012");
outtextxy(30,370,"Keysused:
Arrowkeys");
outtextxy(30,380,"'W''A''S'D'");
outtextxy(30,390,"'enter'");
setfillstyle(1,4);
pieslice(280,400+j*20,0,360,5);
i=1;
for(;i;)
{
k=bioskey(0);/*»ñÈ¡°´¼üµÄɨÃèÂë*/
sound(1300);/*ÏìÉùº¯Êý*/
delay(10000);/*ÑÓ³Ùº¯Êý*/
nosound();/*¹Ø±ÕÏìÉùº¯Êý*/
switch(k)
{
case20480:
/*ÏòϼüµÄɨÃèÂë*/
setfillstyle(1,0);
pieslice(280,400+j*20,0,360,5);
j=(j+1)%3;
setfillstyle(1,4);
pieslice(280,400+j*20,0,360,5);
break;
case7181:
/*enter¼üµÄɨÃèÂë*/
if(j==0||j==1)
{
i=0;
}
else
{
closegraph();/*¹Ø±ÕͼÐÎģʽµÄº¯Êý*/
exit(0);/*Í˳ö³ÌÐòº¯Êý*/
}
break;
default:
break;
}
}
cleardevice();
setfillstyle(SOLID_FILL,2);/*ÉèÖÃÌî³äͼ°¸µÄģʽºÍÑÕÉ«*/
bar(LEFT,TOP,RIGHT,BOTTOM);/*»æ»ÆÁÄ»*/
lsnake1=createsnake(496,140);/*Éú³Élsnake1µÄÉßÍ·*/
lsnake2=createsnake(144,140);/*Éú³Élsnake2µÄÉßÍ·*/
setfood(&dx,&dy,lsnake1,lsnake2);
k1=1,k2=1;
fx1=0,fy1=1,fx2=0,fy2=1;
s1=0,s2=0;
t=100000;
for(;(k1||k2)&&(s1+s2{
add1=0;
add2=0;
if(kbhit())/*kbhit()º¯Êý¼ì²âÊÇ·ñÓа´¼ü*/
{
sound(1200);
delay(10000);
k=bioskey(0);/*»ñÈ¡°´¼üµÄɨÃèÂë*/
delay(1000);
nosound();
switch(k)
{
case19200:
/*°´Ïò×ó¼ü*/
if(fx1==0)
{
fx1=-1;
fy1=0;
}
break;
case19712:
/*°´ÏòÓÒ¼ü*/
if(fx1==0)
{
fx1=1;
fy1=0;
}
break;
case18432:
/*°´ÏòÉϼü*/
if(fy1==0)
{
fx1=0;
fy1=-1;
}
break;
case20480:
/*°´Ïòϼü*/
if(fy1==0)
{
fx1=0;
fy1=1;
}
break;
case7777:
/*°´Ïò×ó¼ü*/
if(fx2==0)
{
fx2=-1;
fy2=0;
}
break;
case8292:
/*°´ÏòÓÒ¼ü*/
if(fx2==0)
{
fx2=1;
fy2=0;
}
break;
case4471:
/*°´ÏòÉϼü*/
if(fy2==0)
{
fx2=0;
fy2=-1;
}
break;
case8051:
/*°´Ïòϼü*/
if(fy2==0)
{
fx2=0;
fy2=1;
}
break;
default:
break;
}
}
if(j==1)
{
if((lsnake2->bx)>=LEFT&&(lsnake2->bx+SIZE)<=RIGHT&&(lsnake2->by)>=TOP&&(lsnake2->by+SIZE)<=BOTTOM)/*¼ì²âsnake2µÄÉßÍ·ÊÇ·ñ³ö½ç*/
{
if((lsnake2->bx==dx)&&(lsnake2->by==dy))/*¼ì²âsnake2ÊÇ·ñ³Ôµ½Ê³Îï*/
{
t=t-800;
setfillstyle(1,0);
bar(48,60,88,100);
qufood(dx,dy);
add2=1;
s2++;
setfillstyle(1,1);
bar(48,60,88,100);
numtostr(s2,w);
outtextxy(58,70,w);
outtextxy(58,80,"Blue");
}
}
else
{
k2=0;
/*freesnake(lsnake2);*/
}
if(k2&¬hit(lsnake2,lsnake1,fx2,fy2))
{
paintsnake(lsnake2,2,2);/*ÏûÈ¥Éß*/
changsnake(lsnake2,fx2,fy2,add2);/*ÉßÉí×ø±êÒƶ¯*/
paintsnake(lsnake2,14,1);/*»æÖÆÉß*/
}
}
else
{
k2=0;
paintsnake(lsnake2,14,9);
}
if((lsnake1->bx)>=LEFT&&(lsnake1->bx+SIZE)<=RIGHT&&(lsnake1->by)>=TOP&&(lsnake1->by+SIZE)<=BOTTOM)
{
if((lsnake1->bx==dx)&&(lsnake1->by==dy))
{
t=t-800;/*t¼õС±íʾÑÓ³Ù¼õС£¬¼´±íʾÉßÒƶ¯Ëٶȼӿì*/
setfillstyle(1,0);
bar(540,60,600,100);
qufood(dx,dy);
add1=1;
s1++;
setfillstyle(1,4);
bar(560,60,600,100);
numtostr(s1,w);
outtextxy(570,70,w);
outtextxy(570,80,"Red");
}
}
else
{
k1=0;
/*freesnake(lsnake1);*/
}
if(k1&¬hit(lsnake1,lsnake2,fx1,fy1))
{
paintsnake(lsnake1,2,2);
changsnake(lsnake1,fx1,fy1,add1);
paintsnake(lsnake1,5,4);
}
if(add1==1||add2==1)/*µ±Á½ÌõÉßÓÐÒ»Ìõ³Ôµ½Ê³ÎïÊÇ£¬ÖØÐÂÉèÖÃʳÎï*/
setfood(&dx,&dy,lsnake1,lsnake2);/*²úÉúʳÎï*/
delay(t);
delay(t);
delay(t);
delay(t);
delay(t);
}
if(j==0)
{
if(s1==SL)
{
settextstyle(0,0,3);
outtextxy(100,200,"YouareWin!
");
getch();
settextstyle(1,0,1);
}
else
{
settextstyle(0,0,5);
outtextxy(100,200,"GAMEOVER!
");
getch();
settextstyle(1,0,1);
}
}
else
{
if(s1>s2)
{
settextstyle(0,0,5);
outtextxy(100,200,"RedWin!
");
getch();
settextstyle(1,0,1);
}
elseif(s1{
settextstyle(0,0,5);
outtextxy(100,200,"BlueWin!
");
getch();
settextstyle(1,0,1);
}
else
{
settextstyle(0,0,5);
outtextxy(100,200,"Adraw!
");
getch();
settextstyle(1,0,1);
}
}
}
}