private void ScoreRegularFrames(ScoreCardFrame prevScoreCardFrame, ScoreCardFrame currScoreCardFrame, DeliveryInputViewModel deliveryInputViewModel)
        {
            if (currScoreCardFrame.FrameId == 0 &
                !currScoreCardFrame.FirstDeliveryMark.Equals(UserDeliveryMessages.STRIKE_DELIVERY_CODE) &&
                !currScoreCardFrame.SecondDeliveryMark.Equals(UserDeliveryMessages.SPARE_DELIVERY_CODE))
            {
                currScoreCardFrame.FrameCumulativeScore =
                    currScoreCardFrame.FirstDeliveryScore + currScoreCardFrame.SecondDeliveryScore;
                //return;
            }
            else if (!currScoreCardFrame.FirstDeliveryMark.Equals(UserDeliveryMessages.STRIKE_DELIVERY_CODE) &&
                     !currScoreCardFrame.SecondDeliveryMark.Equals(UserDeliveryMessages.SPARE_DELIVERY_CODE))
            {
                currScoreCardFrame.FrameCumulativeScore = prevScoreCardFrame.FrameCumulativeScore +
                                                          currScoreCardFrame.FirstDeliveryScore +
                                                          currScoreCardFrame.SecondDeliveryScore;
            }

            //if (prevScoreCardFrame.FirstDeliveryMark.Equals(UserDeliveryMessages.STRIKE_DELIVERY_CODE))
            //{
            //    prevScoreCardFrame.FrameCumulativeScore = prevScoreCardFrame.FirstDeliveryScore +
            //                                              currScoreCardFrame.FirstDeliveryScore +
            //                                              currScoreCardFrame.SecondDeliveryScore;
            //}
            //else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Spare)
            //{
            //    prevScoreCardFrame.FrameCumulativeScore = prevScoreCardFrame.FirstDeliveryScore +
            //                                              currScoreCardFrame.FirstDeliveryScore;
            //}
        }
 private void ScoreTenthFrame(ScoreCardFrame prevFrame, ScoreCardFrame tenthFrame, DeliveryInputViewModel deliveryInputViewModel)
 {
     tenthFrame.FrameCumulativeScore = prevFrame.FrameCumulativeScore +
                                       tenthFrame.FirstDeliveryScore +
                                       tenthFrame.SecondDeliveryScore +
                                       tenthFrame.BonusDeliveryScore;
 }
 private void MarkSecondDelivery(ScoreCardFrame scoreCardFrame, DeliveryInputViewModel deliveryInputViewModel)
 {
     if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.OpenFrame)
     {
         scoreCardFrame.SecondDeliveryMark  = UserDeliveryMessages.OPEN_FRAME_DELIVERY_CODE;
         scoreCardFrame.SecondDeliveryScore = 0;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Foul)
     {
         scoreCardFrame.SecondDeliveryScore = 0;
         scoreCardFrame.SecondDeliveryMark  = UserDeliveryMessages.FOUL_DELIVERY_CODE;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Spare)
     {
         //score the next time mark as /
         scoreCardFrame.SecondDeliveryMark = UserDeliveryMessages.SPARE_DELIVERY_CODE;
         int firstScore = scoreCardFrame.FirstDeliveryScore;
         scoreCardFrame.SecondDeliveryScore = 10 - firstScore;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Split)
     {
         //simply save the score and prepend pins down with S
         scoreCardFrame.SecondDeliveryMark =
             UserDeliveryMessages.SPLIT_DELIVERY_CODE + deliveryInputViewModel.SelectedPinsDownCount;
         scoreCardFrame.SecondDeliveryScore = deliveryInputViewModel.SelectedPinsDownCount;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.StandardRoll)
     {
         scoreCardFrame.SecondDeliveryScore = deliveryInputViewModel.SelectedPinsDownCount;
         scoreCardFrame.SecondDeliveryMark  = deliveryInputViewModel.SelectedPinsDownCount.ToString();
     }
 }
        public void SaveDelivery(ScoreCardViewModel scoreCardViewModel, DeliveryInputViewModel deliveryInputViewModel)
        {
            ScoreCardFrame currentFrame = scoreCardViewModel.ScoreCardRows[scoreCardViewModel.CurrentScoreCardRowIndex]
                                          .ScoreCardFrames[scoreCardViewModel.CurrentFrameId];

            ScoreCardFrame previousFrame = new ScoreCardFrame();

            if (scoreCardViewModel.CurrentFrameId > 0)
            {
                previousFrame = scoreCardViewModel.ScoreCardRows[scoreCardViewModel.CurrentScoreCardRowIndex]
                                .ScoreCardFrames[scoreCardViewModel.CurrentFrameId - 1];
            }

            ScoreCardFrame twoFramesBackFrame = new ScoreCardFrame();

            if (scoreCardViewModel.CurrentFrameId > 1)
            {
                twoFramesBackFrame = scoreCardViewModel.ScoreCardRows[scoreCardViewModel.CurrentScoreCardRowIndex]
                                     .ScoreCardFrames[scoreCardViewModel.CurrentFrameId - 2];
            }

            if (deliveryInputViewModel.CurrDeliveryInFrameIndex == 0 &&
                deliveryInputViewModel.FrameIndex < 9)
            {
                MarkFirstDelivery(currentFrame, deliveryInputViewModel);
            }
            else if (deliveryInputViewModel.CurrDeliveryInFrameIndex == 1 &&
                     deliveryInputViewModel.FrameIndex < 9)
            {
                MarkSecondDelivery(currentFrame, deliveryInputViewModel);
                ScorePrevFrameForStrikesAndSpares(twoFramesBackFrame, previousFrame, currentFrame, deliveryInputViewModel);
                ScoreRegularFrames(previousFrame, currentFrame, deliveryInputViewModel);
            }

            if (deliveryInputViewModel.FrameIndex == 9 &&
                deliveryInputViewModel.CurrDeliveryInFrameIndex == 0)
            {
                MarkFirstDelivery(currentFrame, deliveryInputViewModel);
            }
            else if (deliveryInputViewModel.FrameIndex == 9 &&
                     deliveryInputViewModel.CurrDeliveryInFrameIndex == 1)
            {
                MarkSecondDelivery(currentFrame, deliveryInputViewModel);
                if (deliveryInputViewModel.FrameIndex == 9 &&
                    deliveryInputViewModel.SelectedDeliveryCode != (int)FrameStatusEnum.Strike &&
                    deliveryInputViewModel.SelectedDeliveryCode != (int)FrameStatusEnum.Spare)
                {
                    ScoreTenthFrame(previousFrame, currentFrame, deliveryInputViewModel);
                    scoreCardViewModel.IsUserGameComplete = true;
                }
            }
            else if (deliveryInputViewModel.FrameIndex == 9 &&
                     deliveryInputViewModel.CurrDeliveryInFrameIndex == 2)
            {
                MarkTenthFrameBonusDeliveries(currentFrame, deliveryInputViewModel);
                ScoreTenthFrame(previousFrame, currentFrame, deliveryInputViewModel);
                scoreCardViewModel.IsUserGameComplete = true;
            }
        }
 private void ScorePrevFrameForStrikesAndSpares(ScoreCardFrame twoFramesBackFrame,
                                                ScoreCardFrame prevScoreCardFrame,
                                                ScoreCardFrame currScoreCardFrame,
                                                DeliveryInputViewModel deliveryInputViewModel)
 {
     if (prevScoreCardFrame.SecondDeliveryMark.Equals(UserDeliveryMessages.STRIKE_DELIVERY_CODE))
     {
         prevScoreCardFrame.FrameCumulativeScore = twoFramesBackFrame.FrameCumulativeScore
                                                   + 10
                                                   + currScoreCardFrame.FirstDeliveryScore
                                                   + currScoreCardFrame.SecondDeliveryScore;
     }
     else if (prevScoreCardFrame.SecondDeliveryMark.Equals(UserDeliveryMessages.SPARE_DELIVERY_CODE))
     {
         prevScoreCardFrame.FrameCumulativeScore = twoFramesBackFrame.FrameCumulativeScore +
                                                   10 + currScoreCardFrame.FirstDeliveryScore;
     }
 }
 private void MarkFirstDelivery(ScoreCardFrame cardFrame, DeliveryInputViewModel deliveryInputViewModel)
 {
     if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.OpenFrame)
     {
         cardFrame.FirstDeliveryMark  = UserDeliveryMessages.OPEN_FRAME_DELIVERY_CODE;
         cardFrame.FirstDeliveryScore = 0;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Foul)
     {
         cardFrame.FirstDeliveryScore = 0;
         cardFrame.FirstDeliveryMark  = UserDeliveryMessages.FOUL_DELIVERY_CODE;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Split)
     {
         cardFrame.FirstDeliveryMark =
             UserDeliveryMessages.SPLIT_DELIVERY_CODE + deliveryInputViewModel.SelectedPinsDownCount;
         cardFrame.FirstDeliveryScore = deliveryInputViewModel.SelectedPinsDownCount;
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.Strike)
     {
         if (deliveryInputViewModel.FrameIndex == 9)
         {
             cardFrame.FirstDeliveryScore = 10;
             cardFrame.FirstDeliveryMark  = UserDeliveryMessages.STRIKE_DELIVERY_CODE;
         }
         else
         {
             cardFrame.SecondDeliveryScore = 10;
             cardFrame.SecondDeliveryMark  = UserDeliveryMessages.STRIKE_DELIVERY_CODE;
         }
     }
     else if (deliveryInputViewModel.SelectedDeliveryCode == (int)FrameStatusEnum.StandardRoll)
     {
         cardFrame.FirstDeliveryScore = deliveryInputViewModel.SelectedPinsDownCount;
         cardFrame.FirstDeliveryMark  = deliveryInputViewModel.SelectedPinsDownCount.ToString();
     }
 }