Professional Documents
Culture Documents
CG Ludo Game
CG Ludo Game
CG Ludo Game
“LUDO GAME”
Submitted in partial fulfilment of the requirements for the 6th semester CG lab
By
BIBEK KUMAR SAH
(1SP19CS016)
&
PRASHANT KUMAR
(1SP19CS075)
Under the guidance
Of
BENGALURU-560049
2021-2022
1
LUDO GAME
CERTIFICATE
This is to certify the project work entitled “LUDO GAME” has been successfully carried out
by BIBEK KUMAR SAH & PRASHANT KUMAR, bearing USN 1SP19CS016 &
1SP19CS075, of V sem in partial fulfilment for the award of Bachelor of Engineering in
Computer Science and Engineering of the Visveshvaraya Technological University,
Belgaum during the year 2022. The project has been approved as it satisfied the academic
requirement in respect of the mini project work prescribed for Bachelor of Engineering.
2
LUDO GAME
ACKNOWLEDGEMENT
While presenting this Graphics Project on “LUDO GAME”, we feel that it is our duty to
acknowledge the help rendered to us by various persons.
Firstly we thank the Management late SHRI A KRISHNAPPA, chairman SEA college of
Engineering and Technology for providing necessary infrastructure and creating good
environment.
We would also indebted to my Parents and Friends for their continued moral and material
support throughout the course of project and helping me in finalize the presentation.
Our heartful thanks to all those have contributed bits, bytes and words to accomplish this
Project.
PRASHANT KUMAR
(1SP19CS075)
(1SP19CS016)
3
LUDO GAME
ABSTRACT
4
LUDO GAME
INDEX
2 REQUIREMENT ANALYSIS 7
Requirement gathering
Software requirement
Hardware requirement
3 SYSTEM ARCHITECTURE 8
ER Diagram
4 SOURCE CODE 9
5 RESULT 85
Starting page
On right click
Rules of game
Loading game
Game start
Game in progress
6 CONCLUSION 88
7 REFERENCE 89
5
LUDO GAME
INTRODUCTION
⮚Game Rules
•Four pieces are placed in the start area of their colour.
•Throw a single die.
• First throw a six or one to move.
•Player moves a piece forward 1 to 6 squares.
•Six results in another turn.
•Player can’t move, pass to next player.
•Captured and returns to the starting area.
•No doubling rules.
•Advance to home square.
•Winner .
6
LUDO GAME
1.1 OBJECTIVES
Ludo is a fun, family-friendly board game for 2 to 4 people. The game has its
roots in an Indian game called Pachisi, and it is similar to games like Parchisi
(aka Parcheesi) and Uckers. It's easy to learn how to play Ludo! The goal of the
game is to get all your pawns inside the home space, which is located in the
middle of the board. So, it is Good for entertainment.
CHAPTER 2
REQUIREMENT ANALYSIS
2.1 REQUIREMENT GATHERING
Requirement Analysis is the first and important step in the Software development activity for
building robust and user-friendly applications. I have started working on determining the
functionalities that the application should provide. I have done a good amount of research on
existing systems and the disadvantages of those.
REQUIREMENT SPECIFICATIONS
Below are the technical requirements to develop Job Portal application:
7
LUDO GAME
SYSTEM ARCHITECTURE :
8
LUDO GAME
SOURCE CODE:
/*
* ludo.c
*
* Created on: Jul 10, 2022
*/
#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isIdle=0,ww,wh,s;
int in_about=1;
int in_guide=1;
int fontType;
9
LUDO GAME
void *font;
int f1,f2,g1,g2,k1,k2,l1,l2,ply1,ply2,h1,h2,h3,h4,s1,s2,u,v,r1,op,w,dice1,enter;
int i,ch1,ch,p1,p2,ra1,z,z1,za1;
float
a[100][100]={{-0.4,-0.325},{-0.1375,-0.7275},{-0.1375,-0.61},{-0.1375,-0.4925},{-0.1375,-0.37
5},{-0.1375,-0.2575},{-0.2575,-0.14},{-0.375,-0.14},{-0.495,-0.14},{-0.6110,-0.14},{-0.7275,-0.
14},{-0.84,-0.14},{-0.84,0.005},{-0.84,0.1375},{-0.7275,0.1375},{-0.6110,0.1375},{-.495,.1375}
,{-0.375,0.1375},{-0.2575,0.1375},{-0.1375,0.2575},{-0.1375,0.375},{-0.1375,0.4925},{-0.137
5,0.61},{-0.1375,0.7275},{-0.1375,0.845},{0,0.845},{0.1375,0.845},{0.1375,0.7275},{0.1375,0.
61},{0.1375,0.4925},{0.1375,0.375},{0.1375,0.2575},{0.2575,0.1375},{0.375,0.1375},{.495,0.
14},{0.6110,0.1375},{0.7275,0.1375},{0.84,0.1375},{0.84,0.005},{0.84,-0.14},{0.7275,-0.14},{
0.6110,-0.14},{.495,-0.14},{0.375,-0.14},{0.2575,-0.14},{0.1375,-0.2575},{0.1375,-0.375},{0.1
375,-0.4925},{0.1375,-0.61},{0.1375,-0.7275},{0.1375,-0.845},{0,-0.845},{0,-0.7275},{0,-0.61},
{0,-0.4925},{0,-0.375},{0,-0.2575}};
float
b[100][100]={{-0.4,-0.325},{0.1375,0.7275},{0.1375,0.61},{0.1375,0.4925},{0.1375,0.375},{0.
1375,0.2575},{0.2575,0.1375},{0.375,0.1375},{0.495,0.14},{0.6110,0.1375},{0.7275,0.1375},{
0.84,0.1375},{0.84,0.005},{0.84,-0.14},{0.7275,-0.14},{0.6110,-0.14},{.495,-.14},{0.375,-0.14},
{0.2575,-0.14},{0.1375,-0.2575},{0.1375,-0.375},{0.1375,-0.4925},{0.1375,-0.61},{0.1375,-0.7
275},{0.1375,-0.845},{0,-0.845},{-0.1375,-0.845},{-0.1375,-0.7275},{-0.1375,-0.61},{-0.1375,-
0.4925},{-0.1375,-0.375},{-0.1375,-0.2575},{-0.2575,-0.14},{-0.375,-0.14},{-.495,-0.14},{-0.61
10,-0.14},{-0.7275,-0.14},{-0.84,-0.14},{-0.84,0.005},{-0.84,0.1375},{-0.7275,0.1375},{-0.6110
,0.1375},{-.495,0.1375},{-0.375,0.1375},{-0.2575,0.1375},{-0.1375,0.2575},{-0.1375,0.375},{-
0.1375,0.4925},{-0.1375,0.61},{-0.1375,0.7275},{-0.1375,0.845},{0,0.845},{0,0.7275},{0,0.61}
,{0,0.4925},{0,0.375},{0,0.2575}};
float c[10][10]={{-0.5,-0.7},{-0.7,-0.5}};
float d[10][10]={{0.5,0.7},{0.7,0.5}};
int
A[100][100]={{430,527},{630,608},{626,567},{628,528},{626,485},{629,441},{585,397},{544,3
98},{502,400},{463,397},{420,395},{381,397},{380,350},{377,304},{421,303},{460,304},{501,3
01},{541,302},{585,300},{627,260},{627,221},{627,177},{627,138},{627,97},{627,58},{676,56},
{723,54},{723,96},{725,138},{724,176},{725,216},{723,258},{764,300},{809,303},{850,304},{8
90,304},{931,303},{972,303},{971,352},{973,398},{932,396},{890,396},{851,395},{811,395},{7
68,396},{724,441},{725,484},{724,523},{725,562},{725,606},{728,645},{677,645},{677,608},{6
77,565},{677,522},{677,485},{677,442}};
int
B[100][100]={{853,104},{723,96},{725,138},{724,176},{725,216},{723,258},{764,300},{809,30
3},{850,304},{890,304},{931,303},{972,303},{971,352},{973,398},{932,396},{890,396},{851,39
5},{811,395},{768,396},{724,441},{725,484},{724,523},{725,562},{725,606},{728,645},{677,64
10
LUDO GAME
5},{629,650},{630,608},{626,567},{628,528},{626,485},{629,441},{585,397},{544,398},{502,40
0},{463,397},{420,395},{381,397},{380,350},{377,304},{421,303},{460,304},{501,301},{541,30
2},{585,300},{627,260},{627,221},{627,177},{627,138},{627,97},{627,58},{676,56},{677,97},{6
77,137},{677,177},{677,219},{677,261}};
//int
A[100][100]={{424,626},{661,724},{661,672},{660,622},{659,574},{659,526},{608,474},{559,4
74},{512,474},{463,473},{414,473},{365,475},{363,417},{363,359},{413,359},{463,361},{511,3
60},{559,360},{609,358},{661,306},{660,258},{659,210},{659,162},{659,113},{659,63},{719,65
},{774,65},{774,113},{775,163},{775,209},{775,258},{776,306},{826,361},{877,362},{925,360},
{974,361},{1023,361},{1072,360},{1071,418},{1073,473},{1023,473},{974,473},{926,475},{87
8,473},{826,472},{773,526},{774,574},{773,622},{774,672},{775,720},{775,771},{718,773},{71
9,722},{720,675},{719,625},{719,577},{717,530}};
//int
B[100][100]={{929,125},{774,113},{775,163},{775,209},{775,258},{776,306},{826,361},{877,3
62},{925,360},{974,361},{1023,361},{1072,360},{1071,418},{1073,473},{1023,473},{974,473},
{926,475},{878,473},{826,472},{773,526},{774,574},{773,622},{774,672},{775,720},{775,771},
{718,773},{660,771},{661,724},{661,672},{660,622},{659,574},{659,526},{608,474},{559,474},
{512,474},{463,473},{414,473},{365,475},{363,417},{363,359},{413,359},{463,361},{511,360},
{559,360},{609,358},{661,306},{660,258},{659,210},{659,162},{659,113},{659,63},{719,65},{7
19,112},{719,161},{719,209},{719,259},{719,309}};
void display_inter_guide();
void arrow();
void display_enter1();
void init()
{
glClearColor(1,0.8,0.5,1);
glEnable(GL_DEPTH_TEST);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowPosition(0,0);
glutInitWindowSize(1355,703);
glutCreateWindow("LUDO - BOARD GAME");
}
void myReshape(int w,int h)
11
LUDO GAME
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-1.0,1.0,-1.0*(GLfloat)h/(GLfloat)w,
2.0*(GLfloat)h/(GLfloat)w,-20.0,20.0);
else
glOrtho(-1.0*(GLfloat)w/(GLfloat)h,
1.0*(GLfloat)w/(GLfloat)h,-1.0,1.0,-20.0,20.0);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
void dice(int y)
{
glPointSize(5);
glColor3f(1,1,1);
glBegin(GL_QUADS);
glVertex2f(-0.82,0.25);
glVertex2f(-0.82,0.38);
glVertex2f(-0.69,0.38);
glVertex2f(-0.69,0.25);
glEnd();
glBegin(GL_QUADS);
glVertex2f(-0.82,0.38);
glVertex2f(-0.69,0.38);
glVertex2f(-0.67,0.4);
glVertex2f(-0.79,0.4);
glEnd();
12
LUDO GAME
glBegin(GL_QUADS);
glVertex2f(-0.69,0.38);
glVertex2f(-0.67,0.4);
glVertex2f(-0.67,0.27);
glVertex2f(-0.69,0.25);
glEnd();
glColor3f(0,0,0);
glBegin(GL_LINE_LOOP);
glVertex2f(-0.82,0.38);
glVertex2f(-0.69,0.38);
glVertex2f(-0.67,0.4);
glVertex2f(-0.79,0.4);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2f(-0.69,0.38);
glVertex2f(-0.67,0.4);
glVertex2f(-0.67,0.27);
glVertex2f(-0.69,0.25);
glEnd();
glColor3f(0,0,0);
switch(y)
{
case 0:
case 1:
glBegin(GL_POINTS);
glVertex2f(-0.75,0.31);
glEnd();
13
LUDO GAME
break;
case 2:glBegin(GL_POINTS);
glVertex2f(-0.73,0.31);
glVertex2f(-0.77,0.31);
glEnd();
break;
case 3:glBegin(GL_POINTS);
glVertex2f(-0.72,0.31);
glVertex2f(-0.755,0.31);
glVertex2f(-0.79,0.31);
glEnd();
break;
case 4:glBegin(GL_POINTS);
glVertex2f(-0.72,0.285);
glVertex2f(-0.72,0.345);
glVertex2f(-0.78,0.285);
glVertex2f(-0.78,0.345);
glEnd();
break;
case 5:glBegin(GL_POINTS);
glVertex2f(-0.72,0.285);
glVertex2f(-0.72,0.345);
glVertex2f(-0.75,0.31);
glVertex2f(-0.78,0.285);
glVertex2f(-0.78,0.345);
glEnd();
break;
case 6:glBegin(GL_POINTS);
glVertex2f(-0.72,0.29);
14
LUDO GAME
glVertex2f(-0.755,0.29);
glVertex2f(-0.79,0.29);
glVertex2f(-0.72,0.34);
glVertex2f(-0.755,0.34);
glVertex2f(-0.79,0.34);
glEnd();
break;
}
glPointSize(25);
glFlush();
}
C[0][0]=A[k2][0];C[0][1]=A[k2][1];C[1][0]=A[k1][0];C[1][1]=A[k1][1];
D[0][0]=B[l2][0];D[0][1]=B[l2][1];D[1][0]=B[l1][0];D[1][1]=B[l1][1];
15
LUDO GAME
if(ra1+k1>57||ra1+k2>57||ra1+l1>57||ra1+l2>57)
{z=1;}
if(btn==GLUT_LEFT_BUTTON&&state==GLUT_DOWN)
{
if(ply1==1&&ply2==0)
{
if(k1==0&&x>483&&x<517&&y<615&&y>580)
{
if(ra1==6||ra1==1)
player1(1);
else
player1(2);
}
else if(k2==0&&x>412&&x<447&&y<545&&y>510)
{
if(ra1==6||ra1==1)
player1(2);
else
player1(1);
}
else
if(x>(C[0][0]-20)&&x<(C[0][0]+20)&&y>(C[0][1]-20)&&y<(C[0][1]+20)&&z1==1&&k2>0){
player1(2);
}
else
if(x>(C[1][0]-20)&&x<(C[1][0]+20)&&y>(C[1][1]-20)&&y<(C[1][1]+20)&&z1==1&&k1>0){
player1(1);
}
16
LUDO GAME
if(z==1&&dice1==1)
{ z=0;
z1=1;
ra1=rand()%2+rand()%3+rand()%2+rand()%3;
if(ra1==0)
ra1=1;
dice(ra1);
}
}
else
{if(l1==0&&x>833&&x<873&&y>84&&y<124)
{
if(ra1==6||ra1==1)
player2(1);
else
player2(2);
else if(l2==0&&x>906&&x<940&&y<190&&y>158)
{
if(ra1==6||ra1==1)
player2(2);
else
player2(1);
17
LUDO GAME
else
if(x>(D[0][0]-20)&&x<(D[0][0]+20)&&y>(D[0][1]-20)&&y<(D[0][1]+20)&&z1==1&&l2>0)
player2(2);
else
if(x>(D[1][0]-20)&&x<(D[1][0]+20)&&y>(D[1][1]-20)&&y<(D[1][1]+20)&&z1==1&&l1>0){
player2(1);
}
if(z==1&&dice1==1)
{ z=0;
z1=1;
ra1=rand()%2+rand()%3+rand()%2+rand()%3;
if(ra1==0)
ra1=1;
dice(ra1);
}
}
}
void display2();
void wait(void);
void call(int w);
void display1(void);
void key(unsigned char key,int x,int y)
{
18
LUDO GAME
if(key=='q' || key=='Q')
call(2);
if(key==13 && enter==1)
{
call(1);
wait();
display_enter1();
display1();
}
}
void call(int w)
{ switch(w)
{
case 1:glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0,0,0,0);
glFlush();
f1=0;f2=0;g1=0;g2=0;k1=0;k2=0;l1=0;l2=0;ply1=1;ply2=0;h1=0;h2=0;h3=0;h4=0,s1=0,s2=0;
c[0][0]=-0.5;c[0][1]=-0.7;c[1][0]=-0.7;c[1][1]=-0.5;
d[0][0]=0.5;d[0][1]=0.7;d[1][0]=0.7;d[1][1]=0.5;
wait();
break;
case 2:exit(0);
break;
}
19
LUDO GAME
void about(void)
{
char *about="\t\t\tMATCH IS DRAWN ! \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nQ = QUIT ENTER
= RESTART";
void *en=GLUT_BITMAP_TIMES_ROMAN_24;
int i;
float x=-0.4,y=0.3,z=0;
in_about=1;
glPushMatrix();
glLoadIdentity();
glColor3f(0.9,0.7,0.6);
glRasterPos3f(x,y,z);
for(i=0;about[i]!='\0';i++)
{
if(about[i]=='\n')
{ y-=0.08;
glRasterPos3f(x,y,z);
}
if(about[i]=='\t')
{
x-=0.03;
}
else
20
LUDO GAME
{wait();
glutBitmapCharacter(en,about[i]);
}
}
glPopMatrix();
glFlush();
enter=1;
}
void about1(void)
{
char *about="\t\t\tCONGRATULATIONS !\n\n\nPLAYER 1 WON THE
GAME.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nQ = QUIT ENTER = RESTART";
void *en=GLUT_BITMAP_TIMES_ROMAN_24;
int i;
float x=-0.4,y=0.6,z=0;
in_about=1;
glPushMatrix();
glLoadIdentity();
glColor3f(0.9,0.7,0.6);
glRasterPos3f(x,y,z);
for(i=0;about[i]!='\0';i++)
{
if(about[i]=='\n')
{ y-=0.08;
glRasterPos3f(x,y,z);
21
LUDO GAME
}
if(about[i]=='\t')
{
x-=0.03;
}
else
{wait();
glutBitmapCharacter(en,about[i]);
}
}
glPopMatrix();
glFlush();
enter=1;
}
void about2(void)
{
in_about=1;
glPushMatrix();
glLoadIdentity();
22
LUDO GAME
glColor3f(0.9,0.7,0.6);
glRasterPos3f(x,y,z);
for(i=0;about[i]!='\0';i++)
{
if(about[i]=='\n')
{ y-=0.08;
glRasterPos3f(x,y,z);
}
if(about[i]=='\t')
{
x-=0.03;
}
else
{wait();
glutBitmapCharacter(en,about[i]);
}
}
glPopMatrix();
glFlush();
enter=1;
}
void check_cond()
{
if((k1>27&&p1==0)&&(k2>27&&p1==0)&&(l1>27&&p2==0)&&(l2>27&&p2==0))
{
dice1=0;
23
LUDO GAME
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(0,0,0,0);
glFlush();
about();
else if(s1==2)
{ dice1=0;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(0,0,0,0);
glFlush();
about1();
}
else if(s2==2)
{ dice1=0;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(0,0,0,0);
glFlush();
about2();
}
}
void circle()
{float ang;
int i;
glPushMatrix();
glLoadIdentity();
24
LUDO GAME
glTranslatef(-1.47,0.72,0);
if(ply1==1&&ply2==0)
{glColor3f(1,0,0);}
else
{glColor3f(0,0,0);}
glBegin(GL_POLYGON);
for(i=0;i<=12;i++)
{
ang=(3.1415/6)*i;
glVertex2f(0.02*cos(ang),0.02*sin(ang));
}
glEnd();
glColor3f(0,1,0);
glFlush();
glPopMatrix();
glFlush();
glPushMatrix();
glLoadIdentity();
glTranslatef(-1.47,0.56,0);
if(ply1==0&&ply2==1)
{glColor3f(1,0,0);}
else
{glColor3f(0,0,0);}
glBegin(GL_POLYGON);
for(i=0;i<=12;i++)
{
25
LUDO GAME
ang=(3.1415/6)*i;
glVertex2f(0.02*cos(ang),0.02*sin(ang));
}
glEnd();
glColor3f(0,1,0);
glFlush();
glPopMatrix();
glFlush();
}
void display2()
{ glColor3f(1,1,1);
glBegin(GL_LINE_STRIP);
glVertex2f(0.15,-0.84); //Bottom direction
glVertex2f(0,-0.84);
glVertex2f(0,-0.6);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0,-0.6);
glVertex2f(-0.04,-0.64);
glVertex2f(0,-0.6);
glVertex2f(0.04,-0.64);
glEnd();
26
LUDO GAME
glBegin(GL_LINE_STRIP);
glVertex2f(-0.15,0.84); //Top direction
glVertex2f(0,0.84);
glVertex2f(0,0.6);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0,0.6);
glVertex2f(-0.04,0.64);
glVertex2f(0,0.6);
glVertex2f(0.04,0.64);
glEnd();
glPointSize(25);
glBegin(GL_POINTS);
glColor3f(0,1,0);
glVertex2f(c[0][0],c[0][1]);
glVertex2f(c[1][0],c[1][1]);
glColor3f(1,0,1);
glVertex2f(d[0][0],d[0][1]);
glVertex2f(d[1][0],d[1][1]);
glEnd();
glColor3f(0,1,0);
glFlush();
circle();
check_cond();
27
LUDO GAME
if((f1==0)&&(h1==0))
{
glBegin(GL_POINTS);
glVertex2f(c[0][0],c[0][1]);
glEnd();
glFlush();
}
else if(h1==1)
{
glBegin(GL_POINTS);
glVertex2f(0.7,-0.5);
glEnd();
}
else
{
glBegin(GL_POINTS);
glVertex2f(a[k1][0],a[k1][1]);
glEnd();
28
LUDO GAME
if((f2==0)&&(h2==0))
{
glBegin(GL_POINTS);
glVertex2f(c[1][0],c[1][1]);
glEnd();
}
else if(h2==1)
{
glBegin(GL_POINTS);
glVertex2f(0.5,-0.7);
glEnd();
}
else
{
glBegin(GL_POINTS);
glVertex2f(a[k2][0],a[k2][1]);
glEnd();
}
glColor3f(0,1,0);
if(h1==1)
ch=2;
29
LUDO GAME
else if(h2==1)
ch=1;
ply1=0;
ply2=1;
}
else if((ra1+k1>57&&ch==1)||(ra1+k1>51&&p1==0&&ch==1))
{if(a[ra1+k2][0]==c[0][0]&&a[ra1+k2][1]==c[0][1])
ch=776;
else
ch=2;}
else if((ra1+k2>57&&ch==2)||(ra1+k2>51&&p1==0&&ch==2))
{if(a[ra1+k1][0]==c[1][0]&&a[ra1+k1][1]==c[1][1])
ch=776;
else
30
LUDO GAME
ch=1;}
if(ch==1&&a[ra1+k1][0]==c[1][0]&&a[ra1+k1][1]==c[1][1])
{display2();
return;
else if(ch==2&&a[ra1+k2][0]==c[0][0]&&a[ra1+k2][1]==c[0][1])
{display2();
return;
}
switch(ch)
{
case 1:
if(f1==0&&(ra1==6||ra1==1)) //y==4;
{
ra1=1;
f1=1;
31
LUDO GAME
}
else
{z=1;
z1=0;
ply1=0;ply2=1;
if((f1==1)&&(ra1+k1<=57)&&(h1==0))
{
for(i=0;i<2;i++)
if(a[ra1+k1][0]==d[i][0]&&a[ra1+k1][1]==d[i][1])
if(i==0) {g1=0;l1=0;d[0][0]=0.5;d[0][1]=0.7;}
if(i==1) {g2=0;l2=0;d[1][0]=0.7;d[1][1]=0.5;}
p1=1;
32
LUDO GAME
if(((ra1+k1)>51&&p1==1)||(ra1+k1<=51))
{ glColor3f(0,0,0);
if(k1==0)
glBegin(GL_POINTS);
glVertex2f(-0.5,-0.7);
glEnd();
} else
if(k1==1||k1==52||k1==53||k1==54||k1==55||k1==56)
{glColor3f(1,0,0);
else if(k1==27)
{glColor3f(0,0,1);
glBegin(GL_POINTS);
glVertex2f(a[k1][0],a[k1][1]);
glEnd();
glColor3f(0,1,0);
33
LUDO GAME
k1=ra1+k1;
z=1;
c[0][0]=a[k1][0];
c[0][1]=a[k1][1];
if(ra1==6)
{z1=0;
ply1=1;
ply2=0;
else
ply1=0;
ply2=1;
34
LUDO GAME
}ch=0;
if(k1==57)
{k1=0;
h1=1;
glBegin(GL_POINTS);
c[0][0]=0.7;c[0][1]=-0.5;
glVertex2f(c[0][0],c[0][1]);
s1++;
glEnd();
break;
case
2:if(f2==0&&(ra1==6||ra1==1))
{ra1=1;
f2=1;
}
35
LUDO GAME
else
{z=1;
z1=0;
ply1=0;ply2=1;
}
if((f2==1)&&(ra1+k2<=57)&&(h2==0))
{
for(i=0;i<2;i++)
if(a[ra1+k2][0]==d[i][0]&&a[ra1+k2][1]==d[i][1])
if(i==0) {g1=0;l1=0;d[0][0]=0.5;d[0][1]=0.7;}
if(i==1) {g2=0;l2=0;d[1][0]=0.7;d[1][1]=0.5;}
p1=1;
36
LUDO GAME
if(((ra1+k2)>51&&p1==1)||(ra1+k2<=51))
{ glColor3f(0,0,0);
if(k2==0)
glBegin(GL_POINTS);
glVertex2f(-0.7,-0.5);
glEnd();
} else
if(k2==1||k2==52||k2==53||k2==54||k2==55||k2==56)
{glColor3f(1,0,0);
else if(k2==27)
{glColor3f(0,0,1);
glBegin(GL_POINTS);
glVertex2f(a[k2][0],a[k2][1]);
glEnd();
glColor3f(0,1,0);
37
LUDO GAME
k2=ra1+k2;
z=1;
c[1][0]=a[k2][0];
c[1][1]=a[k2][1];
if(ra1==6)
{z1=0;
ply1=1;
ply2=0;
else
ply1=0;
ply2=1;
}
}
38
LUDO GAME
if(k2==57)
{k2=0;
h2=1;
c[1][0]=0.5;c[1][1]=-0.7;
s1++;
break;
case
776:ply1=0;ply2=1;
break;
}ch=0;
glColor3f(1,0,1);
arrow();
display2();
39
LUDO GAME
glColor3f(1,0,1);
if((g1==0)&&(h3==0))
{
glBegin(GL_POINTS);
glVertex2f(d[0][0],d[0][1]);
glEnd();
}
else if(h3==1)
{
glBegin(GL_POINTS);
glVertex2f(-0.7,0.5);
glEnd();
}
else
{
glBegin(GL_POINTS);
glVertex2f(b[l1][0],b[l1][1]);
glEnd();
}
if((g2==0)&&(h4==0))
{
glBegin(GL_POINTS);
glVertex2f(d[1][0],d[1][1]);
glEnd();
40
LUDO GAME
}
else if(h4==1)
{
glBegin(GL_POINTS);
glVertex2f(-0.5,0.7);
glEnd();
}
else
{
glBegin(GL_POINTS);
glVertex2f(b[l2][0],b[l2][1]);
glEnd();
}
glColor3f(1,0,1);
if(h3==1)
ch1=2;
else if(h4==1)
ch1=1;
41
LUDO GAME
else
if((ra1+l1>57||(ra1+l1>51&&p2==0))&&(ra1+l2>57||(ra1+l2>51&&p2==0)))
{
ply1=1;
ply2=0;
}
else if((ra1+l1>57&&ch1==1)||(ra1+l1>51&&p2==0&&ch1==1))
{
if(b[ra1+l2][0]==d[0][0]&&b[ra1+l2][1]==d[0][1])
ch1=776;
else
ch1=2;}
else if((ra1+l2>57&&ch1==2)||(ra1+l2>51&&p2==0&&ch1==2))
{
if(b[ra1+l1][0]==d[1][0]&&b[ra1+l1][1]==d[1][1])
ch1=776;
else
ch1=1;}
42
LUDO GAME
if(ch1==1&&b[ra1+l1][0]==d[1][0]&&b[ra1+l1][1]==d[1][1])
display2();
return;
else if(ch1==2&&b[ra1+l2][0]==d[0][0]&&b[ra1+l2][1]==d[0][1])
display2();
return;
switch(ch1)
{
case
1:if(g1==0&&(ra1==6||ra1==1))
{ra1=1;
g1=1;
}
43
LUDO GAME
else
{z=1;
z1=0;
ply1=1;ply2=0;
if((g1==1)&&(ra1+l1<=57)&&(h3==0))
{
for(i=0;i<2;i++)
if(b[ra1+l1][0]==c[i][0]&&b[ra1+l1][1]==c[i][1])
p2=1;
if(i==0) {f1=0;k1=0;c[0][0]=-0.5;c[0][1]=-0.7;}
if(i==1) {f2=0;k2=0;c[1][0]=-0.7;c[1][1]=-0.5;}
44
LUDO GAME
if(((ra1+l1)>51&&p2==1)||(ra1+l1<=51))
{ glColor3f(0,0,0);
if(l1==0)
glBegin(GL_POINTS);
glVertex2f(0.5,0.7);
glEnd();
} else
if(l1==1||l1==52||l1==53||l1==54||l1==55||l1==56)
{glColor3f(0,0,1);
else if(l1==27)
{glColor3f(1,0,0);
45
LUDO GAME
glBegin(GL_POINTS);
glVertex2f(b[l1][0],b[l1][1]);
glEnd();
glColor3f(1,0,1);
z=1;
l1=ra1+l1;
d[0][0]=b[l1][0];
d[0][1]=b[l1][1];
if(ra1==6)
{z1=0;
ply1=0;
ply2=1;
else
ply1=1;
ply2=0;
46
LUDO GAME
}ch1=0;
if(l1==57)
{ l1=0;
h3=1;
d[0][0]=-0.7;d[0][1]=0.5;
s2++;
break;
case
2:if(g2==0&&(ra1==6||ra1==1))
{ra1=1;
g2=1;
}
else
{z=1;
47
LUDO GAME
z1=0;
ply1=1;ply2=0;
}
if((g2==1)&&(ra1+l2<=57)&&(h4==0))
{
for(i=0;i<2;i++)
if(b[ra1+l2][0]==c[i][0]&&b[ra1+l2][1]==c[i][1])
if(i==0) {f1=0;k1=0;c[0][0]=-0.5;c[0][1]=-0.7;}
if(i==1) {f2=0;k2=0;c[1][0]=-0.7;c[1][1]=-0.5;}
p2=1;
if(((ra1+l2)>51&&p2==1)||(ra1+l2<=51))
48
LUDO GAME
{ glColor3f(0,0,0);
if(l2==0)
glBegin(GL_POINTS);
glVertex2f(0.7,0.5);
glEnd();
} else
if(l2==1||l2==52||l2==53||l2==54||l2==55||l2==56)
{glColor3f(0,0,1);
else if(l2==27)
{glColor3f(1,0,0);
glBegin(GL_POINTS);
glVertex2f(b[l2][0],b[l2][1]);
glEnd();
glColor3f(1,0,1);
z=1;
49
LUDO GAME
l2=ra1+l2;
d[1][0]=b[l2][0];
d[1][1]=b[l2][1];
if(ra1==6)
{z1=0;
ply1=0;
ply2=1;
else
ply1=1;
ply2=0;
}
}
if(l2==57)
{l2=0;
50
LUDO GAME
h4=1;
d[1][0]=-0.5;d[1][1]=0.7;
s2++;
break;
case
776:ply1=1;ply2=0;
break;
}
ch1=0;
glColor3f(1,0,1);
arrow();
display2();
void pl1_pl2(void)
{
char *guide="PLAYER 1\n\nPLAYER 2";
void *en=GLUT_BITMAP_TIMES_ROMAN_24;
51
LUDO GAME
float x=-1.4,y=0.7,z=0;
int i;
in_guide=1;
glColor3f(0,1,0);
glRasterPos3f(x,y,z);
for(i=0;guide[i]!='\0';i++)
{
if(guide[i]=='\n')
{glColor3f(1,0,1);
y-=0.08;
glRasterPos3f(x,y,z);
}
glutBitmapCharacter(en,guide[i]);
}
glFlush();
void display1(void)
{z=1,z1=1,dice1=1;
f1=0,f2=0,g1=0,g2=0,k1=0,k2=0,l1=0,l2=0,ply1=1,ply2=0,h1=0,h2=0,h3=0,h4=0,s1=0,s2=0;
p1=0,p2=0,enter=0;
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
52
LUDO GAME
glColor3f(1,1,1);
glLineWidth(2);
glBegin(GL_LINE_LOOP);
glVertex2f(0.9,0.9);
glVertex2f(-0.9,0.9); //Main BOX Outline
glVertex2f(-0.9,-0.9);
glVertex2f(0.9,-0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.9,-0.2); //(-,-) BOX
glVertex2f(-0.9,-0.9);
glVertex2f(-0.2,-0.9);
glColor3f(1,1,1);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,0.2);
glVertex2f(0.9,0.2); //(+,+) BOX
glVertex2f(0.9,0.9);
glVertex2f(0.2,0.9);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(0,0,1);
glVertex2f(0.2,0.2);
53
LUDO GAME
glBegin(GL_QUADS);
glColor3f(0,0,1);
glVertex2f(-0.075,0.2);
glVertex2f(0.075,0.2);
glVertex2f(0.075,0.785); //TOP ARROW
glVertex2f(-0.075,0.785);
glVertex2f(0.2,0.67);
glVertex2f(-0.075,0.67);
glVertex2f(-0.075,0.785);
glVertex2f(0.2,0.785);
glEnd();
glColor3f(1,1,1);
glBegin(GL_QUADS);
glColor3f(1,0,0);
glVertex2f(-0.075,-0.2);
glVertex2f(0.075,-0.2);
54
LUDO GAME
glBegin(GL_LINE_LOOP);
glVertex2f(-0.4,-0.4);
glVertex2f(-0.8,-0.4); //Player coins (-,-) BOX
glVertex2f(-0.8,-0.8);
glVertex2f(-0.4,-0.8);
glEnd();
glFlush();
glBegin(GL_LINE_LOOP);
glVertex2f(-0.45,-0.65);
glVertex2f(-0.55,-0.65);
glVertex2f(-0.55,-0.75);
glVertex2f(-0.45,-0.75);
glEnd();
glFlush();
55
LUDO GAME
glVertex2f(-0.65,-0.45);
glVertex2f(-0.65,-0.55);
glVertex2f(-0.75,-0.55);
glEnd();
glFlush();
glBegin(GL_LINE_LOOP);
glVertex2f(0.4,0.4);
glVertex2f(0.8,0.4); //Player Coins (+,+) BOX
glVertex2f(0.8,0.8);
glVertex2f(0.4,0.8);
glEnd();
glFlush();
glBegin(GL_LINE_LOOP);
glVertex2f(0.45,0.65);
glVertex2f(0.55,0.65);
glVertex2f(0.55,0.75);
glVertex2f(0.45,0.75);
glEnd();
glFlush();
56
LUDO GAME
glVertex2f(0.75,0.55);
glEnd();
glFlush();
glBegin(GL_LINE_STRIP);
glVertex2f(0.15,-0.84); //Bottom direction
glVertex2f(0,-0.84);
glVertex2f(0,-0.6);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0,-0.6);
glVertex2f(-0.04,-0.64);
glVertex2f(0,-0.6);
glVertex2f(0.04,-0.64);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex2f(-0.15,0.84); //Top direction
glVertex2f(0,0.84);
glVertex2f(0,0.6);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0,0.6);
glVertex2f(-0.04,0.64);
57
LUDO GAME
glVertex2f(0,0.6);
glVertex2f(0.04,0.64);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.075,-0.2);
glVertex2f(-0.075,-0.9);
glEnd(); //Bottom part Lines
glBegin(GL_LINES);
glVertex2f(0.075,-0.2);
glVertex2f(0.075,-0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.2,-0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,-0.2);
glVertex2f(0.2,-0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.9,-0.2);
glVertex2f(-0.9,-0.9);
glEnd();
glBegin(GL_LINES);
58
LUDO GAME
glVertex2f(0.9,0.2);
glVertex2f(0.9,0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.075,0.2);
glVertex2f(-0.075,0.9);
glEnd();
//Top part Lines
glBegin(GL_LINES);
glVertex2f(0.075,0.2);
glVertex2f(0.075,0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,0.2);
glVertex2f(-0.2,0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,0.2);
glVertex2f(0.2,0.9);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,-0.075);
glVertex2f(0.9,-0.075);
glEnd(); //Right part Lines
glBegin(GL_LINES);
glVertex2f(0.2,0.075);
glVertex2f(0.9,0.075);
59
LUDO GAME
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,-0.2);
glVertex2f(0.9,-0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,0.2);
glVertex2f(0.9,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.075);
glVertex2f(-0.9,-0.075);
glEnd();
//Left part Lines
glBegin(GL_LINES);
glVertex2f(-0.2,0.075);
glVertex2f(-0.9,0.075);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.9,-0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,0.2);
glVertex2f(-0.9,0.2);
glEnd();
60
LUDO GAME
glBegin(GL_LINES);
glVertex2f(-0.2,-0.784);
glVertex2f(0.2,-0.784);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.67);
glVertex2f(0.2,-0.67);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.552);
glVertex2f(0.2,-0.552);
glEnd(); //Across -Bottom Lines
glBegin(GL_LINES);
glVertex2f(-0.2,-0.436);
glVertex2f(0.2,-0.436);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.32);
glVertex2f(0.2,-0.32);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,-0.2);
glVertex2f(0.2,-0.2);
glEnd();
61
LUDO GAME
glBegin(GL_LINES);
glVertex2f(-0.2,0.784);
glVertex2f(0.2,0.784);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,0.668);
glVertex2f(0.2,0.668);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,0.552);
glVertex2f(0.2,0.552);
glEnd(); //Across -Top Lines
glBegin(GL_LINES);
glVertex2f(-0.2,0.436);
glVertex2f(0.2,0.436);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.2,0.32);
glVertex2f(0.2,0.32);
glEnd();
62
LUDO GAME
glBegin(GL_LINES);
glVertex2f(-0.2,0.2);
glVertex2f(0.2,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.784,-0.2);
glVertex2f(0.784,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.668,-0.2);
glVertex2f(0.668,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.552,-0.2);
glVertex2f(0.552,0.2);
glEnd(); //Across -Right Lines
glBegin(GL_LINES);
glVertex2f(0.436,-0.2);
glVertex2f(0.436,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.32,-0.2);
glVertex2f(0.32,0.2);
glEnd();
63
LUDO GAME
glBegin(GL_LINE_STRIP);
glVertex2f(0.7275,0.14);
glVertex2f(0.84,0.14);
glVertex2f(0.84,-0.1375);
glVertex2f(0.7275,-0.1375);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.7275,-0.1375);
glVertex2f(0.76,-0.1111);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.7275,-0.1375);
glVertex2f(0.76,-0.16);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.2,-0.2);
glVertex2f(0.2,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.784,-0.2);
glVertex2f(-0.784,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.668,-0.2);
glVertex2f(-0.668,0.2);
glEnd();
glBegin(GL_LINES);
64
LUDO GAME
glVertex2f(-0.552,-0.2);
glVertex2f(-0.552,0.2);
glEnd(); //Across -Left Lines
glBegin(GL_LINES);
glVertex2f(-0.436,-0.2);
glVertex2f(-0.436,0.2);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.32,-0.2);
glVertex2f(-0.32,0.2);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex2f(-0.7275,-0.14);
glVertex2f(-0.84,-0.14);
glVertex2f(-0.84,0.1375);
glVertex2f(-0.7275,0.1375);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.7275,0.1375);
glVertex2f(-0.76,0.1111);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.7275,0.1375);
glVertex2f(-0.76,0.16);
glEnd();
glBegin(GL_LINES);
65
LUDO GAME
glVertex2f(-0.2,-0.2);
glVertex2f(-0.2,0.2);
glEnd();
display_inter_guide();
glFlush();
pl1_pl2();
circle();
display2();
}
void arrow()
{
glColor3f(1,1,1);
glBegin(GL_LINE_STRIP);
glVertex2f(0.7275,0.14);
glVertex2f(0.84,0.14);
glVertex2f(0.84,-0.1375);
glVertex2f(0.7275,-0.1375);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.7275,-0.1375);
glVertex2f(0.76,-0.1111);
glEnd();
glBegin(GL_LINES);
glVertex2f(0.7275,-0.1375);
glVertex2f(0.76,-0.16);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex2f(-0.7275,-0.14);
66
LUDO GAME
glVertex2f(-0.84,-0.14);
glVertex2f(-0.84,0.1375);
glVertex2f(-0.7275,0.1375);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.7275,0.1375);
glVertex2f(-0.76,0.1111);
glEnd();
glBegin(GL_LINES);
glVertex2f(-0.7275,0.1375);
glVertex2f(-0.76,0.16);
glEnd();
glFlush();
}
void wait(void)
{
int i,j;
for(i=1;i<1000;i++)
for(j=1;j<9000;j++);
}
int i;
glColor3f(0,0,0);
glRasterPos3f(x,y,z);
67
LUDO GAME
for(i=0;msg[i]!='\0';i++)
glutBitmapCharacter(font,msg[i]);
glFlush();
}
void display_about(void)
{
char *about="This mini-Project is based on a very ancient game LUDO,using
OpenGL.\n\nINSTRUCTIONS :\nInput can be provided either from Mouse or from
Keyboard.\nFor mouse interaction right-click on the screen and select the required
option.\nKeyboard and Mouse Interfaces are explained in Instructions
Section.\n\n\n\n\n\n";
enter=0;
int i;
float x=-1.8,y=0.9,z=0;
if(in_about!=0)
{
in_about=1;
glColor3f(1,0,0);
68
LUDO GAME
glRasterPos3f(x,y,z);
for(i=0;about[i]!='\0';i++)
{
if(about[i]=='\n')
{ y-=0.08;
glRasterPos3f(x,y,z);
}
else
glutBitmapCharacter(font,about[i]);
}
glPopMatrix();
glFlush();
}
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
display_about();
void display_about_game(void)
{
69
LUDO GAME
char *about_game="RULES:\n\n\nAt the start of the game, the player's four pieces are
placed in the start area of their colour.\n\nPlayers take it in turn to throw a single die. A
player must first throw a six to be able to move a piece from the starting area\nonto the
starting square.In each subsequent turn the player moves a piece forward 1 to 6 squares as
indicated by the die.When a\nplayer throws a 6 the player may bring a new piece onto the
starting square, or may choose to move a piece already in play.Any\nthrow of a six results in
another turn.\n\nIf a player cannot make a valid move they must pass the die to the next
player.\n\nIf a player's piece lands on a square containing an opponent's piece, the
opponent's piece is captured and returns to the starting\narea.A piece may not land on a
square that already contains a piece of the same colour(unless playing doubling
rules).\n\nOnce a piece has completed a circuit of the board it moves up the home column
of its own colour. The player must throw the exact\nnumber to advance to the home
square.The winner is the first player to get all four of their pieces onto the home square.";
int i;
float x=-1.8,y=0.9,z=0;
in_about=1;
glPushMatrix();
glLoadIdentity();
glColor3f(1,0,0);
glRasterPos3f(x,y,z);
for(i=0;about_game[i]!='\0';i++)
{
if(about_game[i]=='\n')
{ y-=0.08;
glRasterPos3f(x,y,z);
}
else
glutBitmapCharacter(font,about_game[i]);
}
70
LUDO GAME
glPopMatrix();
glFlush();
void display_inter_guide(void)
{
char *gui="KEYBOARD OPTIONS:\nQ-To Quit.\n\nMOUSE OPTIONS:\nLEFT BUTTON- To
Select the coin,\nClick on the coin of Player to\nROLL DICE & to move.\nRIGHT BUTTON- To
Restart.";
float x=1.1,y=0.4,z=0;
int i;
glColor3f(0.4,0.5,0.3);
glBegin(GL_LINE_LOOP);
glVertex2f(1.08,0.5);
glVertex2f(1.92,0.5);
glVertex2f(1.92,-0.2);
glVertex2f(1.08,-0.2);
glEnd();
in_guide=1;
glColor3f(1,0,0);
glRasterPos3f(x,y,z);
for(i=0;gui[i]!='\0';i++)
{
if(gui[i]=='\n')
{ y-=0.08;
glRasterPos3f(x,y,z);
}
else
71
LUDO GAME
glutBitmapCharacter(font,gui[i]);
}
glFlush();
}
void enter_display2()
{
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(9);
glColor3f(0,0,0);
// glColor3f(0.545,0.6434,0.743);
glBegin(GL_LINES);
glVertex2f(-1.8,0.8);
glVertex2f(-1.8,0.4);
glVertex2f(-1.8,0.4); //L
glVertex2f(-1.6,0.4);
glEnd();
glFlush();
72
LUDO GAME
glBegin(GL_LINES);
glVertex2f(-1.5,0.4);
glVertex2f(-1.5,0.7);
glVertex2f(-1.5,0.4); //U
glVertex2f(-1.3,0.4);
glVertex2f(-1.3,0.4);
glVertex2f(-1.3,0.7);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-1.1,0.38);
glVertex2f(-1.1,0.83);
glVertex2f(-1.125,0.815); //D
glVertex2f(-0.95,0.6);
glVertex2f(-0.95,0.6);
glVertex2f(-1.125,0.4);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-0.93,0.38);
glVertex2f(-0.7,0.7);
glVertex2f(-0.7,0.7); //O
glVertex2f(-0.6,0.38);
glVertex2f(-0.93,0.38);
glVertex2f(-0.6,0.38);
glEnd();
73
LUDO GAME
glFlush();
glBegin(GL_LINES);
glVertex2f(-0.5,0.34);
glVertex2f(-0.5,-0.1);
glVertex2f(-0.5,0.34);
glVertex2f(-0.3,0.2);
glVertex2f(-0.3,0.2);
glVertex2f(-0.5,0.1); //B
glVertex2f(-0.5,0.1);
glVertex2f(-0.3,0.0);
glVertex2f(-0.3,0.0);
glVertex2f(-0.5,-0.1);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-0.2,0.0);
glVertex2f(0.0,0.32);
glVertex2f(0.0,0.32); //O
glVertex2f(0.1,0.0);
glVertex2f(-0.2,0.0);
glVertex2f(0.1,0.0);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0.2,-0.05);
glVertex2f(0.29,0.32);
74
LUDO GAME
glVertex2f(0.29,0.32); //A
glVertex2f(0.4,-0.05);
glVertex2f(0.16,0.1);
glVertex2f(0.34,0.1);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0.5,-0.05);
glVertex2f(0.5,0.32);
glVertex2f(0.5,0.32); //R
glVertex2f(0.7,0.18);
glVertex2f(0.7,0.18);
glVertex2f(0.5,0.1);
glVertex2f(0.5,0.1);
glVertex2f(0.7,-0.05);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0.8,-0.15);
glVertex2f(0.8,0.34); //D
glVertex2f(0.78,0.32);
glVertex2f(0.95,0.1);
glVertex2f(0.95,0.1);
glVertex2f(0.78,-0.12);
glEnd();
glFlush();
75
LUDO GAME
glColor3f(1,1,0);
glRasterPos3f(x,y,z);
for(i=0;about[i]!='\0';i++)
{
if(about[i]=='\n')
{ wait();
y-=0.08;
glRasterPos3f(x,y,z);
}
else if(about[i]=='\t')
{wait();
x-=0.2;
glRasterPos3f(x,y,z);
}
else
{wait();
glutBitmapCharacter(en,about[i]);
}
}
glFlush();
}
void square()
{ glColor3f(1,1,1);
glBegin(GL_QUADS);
{ glVertex2f(-.4,-.7);
glVertex2f(-.4,-.65);
glVertex2f(.4,-.65);
76
LUDO GAME
glVertex2f(.4,-.7);
}
glColor3f(0.545,0.6434,0.743);
glBegin(GL_QUADS);
{ glVertex2f(-.39,-.69);
glVertex2f(-.39,-.66);
glVertex2f(-.34,-.66);
glVertex2f(-.34,-.69);
} glEnd();
glFlush();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(-.34,-.69);
glVertex2f(-.34,-.66);
glVertex2f(-.30,-.66);
glVertex2f(-.30,-.69);
} glEnd();
glFlush();
wait();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(-.30,-.69);
glVertex2f(-.30,-.66);
glVertex2f(-.23,-.66);
glVertex2f(-.23,-.69);
} glEnd();
glFlush();
77
LUDO GAME
wait();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(-.23,-.69);
glVertex2f(-.23,-.66);
glVertex2f(-.1,-.66);
glVertex2f(-.1,-.69);
} glEnd();
glFlush();
wait();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(-.1,-.69);
glVertex2f(-.1,-.66);
glVertex2f(0.1,-.66);
glVertex2f(0.1,-.69);
} glEnd();
glFlush();
wait();
wait();
wait();
wait();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(0.1,-.69);
glVertex2f(0.1,-.66);
78
LUDO GAME
glVertex2f(0.15,-.66);
glVertex2f(0.15,-.69);
} glEnd();
glFlush();
wait();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(0.15,-.69);
glVertex2f(0.15,-.66);
glVertex2f(0.2,-.66);
glVertex2f(0.2,-.69);
} glEnd();
glFlush();
wait();
wait();
glBegin(GL_QUADS);
{ glVertex2f(0.2,-.69);
glVertex2f(0.2,-.66);
glVertex2f(0.39,-.66);
glVertex2f(0.39,-.69);
} glEnd();
glFlush();
wait();
wait();
wait();
wait();
enter_display2();
79
LUDO GAME
void display_enter1(void)
{
char *about="please wait...\n";
void *en=GLUT_BITMAP_TIMES_ROMAN_24;
float x=-0.16,y=-0.8,z=0;
int i;
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(9);
glColor3f(0,0,0);
// glColor3f(0.545,0.6434,0.743);
glBegin(GL_LINES);
glVertex2f(-1.8,0.8);
glVertex2f(-1.8,0.4);
glVertex2f(-1.8,0.4); //L
glVertex2f(-1.6,0.4);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-1.5,0.4);
glVertex2f(-1.5,0.7);
glVertex2f(-1.5,0.4); //U
glVertex2f(-1.3,0.4);
glVertex2f(-1.3,0.4);
glVertex2f(-1.3,0.7);
80
LUDO GAME
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-1.1,0.38);
glVertex2f(-1.1,0.83);
glVertex2f(-1.125,0.815); //D
glVertex2f(-0.95,0.6);
glVertex2f(-0.95,0.6);
glVertex2f(-1.125,0.4);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-0.93,0.38);
glVertex2f(-0.7,0.7);
glVertex2f(-0.7,0.7); //O
glVertex2f(-0.6,0.38);
glVertex2f(-0.93,0.38);
glVertex2f(-0.6,0.38);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-0.5,0.34);
glVertex2f(-0.5,-0.1);
glVertex2f(-0.5,0.34);
glVertex2f(-0.3,0.2);
glVertex2f(-0.3,0.2);
81
LUDO GAME
glVertex2f(-0.5,0.1); //B
glVertex2f(-0.5,0.1);
glVertex2f(-0.3,0.0);
glVertex2f(-0.3,0.0);
glVertex2f(-0.5,-0.1);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(-0.2,0.0);
glVertex2f(0.0,0.32);
glVertex2f(0.0,0.32); //O
glVertex2f(0.1,0.0);
glVertex2f(-0.2,0.0);
glVertex2f(0.1,0.0);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0.2,-0.05);
glVertex2f(0.29,0.32);
glVertex2f(0.29,0.32); //A
glVertex2f(0.4,-0.05);
glVertex2f(0.16,0.1);
glVertex2f(0.34,0.1);
glEnd();
glFlush();
glBegin(GL_LINES);
82
LUDO GAME
glVertex2f(0.5,-0.05);
glVertex2f(0.5,0.32);
glVertex2f(0.5,0.32); //R
glVertex2f(0.7,0.18);
glVertex2f(0.7,0.18);
glVertex2f(0.5,0.1);
glVertex2f(0.5,0.1);
glVertex2f(0.7,-0.05);
glEnd();
glFlush();
glBegin(GL_LINES);
glVertex2f(0.8,-0.15);
glVertex2f(0.8,0.34);
glVertex2f(0.78,0.32); //D
glVertex2f(0.95,0.1);
glVertex2f(0.95,0.1);
glVertex2f(0.78,-0.12);
glEnd();
glFlush();
glRasterPos3f(x,y,z);
for(i=0;about[i]!='\0';i++)
{
if(about[i]=='\n')
{ wait();
y-=0.08;
83
LUDO GAME
glRasterPos3f(x,y,z);
}
else if(about[i]=='\t')
{wait();
x-=0.2;
glRasterPos3f(x,y,z);
}
else
{wait();
glutBitmapCharacter(en,about[i]);
}
}
square();
case 1:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
in_about=1;
display_about();
break;
case 2:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
display_about_game();
84
LUDO GAME
break;
case 4:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor(0.6,0.7,0,0);
display_enter1();
break;
case 5:
exit(0);
}
}
85
LUDO GAME
glutDisplayFunc(display);
font=GLUT_BITMAP_9_BY_15;//GLUT_BITMAP_HELVETICA_12;
glutMainLoop();
return 0;
}
RESULT:
Starting page:
This is the starting page to run the game which gives us basic information about
how to run the games using Keyboard and mouse.
On right click:
On right click of the mouse these options are shown.
86
LUDO GAME
Rules:
After right clicking we get one option which is called “Rules of the game” after clicking
that we can see the rules of the game by which it is played.
87
LUDO GAME
Game Board:
On pressing “Enter” on the loading page we land on game page where we can play
the game by following the instructions given beside.
Game in progress:
here we can see the game is in process.
88
LUDO GAME
CONCLUSION
•The LUDO game has been improvised with graphical approach.
FUTURE SCOPE
•Even though demo designed is enriched with many options, it is a
two dimensional demo, in future it can be re designed with 3D
animation and sound effects.
• By using this demo further for four coins & four players can be
implemented.
References:
Interactive Computer Graphics A Top-Down Approach with OpenGL – Edward
Angel, 5th edition, Addison-Wesley, 2008
Computer Graphics using OpenGL- F.S.Hill,Jr. 2nd edition, Pearson education, 2001
Graphics Under C – Yashawant Kanetkar, BPB publications, 2008.
en.wikipedia.org/ludo_board_game.html
89