Introduction
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).
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.
- 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)
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;
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);
errorcode = graphresult();
if (errorcode != grOk)
getch();
exit(1);
maxx = getmaxx();
maxy = getmaxy();
y = 160;
x = 80;
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();
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);
delay(50);
delay(50);
delay(50);
delay(50);
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-50,340,hs);
putpixel(random(maxx-150),random(maxy),6);
delay(1);
}
while (a!='0')
if(a=='6')
if(a=='4')
if(a=='8')
if(a=='5')
{
putimage(X[i-j], Y[i-j], body, XOR_PUT);
if(second==1)
setcolor(15);
getch();
setcolor(0);
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;
}
if(a=='6')
if(a=='4')
if(a=='8')
if(a=='5')
{
putimage(X[i-j], Y[i-j], body, XOR_PUT);
if(f==0)
putimage(r1,r2,food,XOR_PUT);
f=1;
z--;
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);
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();
a=b;
a=b;
a=b;
}
if(a=='8')
y -= bo;
if(a=='5')
y += bo;
if(a=='4')
x -= bo;
if(a=='6')
x += bo;
a='0';
outtextxy(maxx-140,360,"C");
a='0';
outtextxy(maxx-140,360,"C");
if(maze==1)
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();