private IEnumerable<Move> GetMoves(Bitboard b, int offsetFrom) { foreach (var to in b.Squares) { Square from = to - offsetFrom; b = b.Except(to); if (to >= 56) { yield return new Move(from, to, MoveTypes.PawnToQueenPromotion); yield return new Move(from, to, MoveTypes.PawnToRookPromotion); yield return new Move(from, to, MoveTypes.PawnToBishopPromotion); yield return new Move(from, to, MoveTypes.PawnToKnightPromotion); } else { yield return new Move(from, to); } } }