Vous êtes sur la page 1sur 25

Ludo Game

#include<iostream.h>
#include<graphics.h>
#include<conio.h>
#include<dos.h>
#include<math.h>
#include<stdlib.h>
/* MOUSE FUNCTIONS FOR LUDO GAME */
int DetectMouse(void);
void InitMouse(void);
void ShowMouse(void);
void HideMouse(void);
void WhereMouse(int*,int*);
int ButtClicked(void);
int ButtReleased(void);
int DetectMouse(void){
union REGS in,out;
in.x.ax=0;
int86(033,&in,&out);
if(out.x.ax==0)
return(0);
else
return(1);
}
void InitMouse(void)
{
union REGS in,out;
in.x.ax=33;
int86(033,&in,&out);
return;
}
void HideMouse(void)
{
union REGS in,out;
in.x.ax=2;
int86(033,&in,&out);
return;
}
void ShowMouse(void)
{
union REGS in,out;
in.x.ax=1;
int86(033,&in,&out);
return;
}
void WhereMouse(int *x,int *y)
{
union REGS in,out;
in.x.ax=3;
int86(033,&in,&out);
*x=(int)out.x.cx;
*y=(int)out.x.dx;
return;
}

int ButtClicked(void){
union REGS imouse,omouse;
int mc,mr;
imouse.x.ax = 3;
int86(033,&imouse,&omouse);
mc=omouse.x.bx;
return(mc);
}
int ButtReleased(void){
int br;
br=ButtClicked();
do{}while(ButtClicked()!=0);
return br;
}
/* GLOBAL VARIABLES */
int background=0;
int colorfortext=WHITE;//color used to display text
int rec=MAGENTA;//color for border of rectangles
int flagturn;//players turn=0 computer=1
int for6=0;//for 6 to come at regular intervals
int dice_value_color[4];
/* USER DEFINED FUNCTIONS */
void draw_all(void);
int player_chooses_house_color(void);
void draw_house(int color_of_house,int top_left_x_coordinate,int
top_left_y_coordinate);
void draw_button_with_button_name(int top_left_x_coordinate,int
top_left_y_coordinate,char* button_name);
void show_mouse_click_on_button(int mouse_click_x_coordinate,int
mouse_click_y_coordinate);
int check_if_mouse_click_is_on_any_button (int
mouse_click_x_coordinate,int mouse_click_y_coordinate);
void throw1(int x_coordinate_for_dice ,int y_coordinate_for_dice,int
counter_for_wait_at_last ,char dice_value);
void throw2(int x_coordinate_for_dice ,int y_coordinate_for_dice,char
dice_value);
int throwdice(void);
void messageout(char *message,int refresh_message=1);
void messageclear(void);
void initialise_house_with_ludos(int color_of_house);
void load_path_information_in_ludos(int ludo_house_color);
int check_if_ludo_move_requested_is_valid(int dice_value);
void move_ludo_to_new_position( int dice_value);
void winner(void);
void about(void);
void howtoplay(void);
class ludo{
private:
int x[45];
int y[45];
int pos;
int color;
public:
friend void redrawing(int );

friend
friend
friend
friend

int
int
int
int

catchclickonludobutton(void) ;
forcomputer1(int);
forcomputer2(int);
forcomputer3(int);

/* ludo1 initialises the ludo class objects */


void ludo1(int col,int *ax,int *ay)
{
int i;
for(i=0;i<=44;i++)
{
x[i]=*(ax);
y[i]=*(ay);
ax++;ay++;
}
color=col;
pos=0;
}//end of ludo1
int check_if_ludo_move_requested_is_valid(int dice)
{
/*return 1 move valid i.e proceed to movetopos,0 if not valid
2 if player cannot move any ludo*/
int i,j=0;
if( (pos<=44-dice && pos!=0) || (pos==0 && dice==6) )
return(1); // ludo can move
for(i=0;i<=3;i++)
{
if( (lp[i].pos+dice<=44 && lp[i].pos!=0) || (lp[i].pos==0 &&
dice==6) )
j=1;//i.e there is atleast one ludo which
//can move with current dice value
}
if(j>0)
return(2);//choose the correct ludo that can move
else
return(3);//no ludo can move at current dice value
//and player has to skip chance
}//end of check_if_ludo_move_requested_is_valid
void move_ludo_to_new_position( int dice )
{
HideMouse();
if(pos==0 && dice==6)//taking out of house on dice givig 6
{ messageclear();dice=1;}
dice=dice-1;
int opos;
opos=pos;
int i;
for(i=opos;i<=dice+opos;i++)
{
setcolor(7);
circle(x[i],y[i],8);
setfillstyle(1,7);
floodfill(x[i],y[i],7);

delay(50);
{pos++; redrawing(this->color);}
setcolor(color);
circle(x[i+1],y[i+1],8);
setfillstyle(1,color);
floodfill(x[i+1],y[i+1],color);
delay(50);
}
/*changing pos to 0 if ludo has been cut before redrawing all ludos*/
for(i=0;i<=3;i++)
{
if(this->x[this->pos]==lp[i].x[lp[i].pos] &&
this->y[this->pos]==lp[i].y[lp[i].pos] )
{
if(this->color!=lp[i].color)
lp[i].pos=0;
}
if(this->x[this->pos]==lc1[i].x[lc1[i].pos] &&
this->y[this->pos]==lc1[i].y[lc1[i].pos] )
{
if(this->color!=lc1[i].color)
lc1[i].pos=0;
}
if(this->x[this->pos]==lc2[i].x[lc2[i].pos] &&
this->y[this->pos]==lc2[i].y[lc2[i].pos] )
{
if(this->color!=lc2[i].color)
lc2[i].pos=0;
}
if(this->x[this->pos]==lc3[i].x[lc3[i].pos] &&
this->y[this->pos]==lc3[i].y[lc3[i].pos] )
{
if(this->color!=lc3[i].color)
lc3[i].pos=0;
}
}// end of for
/* redrawing new positions of all ludos */
redrawing(lp[0].color);
redrawing(lc1[0].color);
redrawing(lc2[0].color);
redrawing(lc3[0].color);
/* to check who is the winner */
static int number_of_player_ludo_home=0;
static int number_of_computer1_ludo_home=0;
static int number_of_computer2_ludo_home=0;
static int number_of_computer3_ludo_home=0;
if(pos==44 && flagturn==0)
number_of_player_ludo_home++;
if(pos==44 && flagturn==1)
number_of_computer1_ludo_home++;
if(pos==44 && flagturn==2)
number_of_computer2_ludo_home++;
if(pos==44 && flagturn==3)
number_of_computer3_ludo_home++;
if(number_of_player_ludo_home==4)
winner();

if(number_of_computer1_ludo_home==4)
winner();
if(number_of_computer2_ludo_home==4)
winner();
if(number_of_computer3_ludo_home==4)
winner();
ShowMouse();
} //end of move_ludo_to_new_position
};//end of ludo class
ludo lp[4],lc1[4],lc2[4],lc3[4];
void main()
{
int colors[4]={RED,BLUE,YELLOW,GREEN};
int i,a,b,dice=0,playercolor;;
draw_all();
InitMouse();
ShowMouse();
playercolor=player_chooses_house_color();
flagturn=0;
dice_value_color[flagturn]=playercolor;
load_path_information_in_ludos(playercolor);//gives life to correct
color
ludo as path depends on color
/* this code helps in making the chance of throwing dice go in a
clockwise
mode what color may the player choose to play*/
i=3;
while(i)
{
if(colors[i]==playercolor)
break;
i ;
}
int loop=i;
while(1)
{
flagturn++;
loop++;
if(loop>=4)
loop=0;
load_path_information_in_ludos(colors[loop]);
dice_value_color[flagturn]=colors[loop];
if(flagturn==3)
break;
}
initialise_house_with_ludos(RED);
initialise_house_with_ludos(BLUE);
initialise_house_with_ludos(YELLOW);
initialise_house_with_ludos(GREEN);
flagturn=0;
char ch;

int check,tmp1=0,tmp2;
enum choose {yes,nomore};
choose choose1=yes;
delay(500);
messageclear();
while(ch!=27)
{
if(kbhit())
ch=getch();
setcolor(RED);
WhereMouse(&a,&b);
if(ButtReleased())
{
check=check_if_mouse_click_is_on_any_button (a,b);
if(check>=1 && check<=4)
show_mouse_click_on_button(a,b);
switch(check)
{
case 1:
{about();break;}
case 4:
{howtoplay(); break;}
case 3:
{exit(0);break;}
case 2:
{dice=throwdice(); break;}
} //end of switch
} //end of if(ButtRelease)
/* players chance*/
if(flagturn==0)
{
messageout( PLAYER throwdice.best of luck. ,0);
if(dice!=0)
{
if(dice==6)
messageout( click on ludo button to take out of house or move );
else
messageout( click on the ludo button to move );
while(choose1==yes)
{
choose1=nomore;
tmp1=catchclickonludobutton();
tmp2=lp[tmp1].check_if_ludo_move_requested_is_valid(dice);
switch(tmp2)
{
case 1:
{
lp[tmp1].move_ludo_to_new_position(dice);
messageout( proceeding );
delay(1000);
break;
}
case 2:
{

messageout( choose correct ludo to proceed );


delay(1000);
choose1=yes;
break;
}
case 3:
{
messageout( sorry,you will have to skip this time );
delay(1000);
break;
}
}//switch ends
}//end of while(choose1=yes)
flagturn=1;
choose1=yes;
}//end of if(dice!=0)
dice=0;
}// end of if(flagturn==0)
/*computer1 chance*/
if(flagturn==1)
{
messageout( now the computer1 will throw dice );
dice=throwdice();
if(dice!=0)
{
tmp1=forcomputer1(dice);
if(tmp1!=5)//forcomputer(dice) returns 5 if no ludo can move
lc1[tmp1].move_ludo_to_new_position(dice);
else
messageout( computer1 has to skip this time. );
}
flagturn=2;
messageclear();
dice=0;
}
/*computer2 chance*/
if(flagturn==2)
{
messageout( now the computer2 will throw dice );
dice=throwdice();
if(dice!=0)
{
tmp1=forcomputer2(dice);
if(tmp1!=5)//forcomputer(dice) returns 5 if no ludo can move
lc2[tmp1].move_ludo_to_new_position(dice);
else
messageout( computer2 has to skip this time. );
}
flagturn=3;
messageclear();
dice=0;
}
/*computer3 chance*/
if(flagturn==3)
{
messageout( now the computer3 will throw dice );
dice=throwdice();

if(dice!=0)
{
tmp1=forcomputer3(dice);
if(tmp1!=5)//forcomputer(dice) returns 5 if no ludo can move
lc3[tmp1].move_ludo_to_new_position(dice);
else
messageout( computer3 has to skip this time. );
}
flagturn=0;
messageclear();
dice=0;
}
dice=0;
}//end of while
}//end of main
void draw_house(int col,int x,int y)
{
setcolor(rec);
rectangle(x,y,x+120,y+120);
setfillstyle(1,col);
floodfill(x+10,y+10,rec);
circle(x+30,y+30,10);
setfillstyle(1,WHITE);
floodfill(x+30,y+30,rec);
circle(x+30,y+70,10);
setfillstyle(1,WHITE);
floodfill(x+30,y+70,rec);
circle(x+90,y+30,10);
setfillstyle(1,WHITE);
floodfill(x+90,y+30,rec);
circle(x+90,y+70,10);
setfillstyle(1,WHITE);
floodfill(x+90,y+70,rec);
}
void draw_button_with_button_name(int x,int y,char *message)
{
setcolor(rec);
rectangle(x,y,x+110,y+30);
setcolor(colorfortext);
outtextxy(x+20,y+15,message);
}
void show_mouse_click_on_button(int x,int y)
{
HideMouse();
setfillstyle(1,7);
floodfill(x,y,rec);
delay(50);
setfillstyle(1,0);
floodfill(x,y,rec);
draw_button_with_button_name(0,55, about );
draw_button_with_button_name(120,55, exit );
draw_button_with_button_name(0,55+35, throw dice );
draw_button_with_button_name(120,55+35, how to play );
ShowMouse();
}

