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