private bool CastlingBlocked(King king, Square toSquare) { var dir = 1; if (king.Square.File > toSquare.File) dir = -1; var sqr = king.Square; var file = 0; var list = new List<Square>(10); if (dir == -1) { var s = king.GetSquare(0, -3, this); if (s.Piece != null) return true; list.Add(s); } while (sqr != toSquare) { file += dir; sqr = king.GetSquare(0, file, this); if (sqr.Piece != null) return true; list.Add(sqr); } foreach (var activePiece in OtherPlayer.Pieces) foreach (var square in list) if (activePiece.Attacks(square, Board)) return true; return false; }
private bool CastlingBlocked(King king, Square toSquare) { var dir = 1; if (king.Square.File > toSquare.File) { dir = -1; } var sqr = king.Square; var file = 0; var list = new List <Square>(10); if (dir == -1) { var s = king.GetSquare(0, -3, this); //The b-file square. if (s.Piece != null) { return(true); } list.Add(s); } //Checks the two squares closest to king. As in king side castling. while (sqr != toSquare) { file += dir; sqr = king.GetSquare(0, file, this); if (sqr.Piece != null) { return(true); } list.Add(sqr); } foreach (var activePiece in OtherPlayer.Pieces) { foreach (var square in list) { if (activePiece.Attacks(square, Board)) { return(true); } } } return(false); }