int check_if_mouse_click_is_on_any_button (int a,int b)


{
if(a>0 && a<110 && b>55 && b<85)
return 1;
else if(a>0 && a<110 && b>90 && b<120)
return 2;
else if(a>120 && a< 230 && b>55 && b<85)
return 3;
else if(a>120 && a< 230 && b>90 && b<120)
return 4;
else if(a>239 && a<359 && b>0 && b<120 )
return 5;
else if(a>239 && a<359 && b>280 && b<400 )
return 6;
else if(a>519 && a<639 && b>0 && b<120 )
return 7;
else if(a>519 && a<659 && b>280 && b<400 )
return 8;
else
return 0;
}
int throwdice()
{
HideMouse();
int rn,count=0;char num;
int x=0,y,flag=0;
randomize();
for(y=150;y<=320;y=y+10,x=x+10)
{
rn=random(6)+1;
/* using for6 to get a 6 on dice every 5th time to make the game a
little faster*/
if(y==320)
{for6++;}
if(for6>=5)
{
rn=6;
for6=0;
}
// cout<<for6;
//if(y==320)
// for6++;
num=rn+48;
if(flag==0)
{
throw2(x,y,num);
flag=1;
}
else
{
count++;
throw1(x,y,count,num);
flag=0;
}
}

settextstyle(0,0,0);
ShowMouse();
return rn;
}
void throw1(int x,int y,int count,char num)
{
settextstyle(0,0,3);
setcolor(WHITE);
rectangle(x,y,x+35,y+35);
//setcolor(RED);
setcolor(dice_value_color[flagturn]);
outtextxy(x+5,y+5,&num);
delay(140);
if(count==9)
{delay(650); }
setcolor(0);
rectangle(x,y,x+35,y+35);
outtextxy(x+5,y+5,&num);
}
void throw2(int x,int y,char num)
{
x=x-17;y=y+10;
settextstyle(0,0,3);
setcolor(WHITE);
line(x,y,x+25,y+25);
line(x,y,x+25,y-25);
line(x+25,y+25,x+50,y);
line(x+25,y-25,x+50,y);
//setcolor(RED);
setcolor(dice_value_color[flagturn]);
outtextxy(x+15,y-10,&num);
delay(140);
setcolor(0);
line(x,y,x+25,y+25);
line(x,y,x+25,y-25);
line(x+25,y+25,x+50,y);
line(x+25,y-25,x+50,y);
outtextxy(x+15,y-10,&num);
}
void messageout(char *message,int refresh)
{
if(refresh)
messageclear();
setcolor(colorfortext);
outtextxy(20,450,message);
}
void messageclear()
{
HideMouse();
setfillstyle(1,0);
floodfill(20,450,rec);
ShowMouse();
}
void initialise_house_with_ludos(int color)
{

int x,y;
switch(color)
{
case RED:
{x=239;y=0;break;}
case BLUE:
{x=519;y=0;break;}
case YELLOW:
{x=639-120;y=280;break;}
case GREEN:
{x=239;y=280;break;}
}
draw_house(color,x,y);
setcolor(rec);
setfillstyle(1,color);
{
circle(x+30,y+30,8);
floodfill(x+30,y+30,rec);
}
{
circle(x+30,y+70,8);
floodfill(x+30,y+70,rec);
}
{
circle(x+90,y+30,8);
floodfill(x+90,y+30,rec);
}
{
circle(x+90,y+70,8);
floodfill(x+90,y+70,rec);
}
}
void load_path_information_in_ludos(int plcol)
{
int arx[45],ary[45];
switch(plcol)
{
case RED:
{ int
arx[45]={269,284,314,344,379,379,379,379,379,439,499,499,499,
499,499,534,564,594,624,624,624,594,564,534,499,
499,499,499,499,439,384,384,384,384,384,344,314,284,
254,254,284,314,344,384,424};
int
ary[45]={30,140,140,140,140,105,75,45,15,15,15,45,75,105,140,140,
140,140,140,200,260,260,260,260,260,295,325,355,385,385,
385,355,325,295,260,260,260,260,260,200,200,200,200,200,
200};
for(int tmp=0;tmp<=3;tmp++)
{
switch(tmp)
{
case 0: {arx[0]=269;ary[0]=30;break;}
case 1: {arx[0]=329;ary[0]=70;break;}

case 2: {arx[0]=329;ary[0]=30;break;}
case 3: {arx[0]=269;ary[0]=70;break;}
}
switch(flagturn)
{
case 0:
{lp[tmp].ludo1(RED,arx,ary);break;}
case 1:
{lc1[tmp].ludo1(RED,arx,ary);break;}
case 2:
{lc2[tmp].ludo1(RED,arx,ary);break;}
case 3:
{lc3[tmp].ludo1(RED,arx,ary);break;}
}
}
break;}//case RED ends
case BLUE:
{ int
arx[45]={549,499,499,499,499,534,564,594,624,624,624,594,564,
534,499,499,499,499,499,439,384,384,384,384,384,344,
314,284,254,254,254,284,314,344,379,379,379,379,379,
439,439,439,439,439,439 };
int ary[45]={30,45,75,105,140,140,140,140,140,200,260,260,260,260,
260,295,325,355,385,385,385,355,325,295,260,260,260,
260,260,200,140,140,140,140,140,105,75,45,15,15,45
,75,105,140,185};
for(int tmp=0;tmp<=3;tmp++)
{
switch(tmp)
{
case 0: {arx[0]=549;ary[0]=30;break;}
case 1: {arx[0]=549;ary[0]=70;break;}
case 2: {arx[0]=609;ary[0]=30;break;}
case 3: {arx[0]=609;ary[0]=70;break;}
}
switch(flagturn)
{
case 0:
{lp[tmp].ludo1(BLUE,arx,ary);break;}
case 1:
{lc1[tmp].ludo1(BLUE,arx,ary);break;}
case 2:
{lc2[tmp].ludo1(BLUE,arx,ary);break;}
case 3:
{lc3[tmp].ludo1(BLUE,arx,ary);break;}
}
}
break;}
case GREEN:
{ int
arx[45]={269,384,384,384,384,344,314,284,254,254,254,284,314,
344,379,379,379,379,379,439,499,499,499,499,499,534,
564,594,624,624,624,594,564,534,499,499,499,499,499,
439,439,439,439,439,439 };
int ary[45]={30,355,325,295,260,260,260,
260,260,200,140,140,140,140,140,105,75,45,15,15,15,45

,75,105,140,140,140,140,140,200,260,260,260,260,
260,295,325,355,385,385,355,325,295,260,215};
for(int tmp=0;tmp<=3;tmp++)
{
switch(tmp)
{
case 0: {arx[0]=269;ary[0]=310;break;}
case 1: {arx[0]=329;ary[0]=350;break;}
case 2: {arx[0]=329;ary[0]=310;break;}
case 3: {arx[0]=269;ary[0]=350;break;}
}
switch(flagturn)
{
case 0:
{lp[tmp].ludo1(GREEN,arx,ary);break;}
case 1:
{lc1[tmp].ludo1(GREEN,arx,ary);break;}
case 2:
{lc2[tmp].ludo1(GREEN,arx,ary);break;}
case 3:
{lc3[tmp].ludo1(GREEN,arx,ary);break;}
}
}
break;}
case YELLOW:
{ int
arx[45]={549,594,564,534,499,499,499,499,499,439,384,384,384,
384,384,344,314,284,254,254,254,284,314,344,379,379,
379,379,379,439,499,499,499,499,499,534,564,594,624,
624,594,564,534,499,454};
int
ary[45]={310,260,260,260,260,295,325,355,385,385,385,355,325,295,
260,260,260,260,260,200,140,140,140,140,140,105,75,45,15,
15,15,45,75,105,140,140,140,140,140,200,200,200,200,200,200};
for(int tmp=0;tmp<=3;tmp++)
{
switch(tmp)
{
case 0: {arx[0]=549;ary[0]=310;break;}
case 1: {arx[0]=549;ary[0]=350;break;}
case 2: {arx[0]=609;ary[0]=310;break;}
case 3: {arx[0]=609;ary[0]=350;break;}
}
switch(flagturn)
{
case 0:
{lp[tmp].ludo1(YELLOW,arx,ary);break;}
case 1:
{lc1[tmp].ludo1(YELLOW,arx,ary);break;}
case 2:
{lc2[tmp].ludo1(YELLOW,arx,ary);break;}
case 3:
{lc3[tmp].ludo1(YELLOW,arx,ary);break;}
}
}
break;}

}//switch ends
}
int catchclickonludobutton()
{
int a,b,i;
while(1)
{
WhereMouse(&a,&b);
if(ButtReleased())
{ for(i=0;i<=3;i++)
{
if( abs(a-(lp[i].x[lp[i].pos])) < 8 &&
abs(b-(lp[i].y[lp[i].pos])) <
8 )
return i;
}
}
}
}
void redrawing(int tmp)
{
int i;
for(i=0;i<=3;i++)
{
if(tmp==lp[0].color)
{
setcolor(lp[i].color);
circle(lp[i].x[lp[i].pos],lp[i].y[lp[i].pos],8);
setfillstyle(1,lp[i].color);
floodfill(lp[i].x[lp[i].pos],lp[i].y[lp[i].pos],lp[i].color);
}
if(tmp==lc1[0].color)
{
setcolor(lc1[i].color);
circle(lc1[i].x[lc1[i].pos],lc1[i].y[lc1[i].pos],8);
setfillstyle(1,lc1[i].color);
floodfill(lc1[i].x[lc1[i].pos],lc1[i].y[lc1[i].pos],lc1[i].color);
}
if(tmp==lc2[0].color)
{
setcolor(lc2[i].color);
circle(lc2[i].x[lc2[i].pos],lc2[i].y[lc2[i].pos],8);
setfillstyle(1,lc2[i].color);
floodfill(lc2[i].x[lc2[i].pos],lc2[i].y[lc2[i].pos],lc2[i].color);
}
if(tmp==lc3[0].color)
{
setcolor(lc3[i].color);
circle(lc3[i].x[lc3[i].pos],lc3[i].y[lc3[i].pos],8);
setfillstyle(1,lc3[i].color);
floodfill(lc3[i].x[lc3[i].pos],lc3[i].y[lc3[i].pos],lc3[i].color);
}
}//for ends
}

