:::::Shikhor Himadrir :::::

Please Give your valuable comments on my blogs and make me more responsible blogger
Showing posts with label animation. Show all posts
Showing posts with label animation. Show all posts
Saturday, 1 May 2010

The Snake Game In C

Introduction

This is a small turbo c program of snake game using
some graphics.h functions. Anyone who is familiar with C graphics
programming can do it very easily
.

Code Explanation
In the beginning of code explanation the first important part is
initializing the graphics mode in turbo C to do drawing a calculator and
that is must be done before using every graphics related functions. This
graphics initialization is done by a pre-define function called initgraph()
with a tiny code part given below :

int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "C:\\TC\\BGI");

If your TC folder is in D drive than just type "D:\\TC\\BGI" instead of
"C:\\TC\\BGI"

inside the initgraph( ) function.So if you want to use graphics functions in
your turbo c program, than you have to always write these two statement in
the main( ) function.


If you initialize the graphics mode than, all graphics.h function can be use
in the program.But if you need to come back to the normal textmode (the
black screen ) than you have to shut down the graphics mode by using the
graphics.h function closegraph( ).


In that program we have use three user-define functions given below :
void check();
void end();
void win();

The first screen shot will be like this :-




The gaming screen will be look like this :-




Here is the source code
#include "graphics.h"
#include 'stdlib.h"
#include "dos.h"
#include "conio.h"
#include "stdio.h"
#include "time.h"

int m[500],n[500],con=20,TEMP;
clock_t start,stop;

void main(void)
{



int gd=DETECT,gm,ch,maxx,maxy,x=13,y=14,p,q,spd=100;

int a=0,i=0,j,t,temp;

initgraph(&gd,&gm,"C:\\TC\\BGI");

setcolor(6);

settextstyle(1,0,6);

outtextxy(20,2," SNAKE 2 BY Himadree ");

settextstyle(6,0,2);

outtextxy(20,80," Use Arrow Keys To Direct The Snake ");

outtextxy(20,140," Avoid The Head Of Snake Not To Hit Any Part Of
Snake");

outtextxy(20,160," Pick The Beats Untill You Win The Game ");

outtextxy(20,200," Press 'Esc' Anytime To Exit ");

outtextxy(20,220," Press Any Key To Continue ");

outtextxy(20,240," DONT FORGET TO GIVE U R VALUABLE OPINION ");

ch=getch();

if(ch==27) exit(0);

cleardevice();

maxx=getmaxx();

maxy=getmaxy();

randomize();
p=random(maxx);
temp=p%13;
p=p-temp;
q=random(maxy);
temp=q%14;
q=q-temp;
start=clock();

while(1)
{

setcolor(WHITE);
setfillstyle(SOLID_FILL,con+5);
circle(p,q,5);
floodfill(p,q,WHITE);
if( kbhit() )
{

ch=getch(); if(ch==0) ch=getch();

if(ch==72&& a!=2) a=1;

if(ch==80&& a!=1) a=2;

if(ch==75&& a!=4) a=3;

if(ch==77&& a!=3) a=4;


}
else
{

if(ch==27){

break;


}

}

if(i<20){

m[i]=x;


n[i]=y;

i++;

}

if(i>=20)
{

for(j=con;j>=0;j--){

m[1+j]=m[j];

n[1+j]=n[j];


}

m[0]=x;
n[0]=y;
setcolor(WHITE);
setfillstyle(SOLID_FILL,con);
circle(m[0],n[0],8);
floodfill(m[0],n[0],WHITE);
setcolor(WHITE);
for(j=1;j<con;j++){

setfillstyle(SOLID_FILL,con+j%3);
circle(m[j],n[j],5);
floodfill(m[j],n[j],WHITE);
}

delay(spd);
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(m[0],n[0],8);
floodfill(m[0],n[0],BLACK);
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(m[j],n[j],5);
floodfill(m[j],n[j],BLACK);
}

stop=clock();

t=(stop-start)/CLK_TCK;

check();

if(x==p && y==q)
{

con=con+5;

if(spd>=5)
spd=spd-5;
else spd=5;

if(con>490)

win();
p=random(maxx); temp=p%13; p=p-temp;
q=random(maxy); temp=q%14; q=q-temp;
}
if(a==1){
y = y-14;

}

if(y<0)
{

temp=maxy%14;y=maxy-temp;

}

if(a==2)
{

y = y+14;


}

if(y>maxy)

{

y=0;


}

if(a==3){

x = x-13;

}
if(x<0) {

temp=maxx%13;x=maxx-temp;

}

if(a==4){
x = x+13; if(x>maxx) x=0;

}

if(a==0)
{

y = y+14 ;

x=x+13;

}


}


}

void check(){

int a;
for(a=1;a<con;a++)

if(m[0]==m[a] && n[0]==n[a])
{
end();

}
else
{

continue;


}

}

void end()
{

int j,i;

setcolor(WHITE);

for(i=0;i<5;i++){

delay(500);
cleardevice();

delay(500);

for(j=0;j<=con;j++){

setfillstyle(SOLID_FILL,RED);
circle(m[j],n[j],5);
floodfill(m[j],n[j],WHITE);

}
}
settextstyle(3,0,4);
outtextxy(150,150," GAME OVER ");

getch();
getch();

exit(0);

}


void win()
{

int j,i;

setcolor(WHITE);

for(i=0;i<5;i++){

for(j=0;j<=con;j++){

setfillstyle(SOLID_FILL,con);


circle(m[j],n[j],5);

floodfill(m[j],n[j],WHITE);

}

delay(500);


cleardevice();

delay(500);

}

settextstyle(3,0,4);

outtextxy(210,320," YOU WIN ");


getch();

exit(0);

}


Note : For more information, you can also visit my other blogs. And don't forget to give your valuable comments.