コード例 #1
0
ファイル: oukboard.cpp プロジェクト: cutechess/cutechess
Result KarOukBoard::result()
{
	Side side = sideToMove();
	if (!inCheck(side))
		return OukBoard::result();

	Side opp = side.opposite();
	QString str = tr("%1 wins by giving check").arg(opp.toString());
	return Result(Result::Win, opp, str);
}
コード例 #2
0
ファイル: hordeboard.cpp プロジェクト: cutechess/cutechess
Result HordeBoard::result()
{
	Side side = sideToMove();
	Side opp = side.opposite();
	if (!hasMaterial(side))
		return Result(Result::Win, opp,
			      tr("%1 wins").arg(opp.toString()));

	return StandardBoard::result();
}
コード例 #3
0
ファイル: oukboard.cpp プロジェクト: cutechess/cutechess
bool OukBoard::inCheck(Side side, int square) const
{
	int sign = (side == Side::White) ? 1 : -1;
	Side opSide = side.opposite();
	if (square == 0)
		square = kingSquare(side);

	// Attack by Advisor (Maiden, Neang), initial move
	if (!m_moveCount[opSide][Maiden]
	&&  m_initialSquare[opSide][Maiden] == square - 2 * sign * (width() + 2))
		return true;

	// Attack by King, initial move
	int ksq = kingSquare(opSide);
	bool attacked = (ksq == square - 8 * sign || ksq == square - 12 * sign);

	if (!m_moveCount[opSide][King] && attacked)
	{
		if (square == kingSquare(side)
		|| !inCheck(opSide))
			return true;
	}
	return MakrukBoard::inCheck(side, square);
}