public override IEnumerable<Move> GetValidMoves(Square[][] board)
{
var legalMoves = new List<Move>();
if (!CurrentColumn.HasValue || !CurrentRow.HasValue || !Alive) return legalMoves;
var column = CurrentColumn.Value;
var row = CurrentRow.Value;
var newRow = row + LegalDirectionByTeam();
var openingMove = SetupNewMove(newRow + 1, column);
var normalMove = SetupNewMove(newRow, column);
if (board[normalMove.EndRow][normalMove.EndColumn].ChessPiece == null)
{
legalMoves.Add(normalMove);
if (ValidOpeningPushWithNoDefender(board, openingMove))
legalMoves.Add(openingMove);
}
if (column - 1 >= 0)
{
var attackLeft = SetupNewMove(newRow, column - 1);
var leftOccupant = board[attackLeft.EndRow][attackLeft.EndColumn].ChessPiece;
if (leftOccupant != null && leftOccupant.Team != Team)
legalMoves.Add(attackLeft);
}
if (column + 1 < 8)
{
var attackRight = SetupNewMove(newRow, column + 1);
var rightOccupant = board[attackRight.EndRow][attackRight.EndColumn].ChessPiece;
if (rightOccupant != null && rightOccupant.Team != Team)
legalMoves.Add(attackRight);
}
return legalMoves;
}