UVA 10196 - Check The Check (将军)(四)

2014-11-23 23:21:18 · 作者: · 浏览: 20
yy = 8-y;
if (xx < yy)
{
Min = xx;
}
else
{
Min = yy;
}
startX = x-Min;
//startY = y+Min;
//for (i=startX, j=startY; i
for (i=x-1, j=y+1; i>=startX; i--, j++)
{
if (chess[i][j] == ch)
{
return true;
}
if (chess[i][j] != '.') //如果有障碍物
{
break;
}
}
//判断左下角
xx = 8-x;
yy = y-1;
if (xx < yy)
{
Min = xx;
}
else
{
Min = yy;
}
startX = x+Min;
//startY = y-Min;
//for (i=startX, j=startY; j
for (i=x+1, j=y-1; i<=startX; i++, j--)
{
if (chess[i][j] == ch)
{
return true;
}
if (chess[i][j] != '.') //如果有障碍物
{
break;
}
}
//判断右下角
xx = 8-x;
yy = 8-y;
if (xx < yy)
{
Min = xx;
}
else
{
Min = yy;
}
startX = x+Min;
//startY = y+Min;
//for (i=startX, j=startY; i>x; i--, j--)
for (i=x+1, j=y+1; i<=startX; i++, j++)
{
if (chess[i][j] == ch)
{
return true;
}
if (chess[i][j] != '.') //如果有障碍物
{
break;
}
}
//判断垂直方向上半段
for (i=x-1; i>=1; i--)
{
if (chess[i][y] == ch)
{
return true;
}
if (chess[i][y] != '.') //如果有阻碍物
{
break;
}
}
//判断垂直方向下半段
for (i=x+1; i<=8; i++)
{
if (chess[i][y] == ch)
{
return true;
}
if (chess[i][y] != '.') //如果有阻碍物
{
break;
}
}
//判断水平方向左半段
for (i=y-1; i>=1; i--)
{
if (chess[x][i] == ch)
{
return true;
}
if (chess[x][i] != '.') //如果有阻碍物
{
break;
}
}
//判断水平方向右半段
for (i=y+1; i<=8; i++)
{
if (chess[x][i] == ch)
{
return true;
}
if (chess[x][i] != '.') //如果有阻碍物
{
break;
}
}
return false; //没有构成将军
}
bool Knight(char chess[SIZEX][SIZEY], int x, int y, char ch) //黑白棋的Knight
{
int i;
int xx, yy;
for (i=0; i<8; i++)
{
xx = x+coordinate[i][0];
yy = y+coordinate[i][1];
if (chess[xx][yy] == ch)
{
return true;
}
}
return false;
}