COMPUTER SCIENCE
THE SNAKE GAME
C++ PROJECT
NAME: AMISHASHARON R.S.
CLASS: XII - A
ADMISSION NO: 70658
ACADEMIC YEAR: 2019-20
1
Certificate
This is to certify that Miss AMISHASHARON R.S. of class
XII - A of International Indian School, Dammam has
completed her project file under my supervision. She has
taken proper care and shown utmost sincerity in completion
of this project.
I certify that this project is up to my expectations and as
per the guidelines issued by CBSE.
Internal Examiner External Examiner
Signature Signature
Name: Name:
Date: Date:
2
ACKNOWLEDGEMENT
Primarily I would thank God for making it possible to
complete this project successfully I would like to thank my
Computer Science teacher, Mrs. Smitha Rajappan, whose
valuable guidance has been the one that helped me patch
this project. Her suggestions and instructions have served as
a major contribution in the completion of this project.
Then I would like to thank my parents and friends who
have helped me with their valuable suggestions. Their
guidance has been helpful in is various phases for the
completion of this project.
CODE
3
_ #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;
4
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) /* an error occurred */
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
maxx = getmaxx();
maxy = getmaxy();
y = 160;
x = 80;
5
for(int j=0; j<=3; j++)
X[i-j]=x-bo*(j+1);
Y[i-j]=y;
6
//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);
7
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(5, 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);
8
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
9
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);
10
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();
11
/* 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);
12
settextstyle(0,0,1);
delay(300);
outtextxy(maxx-125,30,"RATTLE SNAKE");
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");
13
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,"Yellow");
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);
14
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);
15
}
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...");
16
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')
17
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);
18
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);
19
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);
20
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=getche();
if((b=='6' && a=='4') || (b=='4' && a=='6'))
a=b;
21
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(x>maxx-170)
x=0;
if(y>maxy)
y=0;*/
if(a=='8')
y -= bo;
if(a=='5')
y += bo;
if(a=='4')
x -= bo;
22
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';
}
23
outtextxy(maxx-140,360,"C ");
/* for(j=i; j<i-k; j--)
if((y>=Y[j] && y<=Y[j]+10) || (y<=Y[j] && y>=Y[j]-10))
if((x>=X[j] && x<=X[j]+10) || (x<=X[j] && x>=X[j]-10))
a='5';
if((x>=X[j] && x<=X[j]+10) || (x<=X[j] && x>=X[j]-10))
if((y>=Y[j] && y<=Y[j]+10) || (y<=Y[j] && y>=Y[j]-10))
a='5';
}
24
if(j==0)
break;
} */
/* if(x<=0)
x=maxx-170;
if(y<=0)
y=maxy;*/
if(maze==1)
if(x<=14 || x>=maxx-184 || y<=14 || y>=maxy-14)
a='0';
if(score>hscore)
25
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();
26
27