/* deciding for computer1 which ludo to move */


int forcomputer1(int dice)
{
int i,j,tmp,poslpforlc[12]={0,0,0,0,0,0,0,0,0,0,0,0},cannotmove=5;
/* checking if atleast one ludo can move at current dice value*/
for(i=0;i<=3;i++)
{
if( (lc1[i].pos<=44-dice && lc1[i].pos!=0) || (lc1[i].pos==0 &&
dice==6) )
cannotmove=0;//cannotmove=5 then no ludo can move
}
if(cannotmove==5)
return 5;
//position of players ludo in terms of computers1 ludo positions
for(i=0;i<=3;i++)
{
for(j=1;j<=40;j++)
{
if( lc1[0].x[j]==lp[i].x[lp[i].pos] &&
lc1[0].y[j]==lp[i].y[lp[i].pos])
{
poslpforlc[i]=j;
}
}
}
//position of computer2 ludo in terms of computer1 ludo positions
for(i=4;i<=7;i++)
{
for(j=1;j<=40;j++)
{
if( lc1[0].x[j]==lc2[i-4].x[lc2[i-4].pos] &&
lc1[0].y[j]==lc2[i-4].y[lc2[i-4].pos])
{
poslpforlc[i]=j;
}
}
}
//position of computer3 ludo in terms of computer1 ludo positions
for(i=8;i<=11;i++)
{
for(j=1;j<=40;j++)
{
if( lc1[0].x[j]==lc3[i-8].x[lc3[i-8].pos] &&
lc1[0].y[j]==lc3[i-8].y[lc3[i-8].pos])
{
poslpforlc[i]=j;
}
}
}//end of i
/*to cut opponents ludo button*/
for(i=0;i<=3;i++)
{
for(j=0;j<=11;j++)
{
lc1[i].pos) && lc1[i].pos!=0)
if( dice==(poslpforlc[j]

return i;
}
}
/* to move those ludos which are near the player ludos and have the
gretest value of pos i.e position . it means saving the threatened
ludo*/
int array[4]={0,0,0,0};
int a1=0,tmp1;
for(i=0;i<=3;i++)
{
for(j=0;j<=11;j++)
{
if(
(-poslpforlc[j] + lc1[i].pos)<=6
&& (-poslpforlc[j] + lc1[i].pos)>=1
&& lc1[i].pos+dice<=44
&& poslpforlc[j]!=0
&& lc1[i].pos<=40 )
{array[i]=lc1[i].pos;}
}
if(a1<=array[i])
a1=array[i];/* a1 has the greatest pos value */
}
if(a1!=0) //to see that at least one ludo is threatened */
{
for(i=0;i<=3;i++) //getting the ludo with greatest pos value
{
if(a1==array[i])
return i;
}
}
//to take out ludo button from house
for(i=0;i<=3;i++)
{
if(dice==6)
{
if(lc1[i].pos==0 )
return i;
}
}
/*if ludo buttons are outside and option for cutting opponent or
taking
out
own ludo button are not valid , using round robin
for selecting ludo to move*/
static int ludolast=0;
int firstround=0;
for(i=0;i<=3;i++)
{
if(firstround==0)
{
if(ludolast!=3)
{i=ludolast+1;}
firstround++;
}
if(lc1[i].pos!=0 && lc1[i].pos+dice<=44 )
{ludolast=i;i=4;}

if(i==3)
i=-1;
}
return ludolast;
//if ludo button is
}
/* deciding for computer2 which ludo to move */
int forcomputer2(int dice)
{
int i,j,tmp,poslpforlc[12]={0,0,0,0,0,0,0,0,0,0,0,0},cannotmove=5;
/* checking if atleast one ludo can move at current dice value*/
for(i=0;i<=3;i++)
{
if( (lc2[i].pos<=44-dice && lc2[i].pos!=0) || (lc2[i].pos==0 &&
dice==6) )
cannotmove=0;//cannotmove=5 then no ludo can move
}
if(cannotmove==5)
return 5;
//position of players ludo in terms of computers2 ludo positions
for(i=0;i<=3;i++)
{
for(j=1;j<=40;j++)
{
if( lc2[0].x[j]==lp[i].x[lp[i].pos] &&
lc2[0].y[j]==lp[i].y[lp[i].pos])
{
poslpforlc[i]=j;
}
}
}
//position of computer1 ludo in terms of computer2 ludo positions
for(i=4;i<=7;i++)
{
for(j=1;j<=40;j++)
{
if( lc2[0].x[j]==lc1[i-4].x[lc1[i-4].pos] &&
lc2[0].y[j]==lc1[i-4].y[lc1[i-4].pos])
{
poslpforlc[i]=j;
}
}
}
//position of computer3 ludo in terms of computer2 ludo positions
for(i=8;i<=11;i++)
{
for(j=1;j<=40;j++)
{
if( lc2[0].x[j]==lc3[i-8].x[lc3[i-8].pos] &&
lc2[0].y[j]==lc3[i-8].y[lc3[i-8].pos])
{
poslpforlc[i]=j;
}
}

}//end of i
for(i=0;i<=11;i++)
{
}
/*to cut opponents ludo button*/
for(i=0;i<=3;i++)
{
for(j=0;j<=11;j++)
{
if( dice==(poslpforlc[j]
lc2[i].pos) && lc2[i].pos!=0)
{return i;}
}
}
/* to move those ludos which are near the player ludos and have the
gretest value of pos i.e position . it means saving the threatened
ludo*/
int array[4]={0,0,0,0};
int a1=0,tmp1;
for(i=0;i<=3;i++)
{
for(j=0;j<=11;j++)
{
if(
(-poslpforlc[j] + lc2[i].pos)<=6
&& (-poslpforlc[j] + lc2[i].pos)>=1
&& lc2[i].pos+dice<=44
&& poslpforlc[j]!=0
&& lc2[i].pos<=40 )
{array[i]=lc2[i].pos;}
}
if(a1<=array[i])
a1=array[i];/* a1 has the greatest pos value */
}
if(a1!=0) //to see that at least one ludo is threatened */
{
for(i=0;i<=3;i++) //getting the ludo with greatest pos value
{
if(a1==array[i])
{return i;}
}
}
//to take out ludo button from house
for(i=0;i<=3;i++)
{
if(dice==6)
{
if(lc2[i].pos==0 )
{return i;}
}
}
/*if ludo buttons are outside and option for cutting opponent or
taking
out
own ludo button are not valid , using round robin
for selecting ludo to move*/

static int ludolast=0;


int firstround=0;
for(i=0;i<=3;i++)
{
if(firstround==0)
{
if(ludolast!=3)
{i=ludolast+1;}
firstround++;
}
if(lc2[i].pos!=0 && lc2[i].pos+dice<=44 )
{ludolast=i;i=4;}
if(i==3)
i=-1;
}
return ludolast;
//if ludo button is
}
/* deciding for computer3 which ludo to move */
int forcomputer3(int dice)
{
int i,j,tmp,poslpforlc[12]={0,0,0,0,0,0,0,0,0,0,0,0},cannotmove=5;
/* checking if atleast one ludo can move at current dice value*/
for(i=0;i<=3;i++)
{
if( (lc3[i].pos<=44-dice && lc3[i].pos!=0) || (lc3[i].pos==0 &&
dice==6) )
cannotmove=0;//cannotmove=5 then no ludo can move
}
if(cannotmove==5)
return(5);
//position of players ludo in terms of computers1 ludo positions
for(i=0;i<=3;i++)
{
for(j=1;j<=40;j++)
{
if( lc3[0].x[j]==lp[i].x[lp[i].pos] &&
lc3[0].y[j]==lp[i].y[lp[i].pos])
{
poslpforlc[i]=j;
}
}
}
//position of computer2 ludo in terms of computer3 ludo positions
for(i=4;i<=7;i++)
{
for(j=1;j<=40;j++)
{
if( lc3[0].x[j]==lc2[i-4].x[lc2[i-4].pos] &&
lc3[0].y[j]==lc2[i-4].y[lc2[i-4].pos])
{
poslpforlc[i]=j;
}
}

}
//position of computer1 ludo in terms of computer3 ludo positions
for(i=8;i<=11;i++)
{
for(j=1;j<=40;j++)
{
if( lc3[0].x[j]==lc1[i-8].x[lc1[i-8].pos] &&
lc3[0].y[j]==lc1[i-8].y[lc1[i-8].pos])
{
poslpforlc[i]=j;
}
}
}//end of i
/*to cut opponents ludo button*/
for(i=0;i<=3;i++)
{
for(j=0;j<=11;j++)
{
if( dice==(poslpforlc[j]
lc3[i].pos) && lc3[i].pos!=0 )
return i;
}
}
/* to move those ludos which are near the player ludos and have the
gretest value of pos i.e position . it means saving the threatened
ludo*/
int array[4]={0,0,0,0};
int a1=0,tmp1;
for(i=0;i<=3;i++)
{
for(j=0;j<=11;j++)
{
if(
(-poslpforlc[j] + lc3[i].pos)<=6
&& (-poslpforlc[j] + lc3[i].pos)>=1
&& lc3[i].pos+dice<=44
&& lc3[i].pos<=40
&& poslpforlc[j]!=0 )
{array[i]=lc3[i].pos;}
}
if(a1<=array[i])
a1=array[i];/* a1 has the greatest pos value */
}
if(a1!=0) //to see that at least one ludo is threatened */
{
for(i=0;i<=3;i++) //getting the ludo with greatest pos value
{
if(a1==array[i])
{return i;}
}
}
//to take out ludo button from house
for(i=0;i<=3;i++)
{
if(dice==6)
{
if(lc3[i].pos==0 )

return i;
}
}
/*if ludo buttons are outside and option for cutting opponent or
taking
out
own ludo button are not valid , using round robin
for selecting ludo to move*/
static int ludolast=0;
int firstround=0;
for(i=0;i<=3;i++)
{
if(firstround==0)
{
if(ludolast!=3)
{i=ludolast+1;}
firstround++;
}
if(lc3[i].pos!=0 && lc3[i].pos+dice<=44 )
{ludolast=i;i=4;}
if(i==3)
i=-1;
}
return ludolast;
//if ludo button is
}
void draw_all()
{
//registerbgidriver(EGAVGA_driver);
//registerbgifont(sansserif_font);
int gdriver = DETECT, gmode;
/* request auto detection */
/* initialize graphics mode */
initgraph(&gdriver, &gmode,
);
/* writing text */
setcolor(background);
settextstyle(0,0,0);
setcolor (colorfortext);
outtextxy(5,10, ");
outtextxy(5,20, ");
outtextxy(5,30, COmputer Ludo );
outtextxy(5,40, Game );
/* drawing rectangles */
setcolor(rec);
rectangle(0,410,639,479);
rectangle(0,0,230,50);
setcolor(rec);
rectangle(239,0,639,400);
setfillstyle(1,7);
floodfill(310,10,rec);
draw_house(RED,239,0);
draw_house(GREEN,239,280);

draw_house(BLUE,639-120,0);
draw_house(YELLOW,639-120,280);
draw_button_with_button_name(0,55, about );
draw_button_with_button_name(120,55, exit );
draw_button_with_button_name(0,55+35, throw dice );
draw_button_with_button_name(120,55+35, how to play );
/*drawing sectors*/
setcolor(0);
line(359,30,519,30 );
line(359,60,519,60 );
line(359,90,519,90 );
line(359,120,519,120 );
line(359,280,519,280);
line(359,310,519,310);
line(359,340,519,340 );
line(359,370,519,370 );
line(239,160,639,160 );
line(239,240,639,240 );
line(269,120,269,280);
line(269+30,120,269+30,280 );
line(269+60,120,269+60,280 );
line(269+90,120,269+90,280 );
line(269+130,0,269+130,400 );
line(269+210,0,269+210,400 );
line(269+250,120,269+250,280 );
line(269+280,120,269+280,280 );
line(269+310,120,269+310,280 );
line(269+340,120,269+340,280 );
setfillstyle(1,WHITE);
floodfill(439,200,background);
setcolor(RED);
outtextxy(420,190, HOME );
return ;
}
int player_chooses_house_color(void)
{
char ch;
int check;
int a,b,playercolor=0;
messageout( PLAYER,click YOUR lucky COLOR on the board
while(ch!=27)
{
if(playercolor!=0)
break;//come out of while
if(kbhit())
ch=getch();
setcolor(RED);
WhereMouse(&a,&b);
if(ButtReleased())
{
check=check_if_mouse_click_is_on_any_button (a,b);
switch(check)
{

);

case 1:
{show_mouse_click_on_button(a,b);about();break;}
case 4:
{show_mouse_click_on_button(a,b);howtoplay(); break;}
case 3:
{show_mouse_click_on_button(a,b);exit(0);break;}
case 5:
{ messageout( you have choosen red );
playercolor=RED;
break;}
case 6:
{ messageout( you have choosen green );
playercolor=GREEN;
break;}
case 7:
{ messageout( you have choosen blue );
playercolor=BLUE;
break;}
case 8:
{ messageout( you have choosen yellow );
playercolor=YELLOW;
break;}
} //end of switch
}//end of if(ButtRelease)
}//end of while
delay(500);
return playercolor;
}
void about(void)
{
HideMouse();
setcolor(rec);
rectangle(0,135,230,390);
setcolor(colorfortext);
outtextxy(5,150, WELCOME to ComputerLudo );
outtextxy(5,160, ");
outtextxy(5,170, ");
outtextxy(5,180, ");
outtextxy(5,190, ");
outtextxy(5,210, ");
outtextxy(5,230, ");
outtextxy(5,240, ");
outtextxy(5,250, ");
outtextxy(5,260, thanks );
outtextxy(5,310, PRESS ANY KEY TO PROCEED
getch();
setfillstyle(1,0);
floodfill(5,300,rec);
setcolor(0);
rectangle(0,135,230,390);
setcolor(rec);
ShowMouse();
return ;
}

);

void winner()
{
HideMouse();
setcolor(rec);
rectangle(0,135,230,390);
setcolor(colorfortext);
outtextxy(5,150, welcome to ComputerLudo );
if(flagturn==0)
{
outtextxy(5,160, CONGRATULATIONS );
outtextxy(5,170, YOU WON THIS ROUND );
outtextxy(5,180, OF );
outtextxy(5,190, ComputerLudo );
outtextxy(5,210, thanks );
outtextxy(5,220, you for trying this );
outtextxy(5,230, game. );
outtextxy(5,240, thanks again. );
outtextxy(5,310, PRESS ANY KEY TO EXIT.. );
}
else
{
switch(flagturn)
{
case 1:
{outtextxy(5,160, COMPUTER1 WON THIS );break;}
case 2:
{outtextxy(5,160, COMPUTER2 WON THIS );break;}
case 3:
{outtextxy(5,160, COMPUTER3 WON THIS );break;}
}
outtextxy(5,170, ROUND OF );
outtextxy(5,180, ComputerLudo );
outtextxy(5,200, BETTER LUCK NEXT TIME );
outtextxy(5,220, thanks );
outtextxy(5,230, you for trying this );
outtextxy(5,240, game. );
outtextxy(5,250, thanks again. );
outtextxy(5,310, PRESS ANY KEY TO EXIT.. );
}
getch();
exit(0);
}
void howtoplay()
{
HideMouse();
setcolor(rec);
rectangle(0,135,230,390);
setcolor(colorfortext);
outtextxy(5,150,
outtextxy(5,160,
outtextxy(5,170,
outtextxy(5,180,

This is a game between );


COMPUTER and the PLAYER. );
Choose HOUSE by );
clicking over the HOUSE of );

outtextxy(5,190, your fovourite color. );


outtextxy(5,200, Get 6 on Dice to take a ludo );
outtextxy(5,210, out of HOUSE.To make a ludo );

outtextxy(5,220, MOVE click on it. );


outtextxy(5,230, CUT(send to house) computers );
outtextxy(5,240, ludos by placing your ludos );
outtextxy(5,250, over its ludos. );
outtextxy(5,260, One who gets all the ludos );
outtextxy(5,270, HOME wins thE Game. );
outtextxy(5,290, FOLLOW THE MESSAGE BOX );
outtextxy(5,300, GIVEN AT BOTTOM );
outtextxy(5,320, thanks );
outtextxy(2,330, ");
outtextxy(5,350, PRESS ANY KEY TO PROCEED );
getch();
setfillstyle(1,0);
floodfill(5,300,rec);
setcolor(0);
rectangle(0,135,230,390);
setcolor(rec);
ShowMouse();
return ;
}

Vous aimerez peut-être aussi