Chess for 2 humans
Chess for two humans
#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;
}
#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;
}