public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank) { List <ChessBoard> result = new List <ChessBoard>(); Square current = new Square(file, rank); Square[] moves = Piece.GetSimplekNightMoveDestinations(current); ChessBoard tempboard; foreach (Square move in moves) { if (move.IsOK()) { if (board[move] <= 0) { tempboard = Piece.PerformMove(board, current, move); result = Piece.AddNewPosition(result, tempboard, true); } } } return(result); }
public static List <Square> GetPossibleBlackAttackersToSquare(ChessBoard board, Square goalsquare) { List <Square> result = new List <Square>(); char file = goalsquare.file; int rank = goalsquare.rank; //check for Pawn if (file >= 'a' && file <= 'g' && rank <= 7 && board[(char)(file + 1), rank + 1] == (sbyte)DefaultPieces.BlackPawn) { result.Add(new Square((char)(file + 1), rank + 1)); } if (file >= 'b' && file <= 'h' && rank <= 7 && board[(char)(file - 1), rank + 1] == (sbyte)DefaultPieces.BlackPawn) { result.Add(new Square((char)(file - 1), rank + 1)); } Square[] moves_array = Piece.GetSimplekNightMoveDestinations(goalsquare); foreach (Square move in moves_array) { if (move.IsOK() && board[move] == (sbyte)DefaultPieces.BlackkNight) { result.Add(move); } } GetVerticalUpBlackAttackers(board, result, file, rank); GetVerticalDownBlackAttackers(board, result, file, rank); GetHorizontalRightBlackAttacker(board, result, file, rank); GetHorizontalLeftBlackAttackers(board, result, file, rank); GetDiagonalBlackAttackers(board, result, goalsquare, 1, 1); GetDiagonalBlackAttackers(board, result, goalsquare, 1, -1); GetDiagonalBlackAttackers(board, result, goalsquare, -1, 1); GetDiagonalBlackAttackers(board, result, goalsquare, -1, -1); Square[] moves = Piece.GetSimpleKingMoveDestinations(goalsquare); foreach (Square move in moves) { if (move.IsOK() && board[move] == (sbyte)DefaultPieces.BlackKing) { result.Add(move); break; } } return(result); }