/// <summary> /// Processes each char in the Bonus string, /// and adds those values to the corresponding Throws (to the Last Frame) /// </summary> /// <param name="bonusString"></param> /// <param name="lastFrame"></param> /// <param name="startingPinsNumber"></param> internal void ProcessBonusStringToLastFrame(string bonusString, Frame lastFrame, int startingPinsNumber) { if (!lastFrame.IsFinalFrame) { throw new ArgumentException("It seems that you're trying to process Bonus while not on the Last Frame. Please check."); } char[] bonusCharArr = bonusString.ToCharArray(); ThrowCharProcessor _throwProcessor = new ThrowCharProcessor(); if (lastFrame.IsStrike) { if (bonusCharArr.Length > 2) { throw new ArgumentException($"The number of bonus throws {bonusCharArr.Length}, is over allowed for the Last Strike. Please check."); } foreach (char c in bonusCharArr) { _throwProcessor.ConvertCharIntoDigitalValueForThrow(c, lastFrame, startingPinsNumber); } } else if (lastFrame.IsSpare) { if (bonusCharArr.Length != 1) { throw new ArgumentException($"The number of bonus throws {bonusCharArr.Length}, is over allowed for the Last Spare. Please check."); } _throwProcessor.ConvertCharIntoDigitalValueForThrow(bonusCharArr[0], lastFrame, startingPinsNumber); } }
/// <summary> /// Processes each frame-string in the frames string-array, to determine the pins count for each frame /// and adds those values to the corresponding Frame (in the Frames List) /// </summary> /// <param name="frame"></param> /// <param name="framesList"></param> /// <param name="maxFramesNumber"></param> /// <param name="startingPinsNumber"></param> internal void ProcessFrameStringIntoFrameProperties(string frame, List <Frame> framesList, int maxFramesNumber, int startingPinsNumber) { char[] frameCharArr = frame.ToCharArray(); foreach (char c in frameCharArr) { ThrowCharProcessor _throwProcessor = new ThrowCharProcessor(); _throwProcessor.ConvertCharIntoDigitalValueForThrow(c, framesList.Last(), startingPinsNumber); _throwProcessor.SetThrowTypeBasedOnThrowChar(c, framesList.Last()); _throwProcessor.SetFrameClosedFlagBasedOnThrowChar(c, framesList.Last()); SetIsOverFlagForTheFrame(framesList.Last()); SetIsFinalFlagForTheFrame(framesList, maxFramesNumber); CalculateKnockedDownPins(framesList.Last(), startingPinsNumber); } ValidateFrame(framesList.Last()); }