private List <Square> GetSquaresCanAttack(Board board, int moveDirection) { Square mySquare = board.FindPiece(this); List <Square> availableMoves = new List <Square>(); for (int colOffset = -1; colOffset < 2; colOffset += 2) { Square captureSquare = mySquare + new MoveOffset(moveDirection, colOffset); if (BoardQuery.IsWithinBounds(captureSquare) && BoardQuery.IsOppositeColourOnSquares(board, mySquare, captureSquare)) { availableMoves.Add(captureSquare); } } return(availableMoves); }
private List <Square> GetSquaresEnPassant(Board board, int moveDirection) { Square mySquare = board.FindPiece(this); List <Square> availableMoves = new List <Square>(); for (int colOffset = -1; colOffset < 2; colOffset += 2) { Square sidewaysSquare = mySquare + new MoveOffset(0, colOffset); if (BoardQuery.IsWithinBounds(sidewaysSquare) && BoardQuery.IsOppositeColourOnSquares(board, mySquare, sidewaysSquare)) { Square previousSquare = sidewaysSquare + new MoveOffset(moveDirection * 2, 0); if (board.PreviousBoard[previousSquare.Row, previousSquare.Col] == board.GetPiece(sidewaysSquare)) { availableMoves.Add(sidewaysSquare + new MoveOffset(moveDirection, 0)); } } } return(availableMoves); }