#define RIGHT 1 #define UP 11 #define LEFT 111 #define DOWN 1111 #define MAXSIZE 99 #define INITIALSPEED 50 #include<stdio.h> #include<conio.h> #include<graphics.h> #include<dos.h> #include<math.h> #include<stdlib.h> int snakex[MAXSIZE],snakey[MAXSIZE]; int specialFoodX,specialFoodY,specialScore=0; int spflag,spFood; // it is set one only once when fifth food is generated( to get co ordinates of special food) int speedTimer=INITIALSPEED; void instructions(); int getDir(char key,int dir); void motion(int dir,int length); void check(); int getFoodX(); int getFoodY(); void specialFood(int flag, int numFood); void showFood(int x,int y); void drawSnake(int length, int color); void defaultSnake(); void gameOver(int snakeLength); void specialFoodConsumed(); void main(){ //www.shadowhackit.blogspot.com int gd = DETECT, gm; int foodConsumed=1; int dir=RIGHT; int snakeLength; char keyPressed; int food[2]; instructions(); initgraph(&gd,&gm,"C:\\TurboC3\\BGI"); snakeLength=3;//initially defaultSnake(); setcolor(YELLOW); rectangle(40,40,620,340); // Boudnary of game setviewport(41,41,619,339,1); // Playing area start: ; if(foodConsumed){ food[0]=getFoodX(); food[1]=getFoodY(); } while( !kbhit() && snakex[0]<580 && snakex[0]>0 && snakey[0]>0 && snakey[0]<300){ foodConsumed=0; if((snakex[0]>=specialFoodX-1 && snakex[0]<=specialFoodX+5 && snakey[0]>=specialFoodY-1 && snakey[0]<=specialFoodY+5) || ( snakex[0]+5>=specialFoodX-1 && snakex[0]+5<=specialFoodX+5 && snakey[0]+5>=specialFoodY-1 && snakey[0]+5<=specialFoodY+5 )){ specialFoodConsumed(); } if((snakex[0]>=food[0]-1 && snakex[0]<=food[0]+5 && snakey[0]>=food[1]-1 && snakey[0]<=food[1]+5) || ( snakex[0]+5>=food[0]-1 && snakex[0]+5<=food[0]+5 && snakey[0]+5>=food[1]-1 && snakey[0]+5<=food[1]+5 )) { snakeLength++; if((snakeLength-3) %5==0){ spflag=1; spFood=1; speedTimer=20; } food[0]=getFoodX(); food[1]=getFoodY(); } showFood(food[0],food[1]); specialFood(spflag,snakeLength-3); drawSnake(snakeLength,CYAN); dir= getDir(keyPressed,dir); motion(dir,snakeLength); delay(speedTimer); clearviewport(); } if(snakex[0]>=580 || snakex[0]<=0 || snakey[0]<=0 || snakey[0]>=300) { gameOver(snakeLength); } keyPressed=getch(); goto start; } void instructions(){ char start; printf("-----------------ShadowHack's Snake Game----------------\n"); printf("\nInstructions:\n"); printf("1. Use left,up,right,down arrow keys to move the snake left, top, right, down respectively.\n"); printf("2. Press 'e' anytime during the game to exit the game.\n"); printf("3. Prevent snake from hiting the wall.\n"); printf("4. Collect as many foods as possible to increase the score.\n"); printf("5. Special food appears during the game which increases the speed of snake.\n"); printf("6. To bring snake to normal speed consume special food before normal food.\n"); printf("7. If special food is not consumed before normal food, it disappears.\n"); printf("8. Special food increases the score thrice as much as the normal food.\n"); printf("Press 's' to start the game or 'e' to exit...."); while(1){ start=getch(); if(start=='s') break; else if(start=='e') exit(0); else{ printf("\nPress 's' key to start the game..\n"); continue; } } } int getDir(char key,int dir){ if(key==75 && dir!=RIGHT) dir=LEFT; if(key==72 && dir!=DOWN ) dir=UP; if(key==80 && dir!=UP) dir=DOWN; if(key==77 && dir!=LEFT) dir=RIGHT; if(key=='e') exit(0); return dir; } void motion(int dir,int length){ int i; if(dir==RIGHT){ for(i=length-1;i>0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } snakex[0]+=7; } if(dir==UP){ for(i=length-1;i>0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } snakey[0]-=7; } if(dir==LEFT){ for(i=length-1;i>0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } snakex[0]-=7; } if(dir==DOWN){ for(i=length-1;i>0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } snakey[0]+=7; } } void drawSnake(int length,int color){ int i; setfillstyle(11,color); for(i=0;i<length;i++){ if(i) setfillstyle(SOLID_FILL,color); else setfillstyle(11,color); bar(snakex[i],snakey[i],snakex[i]+5,snakey[i]+5); } } void check(){ delay(200); clrscr(); rectangle(40,40,620,340); printf("%d %d",snakex,snakey); } int getFoodX(){ int foodX; foodX= rand()%570; return foodX; } int getFoodY(){ int foodY; foodY=rand()%290; return foodY; } void specialFood(int flag,int numFood){ if(flag){ specialFoodX=rand()%570; specialFoodY=rand()%290; } if(numFood%5==0&&spFood==1) { flag=0; setfillstyle(SOLID_FILL,GREEN); bar(specialFoodX,specialFoodY,specialFoodX+5,specialFoodY+5); spflag=0; } } void showFood(int x,int y){ setfillstyle(SOLID_FILL,RED); bar(x,y,x+5,y+5); } void defaultSnake(){ snakex[0]=340; snakey[0]=240; snakex[1]=333; snakey[1]=240; snakex[2]=326; snakey[2]=240; } void gameOver(int snakeLength){ char score[2]; char ex; setcolor(RED); outtextxy(260,150,"GAME OVER !!"); setcolor(GREEN); score[0]=48+(snakeLength-3+specialScore)/10; score[1]=48+(snakeLength-3+specialScore)%10; outtextxy(230,170,"Your Score: "); outtextxy(320,170,score); setfillstyle(SOLID_FILL,BLACK); bar(334,170,390,180); setfillstyle(SOLID_FILL,RED); drawSnake(snakeLength,RED); printf("-----www.shadowhackit.blogspot.com-----"); printf("Press Esc to exit... "); printf("Press 'r' to restart the game.."); while(1){ ex=getch(); if(ex==27) exit(0); else if(ex=='r'){ cleardevice(); closegraph(); main(); } else continue; } } void specialFoodConsumed(){ setfillstyle(SOLID_FILL,BLACK); bar(specialFoodX,specialFoodY,specialFoodX+5,specialFoodY+5); speedTimer=50; spFood=0; specialScore+=2; }
Tuesday, 1 September 2015
Snake Game Program in C
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment