uva 10196 check the check (二)

2014-11-24 00:43:50 · 作者: · 浏览: 6
oid N_n(int x, int y, int type)
{
for (int i = 0; i < 8; i++)
{
int newx = x + N_n_dx[i];
int newy = y + N_n_dy[i];
if (checkTheNext(newx, newy))
{
if (data[newx][newy] == 0 || data[newx][newy] == type)
data[newx][newy] = type;
else data[newx][newy] = 3;
}
}
}
int main()
{
int n = 0,flag = 1,i,j;
string str;
while (flag)
{
char temp;
int point_size = 0;
memset(data, 0, sizeof(data));
memset(flagData, 0, sizeof(flagData));
for (i = 0; i < 64; i++)
{
cin >> temp;
int x = i / 8;
int y = i % 8;
image[x][y] = temp;
if (temp != '.') flagData[x][y] = 1;
else point_size++;
if (temp == 'k')
{
blackKingX = x;
blackKingY = y;
}
if (temp == 'K')
{
whiteKingX = x;
whiteKingY = y;
}
}
if (point_size == 64) break;
else
{
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
switch (image[i][j])
{
case '.':
break;
case 'p':
p(i, j);
break;
case 'P':
P(i, j);
break;
case 'r':
R_r(i, j, 1);
break;
case 'R':
R_r(i, j, 2);
break;
case 'b':
B_b(i, j, 1);
break;
case 'B':
B_b(i, j, 2);
break;
case 'q':
Q_q(i, j, 1);
break;
case 'Q':
Q_q(i, j, 2);
break;
case 'k':
K_k(i, j, 1);
break;
case 'K':
K_k(i, j, 2);
break;
case 'n':
N_n(i, j, 1);
break;
case 'N':
N_n(i, j, 2);
break;
}
cout << "Game #" << ++n << ": ";
if (data[whiteKingX][whiteKingY] == 1 || data[whiteKingX][whiteKingY] == 3)
cout << "white king is in check." << endl;
else if (data[blackKingX][blackKingY] == 2 || data[blackKingX][blackKingY] == 3)
cout << "black king is in check." << endl;
else
cout << "no king is in check." << endl;
}
}
return 0;
}