CG Ludo Game

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 89

VISVESHVARAYA TECHNOLOGICAL University, BELAGAVI

A Mini Project Report on

“LUDO GAME”

Submitted in partial fulfilment of the requirements for the 6th semester CG lab

BACHELOR OF ENGINEERING IN COMPUTER SCIENCE AND ENGINEERING

By
BIBEK KUMAR SAH
(1SP19CS016)
&
PRASHANT KUMAR
(1SP19CS075)
Under the guidance
Of

Mrs. Saswati Behera


Assistant Professor
Dept. of CSE

Department of Computer Science and Engineering

S.E.A. COLLEGE OF ENGINEERING AND TECHNOLOGY

BENGALURU-560049

2021-2022

1
LUDO GAME

S.E.A. COLLEGE OF ENGINEERING AND TECHNOLOGY


EktaNagar, Basavanpura, Virgonagar Post, K.R. Puram, Bengaluru, Karnataka 560049

DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING

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.

Signature of Co-ordinator Signature of HOD


Assistant Prof Mrs Saswati Behera Dr.B.Loganayagi
Dept.of CSE, SEACET Prof & HOD

Signature of Internal Examiner Signature of External Examiner

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 like to express my heartfelt gratitude to our respected Principal Dr. B


VENTKATA NARAYAN for extending his support.

We would also like to express my heartfelt gratitude to Mrs. B LOGANAYAGI, HOD,


Computer Science and Engineering whose guidance and support was truly invaluable.

We am very grateful to my guide, Mrs. SASWATI BEHERA, Department of Computer


Science, for his able guidance and valuable advice at every stage of my project which helped
me in the successful completion of my project.

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.

BIBEK KUMAR SAH

PRASHANT KUMAR

(1SP19CS075)

(1SP19CS016)

3
LUDO GAME

ABSTRACT

Ludo (from Latin ludo, "I play") is a simple board game, for two to four


players, in which the players race their four coins from start to finish according
to dice rolls. Ludo is a strategy board game for two to four players, in which the
players race their four tokens from start to finish according to the rolls of a
single die. Like other cross and circle games, Ludo is derived from the Indian
game Pachisi. Digital games have become a ubiquitous part of our society. In
many countries, game development is a substantial and important industry.
Academic institutions provide programmes aimed at preparing students for
careers in game development. Over the past 20 years, there has been great
interest in game research. However, very few studies address game
development. Instead, most studies have focused on: serious applications of
games; analysis of games and players or, social aspects of playing

4
LUDO GAME

INDEX

Chapters Topic Page NO.


1 INTRODUCTION 6
Objectives

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

OpenGL is designed to be independent of the windowing system or operating


system. GLUT is needed to interact with the Operating System (such as creating
a window, handling key and mouse inputs); it also provides more building
models (such as sphere and torus). GLUT commands start with a prefix of
"glut" (e.g., glutCreatewindow, glutMouseFunc). GLUT is platform
independent, which is built on top of platform-specific OpenGL extension such
as GLX for X Window System, WGL for Microsoft Window, and AGL, CGL or
Cocoa for Mac OS.
GLEW stands for OpenGL Extension Wrangler Library (GLEW), which
is a cross-platform open-source C/C++ extension loading library. GLEW
is a very important library for OpenGL as it provides efficient run-time
mechanisms for determining which OpenGL extensions are supported
on a specific platform.
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.

⮚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:

2.2 Software Requirements


● Operating System: Windows 11
● IDE: CodeBlock
● Tool: OpenGL
● Language: C++
2.3 Hardware Requirement
● Processor: basic processor or Pentium
● Processor Speed: 1.4GHz
● RAM: 2GB
● Storage speed: 20GB
● Mouse: Standard
● Keyboard: Standard

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();
}

void player1(int ch);

void player2(int ch1);

void call(int w);

void myMouse(int btn,int state,int x,int y)


{
int C[10][10];
GLint rand();
int D[10][10];

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)
{

char *about="\t\t\tCONGRATULATIONS !\n\n\nPLAYER 2 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();

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

void player1(int ch)


{
GLint rand();

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;

else if( ( (ra1+k1>57)||(ra1+k1>51&&p1==0))&&((ra1+k2>57)||(ra1+k2>51&&p1==0)))


{

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();

void player2(int ch1)


{

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

glVertex2f(-0.2,0.2); //Top part Home


glVertex2f(0,0);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);
glVertex2f(-0.2,-0.2);
glVertex2f(0.2,-0.2); //Bottom part Home
glVertex2f(0,0);
glEnd();
glColor3f(1,1,1);

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

glVertex2f(0.075,-0.785); //BOTTOM 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_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();

//Player coins keeping (-,-) BOX


glBegin(GL_LINE_LOOP);
glVertex2f(-0.75,-0.45);

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();

//Player coins keeping (+,+) BOX


glBegin(GL_LINE_LOOP);
glVertex2f(0.75,0.45);
glVertex2f(0.65,0.45);
glVertex2f(0.65,0.55);

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++);
}

void display_msg(float x,float y,float z ,char *msg)


{

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()
{

char *about="PRESS ENTER\n";


void *en=GLUT_BITMAP_TIMES_ROMAN_24;
float x=0.8,y=-0.8,z=0;
int i;
enter=1;

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();

void options(int id)


{
switch(id)
{

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);
}
}

int main(int argc, char **argv)


{
glutInit(&argc, argv);
enter=1;
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
init();
glutCreateMenu(options);
glutAddMenuEntry("About the Project",1);
glutAddMenuEntry("Rules of the Game",2);
glutAddMenuEntry("Game Mode or Restart",4);
glutAddMenuEntry("Quit",5);
glutMouseFunc(myMouse);
glutKeyboardFunc(key);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutReshapeFunc(myReshape);

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.

Game Loading page:


On the right click we get option called the “Game mode or Restart” which leads us to
the loading page of the game.

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.

•The demo is made more iterative with a mouse interaction module in


the program .

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

You might also like