You are on page 1of 22

Computer Science Project

Topic:
The Snake & Ladder Game

Done by
Krishnaprasad K.A
S. Santhosh Kumar

Bonafide Certificate
This is to certify that
The Snake and Ladder Game
is a bonafide work of
Krishnaprasad K.A.
&
S. Santhosh Kumar
of Class XII,
KendriyaVidyalaya No.2, Kalpakkam

Date:

Principal:

Certificate of Authenticity
This is to certify that
Krishnaprasad K.A.
&
S. Santhosh Kumar
of Class XII,
KendriyaVidyalaya No. 2, Kalpakkam
have completed the project
The Snake & Ladder Game
and submitted for partial fulfilment of Computer
Science Practical Examination held in the
Computer Lab of
KendriyaVidyalaya No.
2, Kalpakkam

during the academic year 2014-15.


Date:
Examiner:

Acknowledgement
We would like to thank Mrs. T. Mrinalini,
Principal, KendriyaVidyalaya no. 2, Kalpakkam
for providing all the necessary facilities for
completing the project on time.
We would also like to thank Mrs. Hema, PGT,
Computer Science for her keen interest and
encouragement throughout the work. We wish
to place a record of my profound feeling of
gratitude for her valuable guidance and
support.

We would also like to extend my gratitude


towards my friends for their constant source of
encouragement and motivation to carry out this
project and their timely help at the crucial
situation. Last but not the least, we would like
to thank our parents for their support

Krishnaprasad K.A.
S. Santhosh Kumar
Class XII

Brief Summary of Program:

This program is based on Snake and ladder game between the CPU and the
User, where CPU is player 2 and User is player 1. The functions of the
functions used in the program have been listed below:

In main function, we are storing the dimensions of dice, so that we can


print at any other location after each turn.The same concept is used to draw
the rectangle board on the screen by storing image size, providing memory
using malloc function& then storing the image to put it later on any other
location. We are using functions to draw ladders and snake on static basis.
In ladder1 function, we are setting the colour of graphics and drawing line
to print ladder on fixed position basis.ladder2 will also do same work with
changing x and y values
In snake1, snake2, snake3 functions, we are just using in-built functions
line and arc to draw curved lines
In numbering function, we are printing numbers from 1 to 100.
Status function is used to print status of the game.
Welcome function is used to play the sound of different frequency for 150
milliseconds
In dispdice function, we are printing the dice at next location after result of
throwing dice that may be 1, 2,3,4,5 or 6.
In play function, we have to play the turn of cpu at back end and of player
by pressing enter. It will generate random number by the use of random
function and put the whole dice image on next higher position.

Program Code:
#include<stdio.h>
#include<graphics.h>

#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
#include<dos.h>
#include<iostream.h>
/* YOU HAVE TO PRESS ENTER TO PLAY YOUR TURN*/
int k=1, i, user=0, dice=0, x1=50, y1=410, x2=70, y2=410, dir1=0,
dir2=0,
ch;
int cnt1=1, cnt2=1;
void *obj1, *obj2, *o1, *o2, *dot, *back, *turn, *ready;
unsignedint size;
void ladder1()
{
intm,n;
for(m=0;m<=250;m+=250)
for(n=0;n<=m;n+=250)
{
setcolor(DARKGRAY);
line(53+m,57+n,55+m,55+n);
line(53+m,57+n,133+m,137+n);
line(55+m,55+n,135+m,135+n);
line(133+m,137+n,135+m,135+n);
setfillstyle(SOLID_FILL, YELLOW);
floodfill(55+m,58+n,DARKGRAY);
line(68+m,42+n,70+m,40+n);
line(68+m,42+n,148+m,122+n);
line(70+m,40+n,150+m,120+n);
line(148+m,122+n,150+m,120+n);
floodfill(70+m,43+n,DARKGRAY);
line(65+m,65+n,78+m,52+n);
line(68+m,68+n,81+m,55+n);
floodfill(79+m,54+n,DARKGRAY);
line(75+m,75+n,88+m,62+n);
line(78+m,78+n,91+m,65+n);
floodfill(89+m,64+n,DARKGRAY);
line(85+m,85+n,98+m,72+n);

line(88+m,88+n,101+m,75+n);
floodfill(99+m,74+n,DARKGRAY);
line(95+m,95+n,108+m,82+n);
line(98+m,98+n,111+m,85+n);
floodfill(109+m,84+n,DARKGRAY);
line(105+m,105+n,118+m,92+n);
line(108+m,108+n,121+m,95+n);
floodfill(119+m,94+n,DARKGRAY);
line(115+m,115+n,128+m,102+n);
line(118+m,118+n,131+m,105+n);
floodfill(129+m,104+n,DARKGRAY);
line(125+m,125+n,138+m,112+n);
line(128+m,128+n,141+m,115+n);
floodfill(139+m,114+n,DARKGRAY);
}
}
void ladder2()
{
intp,q=0;
for(p=0;p<=180;p+=155)
{
line(100+p,330-q,140+p,290-q);
line(100+p,330-q,102+p,332-q);
line(102+p,332-q,142+p,292-q);
line(142+p,292-q,140+p,290-q);
floodfill(141+p,292-q,8);
line(115+p,345-q,155+p,305-q);
line(115+p,345-q,117+p,347-q);
line(117+p,347-q,157+p,307-q);
line(157+p,307-q,155+p,305-q);
floodfill(155+p,307-q,8);
line(112+p,322-q,125+p,335-q);
line(114+p,320-q,127+p,333-q);
floodfill(125+p,334-q,8);
line(122+p,312-q,135+p,325-q);
line(124+p,310-q,137+p,323-q);
floodfill(135+p,324-q,8);

line(132+p,302-q,145+p,315-q);
line(134+p,300-q,147+p,313-q);
floodfill(145+p,314-q,8);
q+=95;
}
}
void snake1()
{
intx,y=0,h=2;
for(x=0;x<=200;x+=125)
{
arc(120+x,110+y,10,85,60);
arc(258+x,85+y,190,240,80);
arc(112+x,118+y,10,80,60);
arc(250+x,93+y,190,290,80);
arc(275+x,100+y,250,270,70);
line(250+x,170+y,250+x,165+y);
line(250+x,165+y,230+x,160+y);
line(230+x,160+y,218+x,155+y);
line(130+x,50+y,115+x,47+y);
line(121+x,59+y,106+x,52+y);
line(106+x,52+y,114+x,48+y);
circle(114+x,52+y,1);
setfillstyle(1,h);
floodfill(116+x,52+y,8);
y+=230; h+=8;
}
}

