private static void GetEnPassantPositions(ref List <ChessBoard> result, ChessBoard board, Square currentposition) { ChessBoard tempboard = board.ShallowCopy(); bool CheckEnPassant = DefaultInfo.EnPassantPossibleCapture.rank == currentposition.rank - 1 && (DefaultInfo.EnPassantPossibleCapture.file == (char)(currentposition.file + 1) || DefaultInfo.EnPassantPossibleCapture.file == (char)(currentposition.file - 1)); if (CheckEnPassant) { tempboard = Piece.PerformMove(board, currentposition, DefaultInfo.EnPassantPossibleCapture); tempboard[DefaultInfo.EnPassantPossibleCapture.file, DefaultInfo.EnPassantPossibleCapture.rank + 1] = 0; result = Piece.AddNewPosition(result, tempboard, false); } }
public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank) { List <ChessBoard> result = new List <ChessBoard>(); ChessBoard tempboard; List <Square> moves = new List <Square>(); Square current = new Square(file, rank); WhitePiece.GetDiagonalDestinations(board, ref moves, current, 1, 1); WhitePiece.GetDiagonalDestinations(board, ref moves, current, 1, -1); WhitePiece.GetDiagonalDestinations(board, ref moves, current, -1, 1); WhitePiece.GetDiagonalDestinations(board, ref moves, current, -1, -1); foreach (Square move in moves) { tempboard = Piece.PerformMove(board, current, move); result = Piece.AddNewPosition(result, tempboard, true); } return(result); }
public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank) { List <ChessBoard> result = new List <ChessBoard>(); ChessBoard tempboard; Square current = new Square(file, rank); Square[] moves = Piece.GetSimpleKingMoveDestinations(current); foreach (Square move in moves) { if (move.IsOK() && board[move] >= 0) { tempboard = Piece.PerformMove(board, current, move); result = Piece.AddNewPosition(result, tempboard, false); } } GetQueenCastlingPosition(board, file, rank, result, current); GetKingCastlingPosition(board, file, rank, result, current); return(result); }
public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank) { List <ChessBoard> result = new List <ChessBoard>(); ChessBoard tempboard; List <Square> moves = new List <Square>(); Square current = new Square(file, rank); WhitePiece.GetVerticalUpDestinations(board, moves, current); WhitePiece.GetVerticalDownDestinations(board, moves, current); WhitePiece.GetHorizontalLeftDestinations(board, moves, current); WhitePiece.GetHorizontalRightDestinations(board, moves, current); Console.WriteLine(moves.Count); foreach (Square move in moves) { tempboard = Piece.PerformMove(board, current, move); result = Piece.AddNewPosition(result, tempboard, true); } Console.WriteLine(result.Count); return(result); }
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 <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank) { List <ChessBoard> result = new List <ChessBoard>(); ChessBoard tempboard = board.ShallowCopy(); Square currentposition = new Square(file, rank); if (DefaultInfo.WhiteEnPassantEndangered) { GetEnPassantPositions(ref result, board, currentposition); } if (rank == 7 && board[file, rank - 1] == 0 && board[file, rank - 2] == 0) { tempboard = Piece.PerformMove(board, currentposition, new Square(file, rank - 2)); result = Piece.AddNewPosition(result, tempboard, false); } if (board[file, rank - 1] == 0) { tempboard = Piece.PerformMove(board, currentposition, new Square(file, rank - 1)); result = Piece.AddNewPosition(result, tempboard, false); } if (file >= 'a' && file <= 'g' && board[(char)(file + 1), rank - 1] > 0) { tempboard = Piece.PerformMove(board, currentposition, new Square((char)(file + 1), rank - 1)); result = Piece.AddNewPosition(result, tempboard, false); } if (file >= 'b' && file <= 'h' && board[(char)(file - 1), rank - 1] > 0) { tempboard = Piece.PerformMove(board, currentposition, new Square((char)(file - 1), rank - 1)); result = Piece.AddNewPosition(result, tempboard, false); } if (rank > 2 || result.Count == 0) { return(result); } else { return(GetPawnPromotionPositions(file, result, tempboard)); } }