public bool Roll(int roll) { Rolls.Add(roll); Score += roll; if (IsStrike || IsSpare) { if (IsLast && Rolls.Count() == MaxRollsPerFrame) { return(false); } } if (Previous != null) { if (Previous.IsSpare && Rolls.Count == 1) { Previous.AddSpareScore(roll); } else if (Previous.IsStrike) { Previous.AddSpareScore(roll); } var prePrevious = Previous.Previous; if (!IsLast && prePrevious != null && prePrevious.IsStrike) { prePrevious.AddSpareScore(roll); } } return(!IsStrike && !IsLast && Rolls.Count < 2); }