public int CalculateScore(int[] rolls)
{
_rolls = rolls;
var score = 0;
for (var roll = 0; roll < _rolls.Length; roll += 2)
{
var frame = new Frame(rolls[roll], rolls[roll + 1]);
var additionalScore = 0;
if (frame.IsStrike() && !IsExtraRoll(roll + 2))
{
additionalScore = FrameScore(roll, 2);
if (IsStrike(roll + 2) && !IsExtraRoll(roll + 2))
{
additionalScore += _rolls[roll + 4];
}
}
if (IsSpare(roll))
{
additionalScore = _rolls[roll + 2];
}
score += FrameScore(roll) + additionalScore;
}
return(score);
}