0% found this document useful (0 votes)
20 views

Introduction

Uploaded by

epersonal998
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Introduction

Uploaded by

epersonal998
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 34

# Introduction

1. **Overview**:

The program simulates the traditional Snake game where the player controls a snake that grows longer
as it eats food while avoiding collisions with itself and the game boundaries. The objective is to achieve a
high score by eating as much food as possible.

2. **Graphics Initialization**:

- The code initializes the graphics mode using `initgraph()`, which allows for drawing shapes and
images on the screen.

- It defines colors, styles, and dimensions for the snake and food graphics.

3. **Game Variables**:

- **Snake Position**: Arrays `X` and `Y` track the coordinates of the snake's segments.

- **Speed and Score**: Variables control the speed of the snake's movement and keep track of the
player's score and high score.

4. **Input Handling**:

- The snake's movement is controlled using keyboard inputs (8 for up, 5 for down, 6 for right, and 4 for
left).

- Input validation prevents the snake from reversing direction directly.

5. **Game Loop**:

- The main game loop runs until the player decides to exit (by pressing '0').

- The loop handles snake movement, collision detection, food consumption, and drawing the game
state on the screen.

6. **Collision Detection**:
- The game checks for collisions with the snake's own body and the game boundaries. If a collision is
detected, the game ends.

7. **Food Mechanics**:

- When the snake eats food, it grows longer, and the score increases.

- New food is randomly placed on the screen after consumption.

8. **Game Over and Score Saving**:

- When the game ends, the player's score is compared with the high score, and if it's higher, it gets
saved to a file.

### Conclusion

This code is a fun and educational example of basic game development principles, such as graphics
rendering, user input handling, and game state management. It can serve as a starting point for further
enhancements, such as improved graphics, sound effects, or more complex game mechanics.
Code
#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <iostream.h>

#include <fstream.h>

#include <string.h>

void main(void)

int gdriver = DETECT, gmode, errorcode;

void

*body,*food,*tail1,*tail2,*tail3,*tail4,*head1,*head2,*head3,*head4;

int x, y,X[5000],Y[5000],i=3,

maxx,maxy,speed=100,bo=10,t[10],score=0,hscore=20;

unsigned int size;

char a='6',b,scor[4],hs[4];

int k=2,l,r1,r2,f=0,z=100,first=0,second=1;;

r1=300
r2=350;

ifstream infile("c:\tc\bin\rattle.txt");

infile.getline(hs,4);

infile.close();

hscore = atoi(hs);

/* initialize graphics and local variables */

initgraph(&gdriver, &gmode, "C:\TURBOC3\BGI");

/* read result of initialization */

errorcode = graphresult();

if (errorcode != grOk)

printf("Graphics error: %s", grapherrormsg(errorcode));


printf("Press any key to halt:");

getch();

exit(1);

maxx = getmaxx();

maxy = getmaxy();

y = 160;

x = 80;

for(int j=0; j<=3; j++)

X[i-j]=x-bo*(j+1);

Y[i-j]=y;

}
//body

setfillstyle(1,2);

bar(10,10,20,20);

setcolor(0);

setlinestyle(0,1,3);

line(9,9,21,21);

line(9,21,21,9);

size = imagesize(10,10,20,20);

body = malloc(size);

getimage(10,10,20,20,body);

cleardevice();

setcolor(0);
//tail1-right

t[0]=20; t[1]=10;

t[2]=10; t[3]=10;

t[4]=20; t[5]=15;

t[6]=10; t[7]=20;

t[8]=20; t[9]=21;

fillpoly(5, t);

size = imagesize(10,10,20,21);

tail1 = malloc(size);

getimage(10,10,20,21,tail1);

cleardevice();

//tail2-left

t[0]=10; t[1]=10;

t[2]=20; t[3]=10;
t[4]=10; t[5]=15;

t[6]=20; t[7]=20;

t[8]=10; t[9]=21;

fillpoly(2, t);

size = imagesize(10,10,20,21);

tail2 = malloc(size);

getimage(10,10,20,21,tail2);

cleardevice();

//tail3-up

t[0]=10; t[1]=20;

t[2]=10; t[3]=10;

t[4]=15; t[5]=20;

t[6]=20; t[7]=10;
t[8]=20; t[9]=21;

fillpoly(5, t);

size = imagesize(10,10,20,21);

tail3 = malloc(size);

getimage(10,10,20,21,tail3);

cleardevice();

//tail4-down

t[0]=10; t[1]=10;

t[2]=10; t[3]=21;

t[4]=15; t[5]=10;

t[6]=20; t[7]=21;

