/* Author : Narendrakumar Padmani Email : n.padmani@yahoo.co.uk */ #include #include #include #include #include #include #include char ch[]={' ','@','#'}; char ws[40][40]; int gra[]={0,3,10}; //----------------------------------- struct snk { int size,dir; struct snk * next; }; //----------------------------------- typedef struct snk turn; turn * first=NULL,*last=NULL; int wsx=25,wsy=10,wsdir=3,size=5,bsx=25,bsy=5,bsdir=3,maxl=5,khorak=0,speed=400,level=0,life=5; //----------------------------------- char gettextxy(int x,int y) { return ws[x-1][y-1]; } void speed_control(void) { if (speed<=50) return; if(speed>=300) speed-=20; else if(speed>=200) speed-=10; else if(speed>=100) speed-=5; return; } void level_check(void) { static int tot=1; tot++; if(tot%10==0) { float a; level++; for(a=0;a<4*M_PI;a+=0.01f) { sound(1000*fabs(sin(a))); delay(1); } for(a=0;asize=s; temp->dir=d; if(first==NULL) first=temp; else last->next=temp; last=temp; } //---------------------------------- void discard(void) { turn * temp; if(first==NULL) return; temp=first; first=first->next; free(temp); return; } //--------------------------------- void putsnack(int x,int y,int ind) { ws[x-1][y-1]=ch[ind]; setfillstyle(9,gra[ind]); bar(10*(x-1)+10,10*(y-1)+10,10*x+10,10*y+10); setcolor(RED); rectangle(10*(x-1)+15,10*(y-1)+15,10*x+5,10*y+5); return ; } //--------------------------------- void calc_vert(int *x,int *y,int d) { if(d==1) (*y)--; else if(d==2) (*x)++; else if(d==3) (*y)++; else (*x)--; if(*x>40) *x=1; if(*y>40) *y=1; if(*x<1) *x=40; if(*y<1) *y=40; return; } //--------------------------------- void draw_black(void) { if(first!=NULL) (first->size)--; calc_vert(&bsx,&bsy,bsdir); putsnack(bsx,bsy,0); if(first->size==0 && first!=NULL) { bsdir=first->dir; discard(); } return; } //-------------------------------- int draw_white(void) { char cha; calc_vert(&wsx,&wsy,wsdir); if( (cha=gettextxy(wsx,wsy))==ch[1] || /*(wsx>40 || wsx<=0 || wsy>40 || wsy<=0*/0) return -1; if(cha==ch[2]) { maxl++; size++; khorak=0; speed_control(); level_check(); putsnack(wsx,wsy,1); calc_vert(&wsx,&wsy,wsdir); } putsnack(wsx,wsy,1); return 0; } //---------------------------- int drawsnack() { if(size4) wsdir=1; add_node(size,wsdir); size=0; if(drawsnack()==-1) return ; } } } //------------------------------ int main(void) { int i,j,k=0; int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "c:\\turboc3"); for(i=0;i<40;i++) for(j=0;j<40;j++) ws[i][j]=' '; while(life>0) { wsx=25,wsy=10,wsdir=3,size=5,bsx=25,bsy=5,bsdir=3,maxl=5,khorak=0; cleardevice(); rectangle(2,2,425,425); setcolor(RED); for(i=1;i<=40;i++) for(j=1;j<=40;j++) rectangle(10*(i-1)+15,10*(j-1)+15,10*i+5,10*j+5); snack(); while(first!=NULL) discard(); for(i=0;i<40;i++) for(j=0;j<40;j++) ws[i][j]=' '; life--; } closegraph(); printf("%d",k); return 0; }