~cpp
#include <iostream>
using namespace std;
char chess[12][12];
int exit_cond;
int i, j, m, n;
int gameNum=0;
bool black, white;
bool checkPp(int x, int y, char Pp)
{
if(Pp=='P')
return (chess[x+1][y+1] ==Pp || chess[x-1][y+1]==Pp);
else if(Pp=='p')
return (chess[x+1][y-1] ==Pp || chess[x-1][y-1]==Pp);
return false;
}
bool checkRr(int x, int y, char Rr)
{
for(m=x-1; m>1; m--)
{
if(chess[m][y]==Rr)
return true;
else if(chess[m][y]!='.')
break;
}
for(m=x+1; m<10; m++)
{
if(chess[m][y]==Rr)
return true;
else if(chess[m][y]!='.')
break;
}
for(m=y-1; m>1; m--)
{
if(chess[x][m]==Rr)
return true;
else if(chess[x][m]!='.')
break;
}
for(m=y+1; m<10; m++)
{
if(chess[x][m]==Rr)
return true;
else if(chess[x][m]!='.')
break;
}
return false;
}
bool checkBb(int x, int y, char Bb)
{
for(m=x-1, n=y-1; m>1 && n>1; m--, n--)
{
if(chess[m][n]==Bb)
return true;
else if(chess[m][n]!='.')
break;
}
for(m=x-1, n=y+1; m>1 && n<10; m--, n++)
{
if(chess[m][n]==Bb)
return true;
else if(chess[m][n]!='.')
break;
}
for(m=x+1, n=y-1; m<10 && n>1; m++, n--)
{
if(chess[m][n]==Bb)
return true;
else if(chess[m][n]!='.')
break;
}
for(m=x+1, n=y+1; m<10 && n<10; m++, n++)
{
if(chess[m][n]==Bb)
return true;
else if(chess[m][n]!='.')
break;
}
return false;
}
bool checkQq(int x, int y, char Qq)
{
if(checkBb(x,y,Qq) || checkRr(x,y,Qq))
return true;
return false;
}
bool checkKk(int x, int y, char Kk)
{
if(chess[x-1][y-1]==Kk || chess[x][y-1]==Kk || chess[x+1][y-1]==Kk || chess[x+1][y]==Kk || chess[x+1][y+1]==Kk || chess[x][y+1]==Kk || chess[x-1][y+1]==Kk || chess[x-1][y]==Kk)
return true;
else
return false;
}
bool checkNn(int x, int y, char Nn)
{
if(chess[x-1][y-2]==Nn || chess[x+1][y-2]==Nn || chess[x+2][y-1]==Nn || chess[x+2][y+1]==Nn || chess[x+1][y+2]==Nn || chess[x-1][y+2]==Nn || chess[x-2][y+1]==Nn || chess[x-2][y-1]==Nn)
return true;
else
return false;
}
void check()
{
gameNum++;
black = false;
white = false;
for(i=2; i<10; i++)
{
for(j=2; j<10; j++)
{
if(chess[j][i]=='k')
{
if(checkPp(j,i,'P') || checkRr(j,i,'R') || checkBb(j,i,'B') || checkQq(j,i,'Q') || checkKk(j,i,'K') || checkNn(j,i,'N'))
black = true;
}
if(chess[j][i]=='K')
{
if(checkPp(j,i,'p') || checkRr(j,i,'r') || checkBb(j,i,'b') || checkQq(j,i,'q') || checkKk(j,i,'k') || checkNn(j,i,'n'))
white = true;
}
}
}
if(black)
cout << "Game #" <<gameNum << ": black king is in check."<<endl;
else if(white)
cout << "Game #" <<gameNum << ": white king is in check."<<endl;
else
cout << "Game #" <<gameNum << ": no king is in check." <<endl;
}
int main()
{
exit_cond = 0;
while(exit_cond!=64)
{
exit_cond = 0;
for(i=0; i<12; i++)
{
for(j=0; j<12; j++)
{
if(i==0 || j==0 || i==1 || j==1 || i==10 || j==10 || i==11 || j==11)
chess[j][i] = '*';
else
cin >> chess[j][i];
if(chess[j][i]=='.')
exit_cond++;
}
}
if(exit_cond!=64)
check();
}
return 0;
}