I can’t understand why ten-pin bowling has such a bizarre scoring system.
Here’s the code, for reference:
//return a list of individual frame scores
public static List<int> ScoreFrames (List<int> rolls) {
List<int> frameList = new List<int> ();
int currentRoll = 1;
int firstBowlOfFrameScore = 0;
int arrayPos = 0;
foreach (int roll in rolls) {
if (currentRoll % 2 == 0) {
//SECOND BOWL
if (firstBowlOfFrameScore + roll == 10) {
//spare
//LOOK AHEAD AND SCORE IT STRAIGHTAWAY IF POSSIBLE
if (arrayPos < rolls.Count - 1) {
frameList.Add (rolls [arrayPos + 1] + 10);
}
currentRoll += 1;
} else {
//non-spare
frameList.Add (firstBowlOfFrameScore + roll);
currentRoll += 1;
}
} else if (currentRoll % 2 == 1) {
//FIRST BOWL
if (roll == 10) {
//strike
//LOOK AHEAD AND SCORE IT STRAIGHTAWAY IF POSSIBLE
if (currentRoll == 19 && rolls.Count == arrayPos + 3) {//stike in final frame exception
frameList.Add (rolls[arrayPos + 1] + rolls[arrayPos + 2] + 10);
return frameList;
} else if (arrayPos < rolls.Count - 2) {
frameList.Add (rolls[arrayPos + 1] + rolls[arrayPos + 2] + 10);
}
currentRoll += 2;
} else {
//non-strike
firstBowlOfFrameScore = roll;
currentRoll += 1;
}
}
arrayPos++;
}
return frameList;
}