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

Introduction

Uploaded by

epersonal998
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

Introduction

Uploaded by

epersonal998
Copyright
© © All Rights Reserved
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