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

Please Give your valuable comments on my blogs and make me more responsible blogger
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.

1 comments:

Unknown said...

void check();
void end();
void win();
how to write functions

Post a Comment