Example #1
0
        private static int CalculateFrameScore(Frame frame, List<Frame> frames)
        {
            int frameScore = 0;

            //frame 10 allows for a 3rd bonus ball
            if (IsLastFrame(frame))
            {
                frameScore = CalculateLastFrame(frame);
            }
            else
            {
                //spare
                if (IsSpare(frame))
                {
                    frameScore = GameConfiguration.NUMBER_OF_PINS + getNextFrame(frame, frames).Ball_1.Result;
                }
                //strike
                else if (IsStrike(frame))
                {
                    //the max score for a single frame is 30 pins
                    frameScore = Math.Min(GameConfiguration.MAX_FRAME_SCORE, GameConfiguration.NUMBER_OF_PINS + CalculateFrameScore(getNextFrame(frame, frames), frames));
                }
                //not all pins knocked down
                else
                {
                    frameScore = frame.Ball_1.Result + frame.Ball_2.Result;
                }
            }

            return frameScore;
        }
Example #2
0
        private static Frame getNextFrame(Frame currentFrame, List<Frame> frames)
        {
            var nextFrames = from f in frames
                        where f.FrameNumber == currentFrame.FrameNumber + 1
                        select f;

            return nextFrames.First();
        }
Example #3
0
 private static bool IsStrike(Frame frame)
 {
     return frame.Ball_1.Result == GameConfiguration.NUMBER_OF_PINS;
 }
Example #4
0
 private static bool IsSpare(Frame frame)
 {
     return frame.Ball_1.Result + frame.Ball_2.Result == GameConfiguration.NUMBER_OF_PINS && frame.Ball_1.Result != GameConfiguration.NUMBER_OF_PINS;
 }
Example #5
0
 private static bool IsLastFrame(Frame frame)
 {
     return frame.FrameNumber == GameConfiguration.LAST_FRAME;
 }
Example #6
0
 private static int CalculateLastFrame(Frame frame)
 {
     return frame.Ball_1.Result + frame.Ball_2.Result + frame.Ball_3.Result;
 }