public bool IsUnderAttack(Square sq, PlayerBoard opponentBoard) { ulong occupied = 1UL << (int)sq; ulong pawnAttacks = opponentBoard.GetPawnAttacks(); if ((occupied & pawnAttacks) != 0) { return(true); } ulong knights = opponentBoard.bitboards[(int)Figure.Knight].GetInnerValue(); ulong king = opponentBoard.bitboards[(int)Figure.King].GetInnerValue(); ulong otherFigures = opponentBoard.allFigures | this.allFigures; otherFigures &= (~occupied); var knightAttackGenerator = this.attacksGenerators[(int)Figure.Knight]; ulong occupiedKnightMoves = knightAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedKnightMoves & knights) != 0) { return(true); } var kingAttackGenerator = this.attacksGenerators[(int)Figure.King]; ulong occupiedKingMoves = kingAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedKingMoves & king) != 0) { return(true); } ulong rooksQueens = opponentBoard.GetRooksQueens(); ulong bishopsQueens = opponentBoard.GetBishopsQueens(); var rookAttackGenerator = this.attacksGenerators[(int)Figure.Rook]; ulong occupiedRookMoves = rookAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedRookMoves & rooksQueens) != 0) { return(true); } var bishopAttackGenerator = this.attacksGenerators[(int)Figure.Bishop]; ulong occupiedBishopMoves = bishopAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedBishopMoves & bishopsQueens) != 0) { return(true); } return(false); }
public bool IsUnderAttack(Square sq, PlayerBoard opponentBoard) { ulong occupied = 1UL << (int)sq; ulong pawnAttacks = opponentBoard.GetPawnAttacks(); if ((occupied & pawnAttacks) != 0) return true; ulong knights = opponentBoard.bitboards[(int)Figure.Knight].GetInnerValue(); ulong king = opponentBoard.bitboards[(int)Figure.King].GetInnerValue(); ulong otherFigures = opponentBoard.allFigures | this.allFigures; otherFigures &= (~occupied); var knightAttackGenerator = this.attacksGenerators[(int)Figure.Knight]; ulong occupiedKnightMoves = knightAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedKnightMoves & knights) != 0) return true; var kingAttackGenerator = this.attacksGenerators[(int)Figure.King]; ulong occupiedKingMoves = kingAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedKingMoves & king) != 0) return true; ulong rooksQueens = opponentBoard.GetRooksQueens(); ulong bishopsQueens = opponentBoard.GetBishopsQueens(); var rookAttackGenerator = this.attacksGenerators[(int)Figure.Rook]; ulong occupiedRookMoves = rookAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedRookMoves & rooksQueens) != 0) return true; var bishopAttackGenerator = this.attacksGenerators[(int)Figure.Bishop]; ulong occupiedBishopMoves = bishopAttackGenerator.GetAttacks(sq, otherFigures); if ((occupiedBishopMoves & bishopsQueens) != 0) return true; return false; }