t[8]=20; t[9]=10;

fillpoly(5, t);

size = imagesize(10,10,20,21);
tail4 = malloc(size);

getimage(10,10,20,21,tail4);

cleardevice();

//head1-right

setlinestyle(1,1,1);

setcolor(2);

fillellipse(10,10,10,5);

setcolor(4);

//eyes

fillellipse(15,7,1,1);

fillellipse(15,13,1,1);

size = imagesize(10,5,20,15);

head1 = malloc(size);
getimage(10,5,20,15,head1);

//head2-left

//eyes

fillellipse(5,7,1,1);

fillellipse(5,13,1,1);

size = imagesize(0,5,10,15);

head2 = malloc(size);

getimage(0,5,10,15,head2);

cleardevice();

//head3-up

//eyes

setcolor(2);

fillellipse(12,12,5,10);
setcolor(4);

fillellipse(9,6,1,1);

fillellipse(15,6,1,1);

size = imagesize(7,2,18,12);

head3 = malloc(size);

getimage(7,2,18,12,head3);

//head4-down

//eyes

fillellipse(9,17,1,1);

fillellipse(15,17,1,1);

size = imagesize(7,12,18,22);

head4 = malloc(size);

getimage(7,12,18,22,head4);
cleardevice();

//food

setcolor(15);

setfillstyle(1,15);

fillellipse(10,10,3,5);

size = imagesize(5,3,15,17);

food = malloc(size);

getimage(5,3,15,17,food);

cleardevice();

/* repeat until a key is pressed */

maxx=getmaxx();

maxy=getmaxy();

setlinestyle(0,1,3);
setcolor(9);

rectangle(0,0,maxx,maxy);

setlinestyle(0,1,2);

line(maxx-150,0,maxx-150,maxy);

setcolor(8);

setfillstyle(1,8);

bar(maxx-147,3,maxx-3,63);

setcolor(12);

int maze=1;

if(maze==1)

setfillstyle(1,6);

bar(4,4,maxx-154,14);

bar(4,4,14,maxy-4);
bar(4,maxy-4,maxx-154,maxy-14);

bar(maxx-154-10,4,maxx-154,maxy-4);

settextstyle(0,0,1);

delay(300);

outtextxy(maxx-125,45,"RATTLE SNAKE");

outtextxy(maxx-115,10,"DESIGNED BY");

outtextxy(maxx-140,30,"RUSHIKESH GUMLADU");

delay(300);

setcolor(11);

setlinestyle(0,1,2);

rectangle(maxx-145,65,maxx-5,205);

outtextxy(maxx-128,70,"INSTRUCTIONS");

delay(200);
setcolor(6);

outtextxy(maxx-140,90,"Commands Key");

delay(300);

setcolor(8);

outtextxy(maxx-140,110," Move Up 8");

delay(50);

outtextxy(maxx-140,130," Move Down 5");

delay(50);

outtextxy(maxx-140,150," Move Right 6");

delay(50);

outtextxy(maxx-140,170," Move Left 4");

delay(50);

outtextxy(maxx-140,190," Exit 0");

delay(200);
setcolor(12);

setlinestyle(0,1,2);

rectangle(maxx-145,210,maxx-5,350);

setcolor(1);

outtextxy(maxx-130,220,"Player's Name");

setcolor(15);

outtextxy(maxx-100,230,"RUSHIKESH");

setcolor(4);

delay(200);

itoa(score,scor,10);

outtextxy(maxx-140,250,"Score");

outtextxy(maxx-50,250,scor);

delay(200);

setcolor(10);

outtextxy(maxx-140,280,"Level");
delay(200);

setcolor(13);

outtextxy(maxx-140,310,"Maze 1");

delay(200);

setcolor(14);

outtextxy(maxx-140,340,"High Score ");

outtextxy(maxx-50,340,hs);

for(j=0; j<=1000; j++)

putpixel(random(maxx-150),random(maxy),6);

delay(1);

}
while (a!='0')

// plot new image

if(a=='6')

putimage(x, y, head1, XOR_PUT);

if(a=='4')

putimage(x, y, head2, XOR_PUT);

if(a=='8')

putimage(x, y, head3, XOR_PUT);

if(a=='5')

putimage(x, y, head4, XOR_PUT);

for(j=0; j<k; j++)

{
putimage(X[i-j], Y[i-j], body, XOR_PUT);

if((X[i-j-1]-X[i-j])<0 && (Y[i-j-1]-Y[i-j])==0)

putimage(X[i-j], Y[i-j], tail1, XOR_PUT);

if((X[i-j-1]-X[i-j])>0 && (Y[i-j-1]-Y[i-j])==0)

putimage(X[i-j], Y[i-j], tail2, XOR_PUT);

if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])<0)

