public override System.Collections.Generic.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 endPositions = new List<Tuple<int, int>>();
GetVerticalMoves(board, column, row, endPositions);
GetHorizontalMoves(board, row, column, endPositions);
GetDiagonalMoves(board, row, column, endPositions);
legalMoves.AddRange(endPositions.Select(p => SetupNewMove(p.Item1, p.Item2)));
return legalMoves;
}