1、C语言贪吃蛇源程序代码双人对抗#include #include #include #include #include #include #include #include #define LEFT 100 #define TOP 30 #define RIGHT 538 #define BOTTOM 468#define SIZE 20#define SL 100 /*SL*/typedef struct Snake/*/ int bx,by; struct Snake *next;Snake,*SnakeList;SnakeList createsnake(int cx,int cy)/*
2、/ SnakeList l; l=(SnakeList)malloc(sizeof(Snake); l-next=NULL; l-bx=cx; l-by=cy; return l;void paintsnake(SnakeList l,int scoler,int tcoler)/*/ SnakeList p; int x,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_
3、FILL,scoler); else setfillstyle(SOLID_FILL,tcoler); x=l-bx; y=l-by; bar(x,y,x+SIZE,y+SIZE); void changsnake(SnakeList l,int fx,int fy,int s) /*fx,fy1-1;s10*/ SnakeList p=l; int x,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;
4、 y=t; if(s) p-next=(SnakeList)malloc(sizeof(Snake); p-next-bx=x; p-next-by=y; p-next-next=NULL; void setfood(int *fx,int *fy,SnakeList al,SnakeList bl)/*/ int a,b,s=1,s2; SnakeList slist1; SnakeList slist2; setfillstyle(SOLID_FILL,6); srand(time(NULL); for(;s;) slist1=al; slist2=bl; a=rand()%(SIZE);
5、 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);void qufood(int
6、 fx,int fy)/*/ setfillstyle(SOLID_FILL,2); bar(fx,fy,fx+20,fy+20);void freesnake(SnakeList psnake)/*/ SnakeList p; p=psnake-next; psnake-next=NULL; for(;p;) p=psnake-next; free(psnake); psnake=p; int nothit(SnakeList snake1,SnakeList snake2,int x,int y)/*snake1snake2*/ int a1,a2,b1,b2,bj=1; a1=snake
7、1-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; return bj; void paintpig()/*/ setwritemode(1);/*1*/ setfillstyle(1,2);/*12*/ pieslice(220,140,0,360,80);/*/ pieslice(420,140
8、,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);/*/ void numtostr(int n,char a3)/*n
9、a*/ int w; w=n%10; a1=w+0; w=n/10; a0=w+0; a2=0;void main() int gr=DETECT,gm; int s1=0,s2=0,fx1=0,fy1=1,fx2=0,fy2=1;/*s1snake1s2snake2;fx*,fy*/ int dx,dy,add1,add2,k,k1=1,k2=1;/*dx,dyadd*=1k*=1*/ int i=1,j=0,q=1;/*j=0j=1j=2*/ unsigned long t;/*t*/ char w3; SnakeList lsnake1,lsnake2; /*registerbgidri
10、ver(EGAVGA_driver);*/ /*detectgraph(*gr, *gm);*/ initgraph(&gr,&gm,);/*/ cleardevice();/*/ for(;q;) cleardevice(); paintpig(); settextstyle(0,0,3); outtextxy(100,10, I like pigs!); settextstyle(1,0,2); outtextxy(300,400,One snake!); outtextxy(300,420,Two snakes!); outtextxy(300,440,Quit Game); outte
11、xtxy(450,420,Producer:Chen Chen); outtextxy(450,440,Time:May 23 2012); outtextxy(30,370,Keys used:Arrow keys); outtextxy(30,380, WASD); 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
12、) case 20480:/*/ 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; case 7181:/*enter*/ if(j=0|j=1) i=0; else closegraph();/*/ exit(0); /*/ break; default : break; cleardevice(); setfillstyle(SOLID_FILL,2);/*/ bar(LEFT,TOP,RIGHT,BO
13、TTOM);/*/ 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+s2bx)=LEFT&(lsnake2-bx+SIZE)by)=TOP&(lsnake2-by+SIZE)bx=dx)&(lsnake2-by=dy)/*snake2*/ t=t-800; setfi
14、llstyle(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);/*/ pain
15、tsnake(lsnake2,14,1);/*/ else k2=0; paintsnake(lsnake2,14,9); if(lsnake1-bx)=LEFT&(lsnake1-bx+SIZE)by)=TOP&(lsnake1-by+SIZE)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,7
16、0,w); outtextxy(570,80,Red); else k1=0; /*freesnake(lsnake1);*/ if(k1& nothit(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=
17、0) if(s1=SL) settextstyle(0,0,3); outtextxy(100,200,You are Win!); getch(); settextstyle(1,0,1); else settextstyle(0,0,5); outtextxy(100,200,GAME OVER !); getch(); settextstyle(1,0,1); else if(s1s2) settextstyle(0,0,5); outtextxy(100,200,Red Win!); getch(); settextstyle(1,0,1); else if(s1s2) settextstyle(0,0,5); outtextxy(100,200,Blue Win!); getch(); settextstyle(1,0,1); else settextstyle(0,0,5); outtextxy(100,200,A draw!); getch(); settextstyle(1,0,1);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2