putimage(X[i-j], Y[i-j], tail3, XOR_PUT);

if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])>0)

putimage(X[i-j], Y[i-j], tail4, XOR_PUT);


delay(speed);

if(second==1)

setcolor(15);

outtextxy(maxx-140,360,"Press Any Key...");

getch();

setcolor(0);

outtextxy(maxx-140,360,"Press Any Key...");

a='6';

second=2;

}
if(first==1)

setcolor(15);

outtextxy(maxx-140,360,"Congratulations ");

sound(100);

delay(300);

nosound();

getch();

setcolor(0);

outtextxy(maxx-140,360,"Congratulations ");

second++;

first=2;
}

// erase old image

if(a=='6')

putimage(x, y, head1, XOR_PUT);

if(a=='4')

putimage(x, y, head2, XOR_PUT);

if(a=='8')

putimage(x, y, head3, XOR_PUT);

if(a=='5')

putimage(x, y, head4, XOR_PUT);

for(j=0; j<k; j++)

{
putimage(X[i-j], Y[i-j], body, XOR_PUT);

if((X[i-j-1]-X[i-j])<0 && (Y[i-j-1]-Y[i-j])==0)

putimage(X[i-j], Y[i-j], tail1, XOR_PUT);

if((X[i-j-1]-X[i-j])>0 && (Y[i-j-1]-Y[i-j])==0)

putimage(X[i-j], Y[i-j], tail2, XOR_PUT);

if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])<0)

putimage(X[i-j], Y[i-j], tail3, XOR_PUT);

if((X[i-j-1]-X[i-j])==0 && (Y[i-j-1]-Y[i-j])>0)


putimage(X[i-j], Y[i-j], tail4, XOR_PUT);

if(f==0)

putimage(r1,r2,food,XOR_PUT);

f=1;

z--;

if((x>=r1 && y>=r2 && x<=r1+10 && y<=r2+10)||

(x<=r1 && y<=r2 &&x>=r1-10 && y>=r2-10) || z==0)

if(z!=0)

{
sound(800);

delay(20);

setcolor(0);

score += 10;

outtextxy(maxx-50,250,scor);

itoa(score,scor,10);

if(score>hscore)

strcpy(hs,scor);

setfillstyle(1,1);

bar(maxx-140,337,maxx-20,348);

setcolor(14);

outtextxy(maxx-50,340,hs);

outtextxy(maxx-140,340,"High Score ");


if(first==0)

first=1;

setcolor(4);

outtextxy(maxx-50,250,scor);

k++;

nosound();

z=100;

putimage(r1,r2,food,XOR_PUT);

repr1:

r1=random(450);

if(r1<50)
goto repr1;

repr2:

r2=random(400);

if(r2<50)

goto repr2;

f=0;

i++;

X[i]=x;

Y[i]=y;
b=a;

if(kbhit())

rep:

a=getch();

if((b=='6' && a=='4') || (b=='4' && a=='6'))

a=b;

if((b=='8' && a=='5') || (b=='5' && a=='8'))

a=b;

if(a!='6' && a!='4' && a!='8' && a!='0' && a!='5')

a=b;

}
if(a=='8')

y -= bo;

if(a=='5')

y += bo;

if(a=='4')

x -= bo;

if(a=='6')

x += bo;

for(j=i+1; j<i-k; j--)


{

if((Y[i]>=Y[j] && Y[i]<=Y[j]+10) || (Y[i]<=Y[j] && Y[i]>=X[j]-10))

if((X[i]>=X[j] && X[i]<=X[j]+10) || (X[i]<=X[j] && X[i]>=X[j]-10))

a='0';

outtextxy(maxx-140,360,"C");

if((X[i]>=X[j] && X[i]<=X[j]+10) || (X[i]<=X[j] && X[i]>=X[j]-10))

if((Y[i]>=Y[j] && Y[i]<=Y[j]+10) || (Y[i]<=Y[j] && Y[i]>=X[j]-10))


{

a='0';

outtextxy(maxx-140,360,"C");

if(maze==1)

if(x<=14 || x>=maxx-184 || y<=14 || y>=maxy-14)

a='0';
}

if(score>hscore)

ofstream onfile("c:\tc\bin\rattle.txt");

onfile<<scor;

onfile.close();

setcolor(15);

outtextxy(maxx-140,390," Gameover");

sound(100);

delay(400);

nosound();
getch();

/* clean up */

free(body);

closegraph();

You might also like