public static void CreateAllFramesFromString(this ScoreCard scoreCard) { var stringFrameScoreArray = scoreCard.StringGame.Split('|').Take(11).ToArray(); for (var frameNumber = 0; frameNumber < stringFrameScoreArray.Length; frameNumber++) { var stringFrame = stringFrameScoreArray[frameNumber]; var currentFrame = CreateFrame(stringFrame, frameNumber); scoreCard.Frames.Add(currentFrame); } }
public static void GetTotalFrameScoreIncludingBonus(this ScoreCard scoreCard) { scoreCard.Score = 0; foreach (var currentFrame in scoreCard.Frames) { if (!currentFrame.IsBonusFrame) { scoreCard.ScoreCurrentFrame(currentFrame); } } }
public static int NextScoringThrow(this ScoreCard scoreCard, int currentFrame) { var concurrentScores = new List <int>(); var remainingFrames = scoreCard.Frames.Where(e => e.FrameNumber > currentFrame).ToList(); remainingFrames.ForEach(frame => { concurrentScores.Add(frame.FirstThrow.Score); concurrentScores.Add(frame.SecondThrow.Score); }); return(concurrentScores.FirstOrDefault()); }
private static void ScoreCurrentFrame(this ScoreCard scoreCard, Frame currentFrame) { if (currentFrame.HasStrike) { scoreCard.ScoreStrike(currentFrame); } else if (currentFrame.SecondThrow.StringThrow.IsSpare()) { scoreCard.ScoreSpare(currentFrame); } else { scoreCard.Score += currentFrame.FrameScore; } }
public static int NextTwoScoringThrows(this ScoreCard scoreCard, int currentFrame) { var scoreToAdd = 0; var remainingFrames = scoreCard.Frames.Where(e => e.FrameNumber > currentFrame).OrderBy(frame => frame.FrameNumber).ToList(); foreach (var frame in remainingFrames) { scoreToAdd += frame.FirstThrow.Score; if (frame.HasStrike && !frame.IsBonusFrame) { scoreToAdd += remainingFrames[1].FirstThrow.Score; } else { scoreToAdd += frame.SecondThrow.Score; } break; } return(scoreToAdd); }
public static void ReplaceDoublePipeInStringGame(this ScoreCard scoreCard, string stringGame) { scoreCard.StringGame = stringGame.Replace("||", "|"); }
private static void ScoreStrike(this ScoreCard scoreCard, Frame currentFrame) { var score = currentFrame.FrameScore + scoreCard.NextTwoScoringThrows(currentFrame.FrameNumber); scoreCard.Score += score; }
private static void ScoreSpare(this ScoreCard scoreCard, Frame currentFrame) { scoreCard.Score += currentFrame.FrameScore + scoreCard.NextScoringThrow(currentFrame.FrameNumber); }