Chess Game program in C language

Chess Game program in C language

 

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void blk(int,int);
void display();
//enum bool{TRUE,FALSE};
/*void main() //MAIN FUNCTION
{
display();
getch();
} */
void display() //DISPLAY TO SHOW THE BOARD
{
int gd=DETECT,gm,i,j,l,m,b;
char pattern[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
int arrodd[32][2]={ {0,0},{100,0},{200,0},{300,0},{50,50},{150,50}
 ,{250,50},{350,50},{0,100},{100,100},{200,100},{300,100}
 ,{50,150},{150,150},{250,150},{350,150},{0,200},{100,200}
 ,{200,200},{300,200},{50,250},{150,250},{250,250},{350,250},
 {0,300},{100,300},{200,300},{300,300},{50,350},{150,350},
 {250,350},{350,350} };
int
arrevn[33][2]={{50,0},{150,0},{250,0},{350,0},{0,50},{100,50},{200,50},
 {300,50},{50,100},{150,100},{250,100},{350,100},{0,150},
 {100,150},{200,150},{300,150},{50,200},{150,200},{250,200},
 {350,200},{0,250},{100,250},{200,250},{300,250},{50,300},
 {150,300},{250,300},{350,300},{0,350},{100,350},{200,350},
 {300,350}};
clrscr();
initgraph(&gd,&gm,"");
for(i=0;i<=400;i=i+50) //to draw vertical lines of the chess board.
{
line(i,0,i,400);
}
for(j=0;j<=400;j=j+50) //to draw the horizontal lines of the chess 
board.
{
line(0,j,400,j);
}
blk(420,0);
blk(420,250);
line(0,430,0,460); //to draw the display at the bottom
line(0,430,400,430);
line(0,460,400,460);
line(400,430,400,460);
settextstyle(7,HORIZ_DIR,3);
setfillpattern(&pattern,GREEN);
for(b=0;b<=31;b++)
{
bar(arrodd[b][0],arrodd[b][1],arrodd[b][0]+50,arrodd[b][1]+50);
rectangle(arrodd[b][0],arrodd[b][1],arrodd[b][0]+50,arrodd[b][1]+50);
}
setfillpattern(&pattern,DARKGRAY);
for(m=0;m<=31;m++)
{
bar(arrevn[m][0],arrevn[m][1],arrevn[m][0]+50,arrevn[m][1]+50);
rectangle(arrevn[m][0],arrevn[m][1],arrevn[m][0]+50,arrevn[m][1]+50);
}
}
 void blk(int q,int r)
{
int y,z;
for(y=q;y<=(q+200);y=y+50)
{ line(y,r,y,r+200);}
for(z=r;z<=(r+200);z=z+50)
{ line(q,z,q+200,z);}
}
//Source file//
#include<akhchs.c> //we used akhchs.c as header file
#include<stdio.h>
#include<conio.h>
#include<dos.h>
char pos[8][8],color[8][8];
void assign(char*,char*);
struct block{ //structure for every block
 int curx,cury;
 char clr,blkcolor;
 };
union REGS i,o; //for hardware interaction
char getblkcolor(int,int,int,int,char); //functions prototype
char chkpawnmov(struct block* selected,int x3,int y3);
char chkrookmov(struct block* selected,int x3,int y3);
char chkknightmov(struct block* selected,int x3,int y3);
char chkbishopmov(struct block* selected,int x3,int y3);
char chkqueenmov(struct block* selected,int x3,int y3);
char chkkingmov(struct block* selected,int x3,int y3);
void checkpwn(int,int);
void main()
{
int i1,j1,button,x,y,x1,y1,x2,y2,x3,y3,ch,i=0,j=0,z=1,turn=0;
struct block
*selected,pw[8],pb[8],rookw[2],rookb[2],bishopw[2],bishopb[2];
struct block kingw,kingb,queenw,queenb,knightw[2],knightb[2];
char id,nwblkclr,move='i';
assign(pos,color);
clrscr();
display(); //for showing chess board
design();
setspare(); //for drawing rook etc.
setposw(pw); //sets position of black and
setposb(pb); //white pawns with color
setposrw(rookw,bishopw,knightw,&kingw,&queenw);//sets position of 
whites
setposrb(rookb,bishopb,knightb,&kingb,&queenb);//sete position of 
blacks
//restrictmouseptr(0,0,400,400); //restricts pointer of mouse in 
the
area specified there.
showmouseptr();
while(z)
{
i=i+1;
setcolor(WHITE);
if(turn%2==0) //means white's turn
 outtextxy(100,430,"white's turn");
else if(turn%2!=0) //means black's turn
 outtextxy(100,430,"black's turn");
while(i)
 {
 if(kbhit())
 {
 ch=getch();
 if(ch=='
') //escape at pressing enter.
 exit(0);
 }
 getmousepos(&button,&x,&y); //gets click position of mouse
 if((button== 001))
 {
 sound(1000);
 i=i-1;
 delay(50);
 nosound();
 delay(500);
 }
 }
 x1=relposx(x)/50;
 y1=relposy(y)/50;
 gotoxy(6,28);
 if(x1==pw[0].curx && y1==pw[0].cury )
 { selected=&pw[0]; id='p'; }
 else if(x1==pw[1].curx && y1==pw[1].cury )
 { selected=&pw[1]; id='p'; }
 else if(x1==pw[2].curx && y1==pw[2].cury )
 { selected=&pw[2]; id='p'; }
 else if(x1==pw[3].curx && y1==pw[3].cury )
 { selected=&pw[3]; id='p'; }
 else if(x1==pw[4].curx && y1==pw[4].cury )
 { selected=&pw[4]; id='p'; }
 else if(x1==pw[5].curx && y1==pw[5].cury )
 { selected=&pw[5]; id='p'; }
 else if(x1==pw[6].curx && y1==pw[6].cury )
 { selected=&pw[6]; id='p'; }
 else if(x1==pw[7].curx && y1==pw[7].cury )
 { selected=&pw[7]; id='p'; }
 else if(x1==pb[0].curx && y1==pb[0].cury )
 { selected=&pb[0]; id='p'; }
 else if(x1==pb[1].curx && y1==pb[1].cury )
 { selected=&pb[1]; id='p'; }
 else if(x1==pb[2].curx && y1==pb[2].cury )
 { selected=&pb[2]; id='p'; }
 else if(x1==pb[3].curx && y1==pb[3].cury )
 { selected=&pb[3]; id='p'; }
 else if(x1==pb[4].curx && y1==pb[4].cury )
 { selected=&pb[4]; id='p'; }
 else if(x1==pb[5].curx && y1==pb[5].cury )
 { selected=&pb[5]; id='p'; }
 else if(x1==pb[6].curx && y1==pb[6].cury )
 { selected=&pb[6]; id='p'; }
 else if(x1==pb[7].curx && y1==pb[7].cury )
 { selected=&pb[7]; id='p'; }
 else if(x1==rookw[0].curx && y1==rookw[0].cury)
 { selected=&rookw[0]; id='r'; }
 else if(x1==rookw[1].curx && y1==rookw[1].cury)
 { selected=&rookw[1]; id='r'; }
 else if(x1==rookb[0].curx && y1==rookb[0].cury)
 { selected=&rookb[0]; id='r'; }
 else if(x1==rookb[1].curx && y1==rookb[1].cury)
 { selected=&rookb[1]; id='r'; }
 else if(x1==bishopw[0].curx && y1==bishopw[0].cury)
 { selected=&bishopw[0];id='b'; }
 else if(x1==bishopw[1].curx && y1==bishopw[1].cury)
 { selected=&bishopw[1];id='b'; }
 else if(x1==bishopb[0].curx && y1==bishopb[0].cury)
 { selected=&bishopb[0];id='b'; }
 else if(x1==bishopb[1].curx && y1==bishopb[1].cury)
 { selected=&bishopb[1];id='b'; }
 else if(x1==kingw.curx && y1==kingw.cury)
 { selected=&kingw; id='g'; }
 else if(x1==queenw.curx && y1==queenw.cury)
 { selected=&queenw; id='q'; }
 else if(x1==kingb.curx && y1==kingb.cury)
 { selected=&kingb; id='g'; }
 else if(x1==queenb.curx && y1==queenb.cury)
 { selected=&queenb; id='q'; }
 else if(x1==knightw[0].curx && y1==knightw[0].cury)
 { selected=&knightw[0];id='k'; }
 else if(x1==knightw[1].curx && y1==knightw[1].cury)
 { selected=&knightw[1];id='k'; }
 else if(x1==knightb[0].curx && y1==knightb[0].cury)
 { selected=&knightb[0];id='k'; }
 else if(x1==knightb[1].curx && y1==knightb[1].cury)
 { selected=&knightb[1];id='k'; }
 if((turn%2==0 && selected->clr=='b')||(turn%2!=0 && 
selected->clr=='w'))
 exit();
 turn=turn+1;
 j=j+1;
 while(j)
 {
 if(kbhit())
 {
 ch=getch();
 if(ch=='
') //escape at pressing enter.
 exit(0);
 }
 getmousepos(&button,&x2,&y2); //gets click position of mouse
 if((button== 001))
 {
 sound(500);
 j=j-1;
 delay(100);
 nosound();
 delay(500);
 }
 }
 x3=relposx(x2)/50; //gives standard x coordinate
 y3=relposy(y2)/50; //gives standard y coordinate
 nwblkclr=getblkcolor(x1,y1,x3,y3,selected->blkcolor);//get 
destination
block's color;
 gotoxy(6,28);
 bottom(); //clears bottom display
 if(id=='p') //wheteher pawn?
 {
 move= chkpawnmov(selected,x3,y3);
 if(move=='v')
 {
 draw(x3,y3,selected,nwblkclr,'p');
 checkpwn(x3,y3);
 }
 }
 else if(id=='r') //whether rook?
 {
 move=chkrookmov(selected,x3,y3);
 if(move=='v' )
 {
 draw(x3,y3,selected,nwblkclr,'r');
 }
 }
 else if(id=='k') //whether knight?
 {
 move= chkknightmov(selected,x3,y3);
 if(move=='v' )
 {
 draw(x3,y3,selected,nwblkclr,'k');
 }
}
 else if(id=='b') //whether bishop?
 {
 move=chkbishopmov(selected,x3,y3);
 if(move=='v')
 {
 draw(x3,y3,selected,nwblkclr,'b');
 }
 }
 else if(id=='q') //whether queen?
 {
 move=chkqueenmov(selected,x3,y3);
 if(move=='v')
 draw(x3,y3,selected,nwblkclr,'q');
 }
 else if(id=='g') //whether king?
 {
 move=chkkingmov(selected,x3,y3);
 if(move=='v')
 draw(x3,y3,selected,nwblkclr,'g');
 }
 if(move=='i') turn=turn-1;
 }
 getch();
}
getmousepos(int *button,int* x,int* y) //gets mouse position.
{
 i.x.ax=3;
 int86(0x33,&i,&o);
 *button=o.x.bx;
 *x=o.x.cx;
 *y=o.x.dx;
 return;
}
showmouseptr() //shows pointer in graphics mode.
{
 i.x.ax=1;
 int86(0x33,&i,&o);
 return;
}
void hidemouseptr() //hides pointer
{
i.x.ax=0;
int86(0x33,&i,&o);
return;
}
restrictmouseptr(int x1,int y1,int x2,int y2) //restrict pointer
 {
 i.x.ax=7;
 i.x.cx=x1;
 i.x.dx=x2;
 int86(0x33,&i,&o);
 i.x.ax=8;
 i.x.cx=y1;
 i.x.dx=y2;
 int86(0x33,&i,&o);
 return;
}
setposw(struct block* pawnw) //sete each white pawn.
{ int count,togl;
 for(count=0,togl=0;count<=7;count++,togl++)
 {
 pawnw->curx=count;
 pawnw->cury=6;
 pawnw->clr='b';
 if(togl%2==0)
 pawnw->blkcolor='g';
 else if(togl%2==1)
 pawnw->blkcolor='m';
 pawnw++;
 }
 return;
}
setposb(struct block* pawnb) //sets each black pawn.
{
 int count,togl;
 for(count=0,togl=0;count<=7;count++,togl++)
 {
 pawnb->curx=count;
 pawnb->cury=1;
 pawnb->clr='w';
 if(togl%2==0)
 pawnb->blkcolor='m';
 else if(togl%2==1)
 pawnb->blkcolor='g';
 pawnb++;
 }
 return;
}
char chkpawnmov(struct block* selected,int x3,int y3)
{ char mov,id,c; //checks each pawn (black and white) move.
 id=pos[x3][y3]; //anybody?
 c=color[x3][y3]; //color?
 if(selected->clr=='w') //white pawn?
 {
 if(x3==selected->curx && y3==selected->cury+1 ) //move 1
 { if(id=='n') //id is none when no body is there
 mov='v';
 }
 else if( (x3==selected->curx+1 || x3==selected->curx-1) &&
y3==selected->cury+1)
 {
 if(id!='n' && c=='b') //black present?
 {
 mov='v';
 send(id,c);
 }
 }
 }
 else if(selected->clr=='b')
 {
 if(x3==selected->curx && y3==selected->cury-1) //black and white 
both
not there?
 { if(id=='n')
 mov='v';
 }
 else if((x3==selected->curx-1 || x3==selected->curx+1) &&
y3==selected->cury-1)
 { if(id!='n' && c=='w' ) //white there
 {
 mov='v'; //valid move
 send(id,c);
 }
 }
 }
 else
 { //no action at invalid move.
 mov='i';
 }
 return(mov);
}
setposrw(struct block* rookw,struct block* bishopw,struct block*
knightw,struct block* kingw,struct block* queenw)
{ //it sets the white rook,knight,bishop etc.
 int i;
 rookw->curx=rookw->cury=7;
 rookw->clr='w';
 rookw->blkcolor='m';
 rookw++;
 rookw->curx=7;rookw->cury=7;
 rookw->clr='w';
 rookw->blkcolor='g';
 bishopw->curx=2;
 bishopw->cury=7;
 bishopw->clr='w';
 bishopw->blkcolor='m';
 bishopw++;
 bishopw->curx=5;
 bishopw->cury=7;
 bishopw->clr='w';
 bishopw->blkcolor='g';
 knightw->curx=1;
 knightw->cury=7;
 knightw->clr='w';
 knightw->blkcolor='g';
 knightw++;
 knightw->curx=6;
 knightw->cury=7;
 knightw->clr='w';
 knightw->blkcolor='m';
 kingw->curx=3;kingw->cury=7;
 kingw->clr='w';kingw->blkcolor='m';
 queenw->curx=4;queenw->cury=7;
 queenw->clr='w';queenw->blkcolor='g';
 return;
}
setposrb(struct block* rookb,struct block* bishopb,struct block*
knightb,struct block* kingb,struct block* queenb)
{ //it sets the current coords of black rook,bishop,knight etc.
 int i;
 rookb->curx=0;rookb->cury=0;
 rookb->clr='b';
 rookb->blkcolor='g';
 rookb++;
 rookb->curx=7;rookb->cury=0;
 rookb->clr='b';
 rookb->blkcolor='m';
 bishopb->curx=2;
 bishopb->cury=0;
 bishopb->clr='b';
 bishopb->blkcolor='g';
 bishopb++;
 bishopb->curx=5;
 bishopb->cury=0;
 bishopb->clr='b';
 bishopb->blkcolor='m';
 knightb->curx=1;
 knightb->cury=0;
 knightb->clr='b';
 knightb->blkcolor='m';
 knightb++;
 knightb->curx=6;
 knightb->cury=0;
 knightb->clr='b';
 knightb->blkcolor='g';
 kingb->curx=3;kingb->cury=0;
 kingb->clr='b';kingb->blkcolor='m';
 queenb->curx=4;queenb->cury=0;
 queenb->clr='b';queenb->blkcolor='g';
 return;
}
draw(int x3,int y3,struct block* selected,char nwblkclr,char id1)
{
 int nx3,ny3,ncx,ncy;
 nx3=x3*50; ny3=y3*50; ncx=(selected->curx)*50; 
ncy=(selected->cury)*50;
 if(nwblkclr=='g') //CLEAR NEW POSITION
 setfillpattern(pattern,GREEN);
 else if(nwblkclr=='m')
 setfillpattern(pattern,MAGENTA);
 hidemouseptr(); //necessary to avoid the effect of mouse pointer.
 bar(nx3,ny3,nx3+50,ny3+50);
 setcolor(WHITE);
 rectangle(nx3,ny3,nx3+50,ny3+50);
 if(selected->blkcolor=='g') //CLEAR PREVIOUS POSITION
 setfillpattern(pattern,GREEN);
 else if(selected->blkcolor=='m')
 setfillpattern(pattern,MAGENTA); //clear the previous pos.
 bar(ncx,ncy,ncx+50,ncy+50);
 setcolor(WHITE);
 rectangle(ncx,ncy,ncx+50,ncy+50);
 if(id1=='p') //if pawn was selected then draw the pawn at new 
position.
 { if(selected->clr=='w')
 pawndraw(nx3,ny3,0); // 0 for white.
 else if(selected->clr=='b')
 pawndraw(nx3,ny3,1);
}
else if(id1=='r') //if rook was selected
 { if(selected->clr=='w')
 rookdraw(nx3,ny3,0); // 0 for white.
 else if(selected->clr=='b')
 rookdraw(nx3,ny3,1);
 }
 else if(id1=='k') //if knight was selected
 { if(selected->clr=='w')
 drawknite(nx3,ny3,0); // 0 for white.
 else if(selected->clr=='b')
 drawknite(nx3,ny3,1);
 }
 else if(id1=='b') //if bishop was selected
 { if(selected->clr=='w')
 drawbishop(nx3,ny3,0); // 0 for white.
 else if(selected->clr=='b')
 drawbishop(nx3,ny3,1);
 }
 else if(id1=='g')
 { if(selected->clr=='w')
 drawking(nx3,ny3,0); // 0 for white.
 else if(selected->clr=='b')
 drawking(nx3,ny3,1);
 }
 else if(id1=='q')
 { if(selected->clr=='w')
 drawqueen(nx3,ny3,0); // 0 for white.
 else if(selected->clr=='b')
 drawqueen(nx3,ny3,1);
 }
showmouseptr();
pos[selected->curx][selected->cury]='n';
color[selected->curx][selected->cury]='n'; //welcome back mr. 
pointer.
selected->curx=x3;
selected->cury=y3;
selected->blkcolor=nwblkclr;
pos[x3][y3]=id1;
color[x3][y3]=selected->clr;
return;
}
char chkrookmov(struct block* selected,int x3,int y3)
{ //checks rook move for black and white as both have 
same
moves.
 int i;
 char id,c,mov='v';
 if( (x3==selected->curx) || (y3==selected->cury) )
 {
 if(x3>selected->curx && y3==selected->cury)
 {
 for(i=selected->curx+1;i<x3;i++)
 {
 id=pos[i][y3];
// c=color[i][y3];
 if(id!='n') //if black or white present move is invalid
 {
 mov='i';
 }
 }
 }
 else if(x3<selected->curx && y3==selected->cury)
 {
 for(i=selected->curx-1;i>x3;i--)
 {
 id=pos[i][y3];
// c=color[i][y3];
 if(id!='n') //if black or white
 {
 mov='i';
 }
 }
 }
else if(x3==selected->curx && y3>selected->cury)
 {
 for(i=selected->cury+1;i<y3;i++)
 {
 id=pos[x3][i];
 // c=color[x3][i];
 if(id!='n') //if black or white
 {
 mov='i';
 }
 }
 }
 else if(x3==selected->curx && y3<selected->cury)
 {
 for(i=selected->cury-1;i>y3;i--)
 {
 id=pos[x3][i];
 // c=color[x3][i];
 if(id!='n') //if black or white
 {
 mov='i';
 }
 }
 }
 if(mov=='v')
 {
 id=pos[x3][y3];
 c=color[x3][y3];
 if(id!='n' && c=='b' && selected->clr=='w') //means black 
at
x3,y3
 {
 mov='v';
 send(id,c);
 }
 else if(id!='n' && c=='w' && selected->clr=='b') //means white
there
 {
 mov='v';
 send(id,c);
 }
 else if(id=='n')//none of the white or black even at x3 & y3?
 mov='v';
 else
 mov='i';
 }
 }
 else mov='i';
return(mov);
}
char chkknightmov(struct block* selected,int x3,int y3)
{
 //knight's moves are not affected if some entity lies in the way.
 //it just jumps over them.Atmost only eight moves are possible.
 int i,posk[8][2];
 char id,c,mov='i';
 posk[0][0]=selected->curx+1;
 posk[0][1]=selected->cury-2;
 posk[1][0]=selected->curx-1;
 posk[1][1]=selected->cury-2;
 posk[2][0]=selected->curx+1;
 posk[2][1]=selected->cury+2;
 posk[3][0]=selected->curx-1;
 posk[3][1]=selected->cury+2;
 posk[4][0]=selected->curx+2;
 posk[4][1]=selected->cury-1;
 posk[5][0]=selected->curx+2;
 posk[5][1]=selected->cury+1;
 posk[6][0]=selected->curx-2;
 posk[6][1]=selected->cury+1;
 posk[7][0]=selected->curx-2;
 posk[7][1]=selected->cury-1;
 for(i=0;i<=7;i++)
 {
 if(x3==posk[i][0] && y3==posk[i][1])
 {
 id=pos[x3][y3];
 c=color[x3][y3];
 if(id!='n'&& c=='b' && selected->clr=='w')
 {
 mov='v'; //means black is there.
 send(id,c);
 }
 else if(id!='n'&&c=='w' && selected->clr=='b')
 {
 mov='v'; //means white is there.
 send(id,c);
 }
 else if(id=='n')
 mov='v'; //means it is blank.
 }
 }
 return(mov);
}
char chkbishopmov(struct block* selected,int x3,int y3)
{
 int m,n,m1,n1,i,j;
 char mov,id,c;
 m=x3-selected->curx;
 n=y3-selected->cury;
 if(abs(m)==abs(n))
 { if(m>0 && n<0)//move 1
 { for(i=selected->curx+1,j=selected->cury-1;(i<x3 && j>y3);i=i++,j--)
 {
 id=pos[i][j];
// c=color[i][j];
 if(id!='n')
 mov='i';
 }
 }
 if(m>0 && n>0)//move 2
 { for(i=selected->curx+1,j=selected->cury+1;(i<x3 && j<y3);i++,j++)
 {
 id=pos[i][j];
// c=color[i][j];
 if(id!='n')
 mov='i';
 }
 }
 if(m<0 && n<0)//move 3
 { for(i=selected->curx-1,j=selected->cury-1;(i!=x3 && j!=y3);i--,j--)
 {
 id=pos[i][j];
// c=color[i][j];
 if(id!='n')
 mov='i';
 }
 }
 if(m<0 && n>0)//move 4
 { for(i=selected->curx-1,j=selected->cury+1;(i>x3 && j<y3);i--,j++)
 {
 id=pos[i][j];
// c=color[i][j];
 if(id!='n')
 mov='i';
 }
 }
 if(mov!='i') //..that no body is in the way,now at x3 y3?
 {
 id=pos[x3][y3];
 c=color[x3][y3];
 if(id!='n'&& c=='b') //means black at x3,y3
 {
 if(selected->clr=='w')
 {
 mov='v';
 send(id,c);
 }
 else
 mov='i';
 }
 else if(id!='n'&& c=='w') //means white there
 {
 if(selected->clr=='b')
 {
 mov='v';
 send(id,c);
 }
 else
 { mov='i';}
}
 else if(id=='n')//none of the white or black even at x3 & y3?
 mov='v';
 }
 } //means not at the x cross.
 else
 {
 mov='i';
 }
 return(mov);
}
char chkqueenmov(struct block* selected,int x3,int y3)
{
 char mov1,mov2,mov3='i',id,c;
 mov1=chkrookmov(selected,x3,y3);
 mov2=chkbishopmov(selected,x3,y3);
 if(mov1=='v' || mov2=='v') //move is valid and color is
checked already.
 {
 mov3='v';
 }
 return(mov3);
}
char chkkingmov(struct block* selected,int x3,int y3)
{
 char id,c,mov='i';
 id=pos[x3][y3];
 c=pos[x3][y3];
 if(x3==selected->curx+1 && y3==selected->cury-1) //move 1
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w')//means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx-1 && y3==selected->cury-1) //move 2
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w')//means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx-1 && y3==selected->cury+1) //move 3
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w') //means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx+1 && y3==selected->cury+1) //move 4
 {
 if(id=='n' )
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w')//means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx+1 && y3==selected->cury) //move 5
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w') //means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx && y3==selected->cury-1) //move 6
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w')//means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx-1 && y3==selected->cury) //move 7
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w')//means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else if(x3==selected->curx && y3==selected->cury+1) //move 8
 {
 if(id=='n')
 mov='v';
 else if(selected->clr=='w' && id!='n' && c=='b')//means black there.
 {
 mov='v';
 send(id,c);
 }
 else if(selected->clr=='b' && id!='n' && c=='w')//means white there.
 {
 mov='v';
 send(id,c);
 }
 }
 else //means move is not valid
 { mov='i';}
 return(mov);
}
void assign(char* post,char* col)
{ int i;
 char
val1[64]={"rpnnnnprkpnnnnpkbpnnnnpbgpnnnnpqqpnnnnpgbpnnnnpbkpnnnnpkrpnnnnpr"};
 char
val2[64]={"wwnnnnbbwwnnnnbbwwnnnnbbwwnnnnbbwwnnnnbbwwnnnnbbwwnnnnbbwwnnnnbb"};
 for(i=0;i<=63;i++,post++,col++)
 { *post=val1[i]; *col=val2[i]; }
}
void checkpwn(int x3,int y3)
{
 char a;
 a=color[x3][y3];//whether pawn is white or black?
 bottom();
 setcolor(WHITE);
 if(a=='w' && (x3>=0 && x3<=7) && y3==7)
 {
 outtextxy(100,430,"well done white..press w");
 getch(); bottom();
 }
 else if(a=='b' && (x3>=0 && x3<=7) && y3==0)
 {
 outtextxy(100,430,"well done black..press b");
 getch(); bottom();
 }
 return;
}

Leave a Reply