void snake2()
{
arc(130,220,150,180,40);
arc(130,220,180,253,40);

arc(105,328,273,80,70);
arc(143,220,150,180,40);
arc(143,215,180,230,40);
arc(112,328,265,50,75);
arc(80,354,45,72,115);
line(102,400,104,402);
line(102,400,107,399);
line(95,200,110,185);
line(110,185,109,200);
line(110,185,111,182);
circle(104,198,1);
setfillstyle(1,12);
floodfill(103,199,8);
}
void snake3()
{
arc(255,118,320,0,170);
arc(265,118,305,0,170);
line(384,229,361,260);
line(425,120,429,105);
line(428,105,435,120);
line(428,105,429,100);
circle(430,115,1);
setfillstyle(1,6);
floodfill(430,117,8);
}
void numbering()
{
outtextxy(50,393,"1
outtextxy(50,353,"20
outtextxy(50,313,"21
outtextxy(50,273,"40
outtextxy(50,233,"41
outtextxy(50,193,"60
outtextxy(50,153,"61
outtextxy(50,113,"80

2
4 5 6 7 8
10");
19 18
16 15 1 13
11");
22
25 26
29 30");
39 38 37 36 35 34 33 32 31");
43 44 45
47 48
50");
58 57 56 55
53 52
");
62 63 64
66 67 68 69
");
79
76 75 74 73
71");

//

outtextxy(50,73, "81
83 84 85 86 87
89 90");
outtextxy(50,33, "100 99 98 97 96 95 94 93 92 91");
setcolor(15);
outtextxy(480,40,"Lakshmi Narayana's");
outtextxy(465,50,"The Classic Game of");
settextstyle(GOTHIC_FONT, HORIZ_DIR, 2);
setcolor(LIGHTRED);
outtextxy(470,60,"Snake & Ladder");
setcolor(WHITE);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);

}
void status()
{
setcolor(YELLOW);
outtextxy(480, 95, "Dice output...");
setlinestyle(SOLID_LINE, 1, 3);
rectangle(480, 110, 600, 230);
outtextxy(480, 260, "Turn...");
rectangle(480, 275, 600, 300);
}
void welcome()
{
float octave[]={130.81, 146.83, 164.81, 174.61, 196, 220, 246.94}, n;
for (inti=0; i<50; i++)
{ n=random(6); sound(octave[n]*4); delay(150); nosound(); }
}
voiddispdice()
{
switch (dice)
{
case 1: putimage(535, 165, dot, COPY_PUT); break;
case 2:
putimage(515, 145, dot, COPY_PUT);
putimage(555, 185, dot, COPY_PUT);break;
case 3:
putimage(515, 145, dot, COPY_PUT);
putimage(535, 165, dot, COPY_PUT);

putimage(555, 185, dot, COPY_PUT);break;


case 4: putimage(515, 145, dot, COPY_PUT);
putimage(555, 145, dot, COPY_PUT);
putimage(515, 185, dot, COPY_PUT);
putimage(555, 185, dot, COPY_PUT);break;
case 5: putimage(515, 145, dot, COPY_PUT);
putimage(555, 145, dot, COPY_PUT);
putimage(535, 165, dot, COPY_PUT);
putimage(515, 185, dot, COPY_PUT);
putimage(555, 185, dot, COPY_PUT);break;
case 6: putimage(515, 145, dot, COPY_PUT);
putimage(515, 165, dot, COPY_PUT);
putimage(515, 185, dot, COPY_PUT);
putimage(555, 145, dot, COPY_PUT);
putimage(555, 165, dot, COPY_PUT);
putimage(555, 185, dot, COPY_PUT);break;
}
}
voidgetdice()
{
dice=random(6);

dice++; dispdice();

void play()
{
getimage(50, 410, 60, 420, o1);
getimage(70, 410, 80, 420, o2);
putimage(50, 410, obj1, COPY_PUT);
putimage(70, 410, obj2, COPY_PUT);
while (1)
{
if (user==0)
{
putimage(487, 282, turn, COPY_PUT);
setcolor(GREEN);
outtextxy(480, 285, " Player 1");
again:
ch=getch();
if (ch==13) getdice();
else if (ch==27) exit(1);

elsegoto again;
setcolor(YELLOW);
if (cnt1==96 && dice>=4){delay(1000); goto invalid1; user=1; }
else if (cnt1==97 && dice>=3){delay(1000); goto invalid1; user=1; }
else if (cnt1==98 && dice>=2){delay(1000); goto invalid1; user=1; }
else if (cnt1==99 && dice>=1){delay(1000); goto invalid1; user=1;}
for (i=1; i<=dice; i++, cnt1++)
{
putimage(x1, y1, o1, COPY_PUT);
if (dir1==0)
{
//
size=imagesize(x1, y1, x1+10, y1+10);
//
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
x1+=40;
if (x1>410)
x1-=40, y1-=40, dir1=1;
//
size=imagesize(x1, y1, x1+10, y1+10);
//
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
delay(1000);
goto ch1;
}
else
{
size=imagesize(x1, y1, x1+10, y1+10);
//
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
x1-=40;
if (x1<50) x1+=40, y1-=40, dir1=0;
//
size=imagesize(x1, y1, x1+10, y1+10);
//
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
delay(1000);
goto ch1;
}
ch1: if (cnt1==99)
goto over;
}
if (cnt1==12 || cnt1==72 || cnt1==78)

//
//

//
//

//
//

putimage(x1, y1, o1, COPY_PUT);


x1-=80; y1-=80;
size=imagesize(x1, y1, x1+10, y1+10);
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
if (cnt1==12)
cnt1=34;
else if (cnt1==72)
cnt1=94;
else if (cnt1==78)
{ cnt1=100; goto over; }
}
else if (cnt1==22 || cnt1==46)
{
putimage(x1, y1, o1, COPY_PUT);
x1+=40; y1-=40;
size=imagesize(x1, y1, x1+10, y1+10);
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
if (cnt1==22)
cnt1=38;
else if (cnt1==46)
cnt1=54;
dir1=1;
}
else if (cnt1==36 || cnt1==99)
{
putimage(x1, y1, o1, COPY_PUT);
x1+=160; y1+=120;
size=imagesize(x1, y1, x1+10, y1+10);
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
if (cnt1==36)
cnt1=9;
else if (cnt1==99)
cnt1=66;
dir1=0;
}
else if (cnt1==62)
{
putimage(x1, y1, o1, COPY_PUT);

y1+=240;
size=imagesize(x1, y1, x1+10, y1+10);
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
cnt1=2;

//
//

}
else if (cnt1==90)
{
putimage(x1, y1, o1, COPY_PUT);
x1-=80; y1+=160;
size=imagesize(x1, y1, x1+10, y1+10);
o1=malloc(size);
getimage(x1, y1, x1+10, y1+10, o1);
putimage(x1, y1, obj1, COPY_PUT);
cnt1=48;
}
if (dice==5 || dice==6) user=0; else user=1;
putimage(500, 130, back, COPY_PUT);

//
//

invalid1:
}
else
{

putimage(487, 282, turn, COPY_PUT);


setcolor(BROWN);
outtextxy(480, 285, " Player 2");
setcolor(YELLOW);
again2:
ch=getch();
if (ch==13) getdice();
else if (ch==27) exit(1);
elsegoto again2;
if (cnt2==96 && dice!=4){delay(1000); goto invalid2; user=0; }
else if (cnt2==97 && dice!=3){delay(1000); goto invalid2; user=0;}
else if (cnt2==98 && dice!=2){delay(1000); goto invalid2; user=0;}
else if (cnt2==99 && dice!=1){delay(1000); goto invalid2; user=0; }
for (i=1; i<=dice; i++, cnt2++)
{
putimage(x2, y2, o2, COPY_PUT);
if (dir2==0)

{
//
//

size=imagesize(x2, y2, x2+10, y2+10);


o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
x2+=40;
if (x2>440)
x2-=40, y2-=40, dir2=1;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
delay(1000);
goto ch2;

//
//

}
else
{
//
//

//
//

ch2:

//
//

size=imagesize(x2, y2, x2+10, y2+10);


o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
x2-=40;
if (x2<50) x2+=40, y2-=40, dir2=0;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
delay(1000);
goto ch2;
}
if (cnt2==99)

goto over;

}
if (cnt2==12 || cnt2==72 || cnt2==78)
{
putimage(x2, y2, o2, COPY_PUT);
x2-=80; y2-=80;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
if (cnt2==12)
cnt2=34;
else if (cnt2==72)
cnt2=94;
else if (cnt2==78)
{ cnt2=100; goto over; }

//
//

//
//

//
//

}
else if (cnt2==22 || cnt2==46)
{
putimage(x2, y2, o2, COPY_PUT);
x2+=40; y2-=40;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
if (cnt2==22)
cnt2=38;
else if (cnt2==46)
cnt2=54;
dir2=1;
}
else if (cnt2==36 || cnt2==99)
{
putimage(x2, y2, o2, COPY_PUT);
x2+=160; y2+=120;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
if (cnt2==36)
cnt2=9;
else if (cnt2==99)
cnt2=66;
dir2=0;
}
else if (cnt2==62)
{
putimage(x2, y2, o2, COPY_PUT);
y2+=240;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
cnt2=2;
}
else if (cnt2==90)
{
putimage(x2, y2, o2, COPY_PUT);

x2-=80; y2+=160;
size=imagesize(x2, y2, x2+10, y2+10);
o2=malloc(size);
getimage(x2, y2, x2+10, y2+10, o2);
putimage(x2, y2, obj2, COPY_PUT);
cnt2=48;

//
//

}
if (dice==5 || dice==6) user=1; else user=0;
putimage(500, 130, back, COPY_PUT);
delay(1000);

invalid2:
}
}
over: }

void main()
{
intgd=DETECT, gm;
initgraph(&gd, &gm, "d:\tc\bgi");
randomize();
size=imagesize(487, 282, 593, 293);
turn=malloc(size);
getimage(487, 282, 593, 293, turn);
rectangle(100, 100, 110, 110);
setfillstyle(1, 2);
floodfill(102, 102, 15);
size=imagesize(100, 100, 110, 110);
obj1=malloc(size);
getimage(100, 100, 110, 110, obj1);
cleardevice();
rectangle(100, 100, 110, 110);
setfillstyle(1, 6);
floodfill(102, 102, 15);
size=imagesize(100, 100, 110, 110);
obj2=malloc(size);
getimage(100, 100, 110, 110, obj2);

cleardevice();
o1=malloc(size);

o2=malloc(size);

setcolor(WHITE);
setfillstyle(SOLID_FILL, 15);
rectangle(500, 130, 580, 210);
floodfill(510, 140, 15);
size=imagesize(500, 130, 580, 210);
back=malloc(size);
getimage(500, 130, 580, 210, back);
setcolor(0);
setfillstyle(1, 0);
rectangle(535, 165, 545, 175);
floodfill(540, 170, 0);
size=imagesize(535, 165, 545, 175);
dot=malloc(size);
getimage(535, 165, 545, 175, dot);
cleardevice();
setcolor(WHITE);
setfillstyle(SOLID_FILL, 15);
rectangle(500, 130, 580, 210);
floodfill(510, 140, 15);
for(inti=0;i<=360;i+=40)
for(int j=0;j<=360;j+=40)
{
setfillstyle(SOLID_FILL, k);
bar(50+j,30+i,90+j,70+i);
k+=2;
}
ladder1(); ladder2();
snake1();
snake2();
snake3();
numbering(); status();
welcome();play();

if (cnt1>=99)
else if (cnt2>=99)
getch();
}

outtextxy(480, 330, "PLAYER 1 WINS!");


outtextxy(480, 330, "PLAYER 2 WINS!");

Output Screenshots

Initial Output Screen.............

Player 1s turn

Player 2s Turn

s
Player 1..wins...

Bibliography:
Reference:
Computer Science Textbook by Sumita Arora.
Introduction to C++ programming and Graphics by Constantine Pozrikidis
Cprogramming.com
Cplusplus.com

You might also like