public void InitGameScoring() { status = GameStatus.waitingStart; cell = 0; shot = 0; scoreframes = new ScoringFrame[cellCount]; for (int i = 0; i < cellCount; ++i) { scoreframes [i] = new ScoringFrame(false); } scoreframes [cellCount - 1] = new ScoringFrame(true); LinkScoreFrameToTextField(); }
public void CalculateScore() { totalScore = 0; for (int i = 0; i <= cell; ++i) { ScoringFrame frame = scoreframes [i]; if (frame.hasScore) { continue; } if (i < cellCount - 1) { if (frame.scores [0] == 10) { //current frame strike if (scoreframes [i + 1].scores [0] == -1) { return; } else if (scoreframes [i + 1].scores [0] == 10) { //next frame is strike if (i + 1 == cellCount - 1) { //next frame is last frame if (scoreframes [i + 1].scores [1] == -1) { return; } else { totalScore += 20 + scoreframes [i + 1].scores [1]; } } else { //next frame is not last frame if (scoreframes [i + 2].scores [0] == -1) { return; } else { totalScore += 20 + scoreframes [i + 2].scores [0]; } } } else if (scoreframes [i + 1].scores [0] > -1 && scoreframes [i + 1].scores [1] > -1) { //next frame is not strike but has scores totalScore += 10 + scoreframes [i + 1].scores [0] + scoreframes [i + 1].scores [1]; } else { return; } frame.showScore(totalScore); } else if (frame.scores [1] > -1 && frame.scores [0] + frame.scores [1] == 10) { //current frame spare if (scoreframes [i + 1].scores [0] == -1) { return; } else { totalScore += 10 + scoreframes [i + 1].scores [0]; } frame.showScore(totalScore); } else if (frame.scores [1] > -1) { totalScore += frame.scores [0] + frame.scores [1]; frame.showScore(totalScore); } else { return; } } else { if (frame.scores [1] > -1 && frame.scores [0] + frame.scores [1] < 10) { totalScore += frame.scores [0] + frame.scores [1]; frame.showScore(totalScore); } else if (frame.scores [2] > -1) { totalScore += frame.scores [0] + frame.scores [1] + frame.scores [2]; frame.showScore(totalScore); } } } }