Beispiel #1
0
 private static Frame GetLastNotFullFrame(Frames frames)
 {
     foreach (Frame f in frames)
     {
         if (!FullFrameRule.IsFull(f)) return f;
     }
     throw new Exception();
 }
Beispiel #2
0
 private Frames RollMany(int maxFrameCount, params int[] pins)
 {
     Frames frames = new Frames(maxFrameCount);
     foreach (int pin in pins)
     {
         frames = RollService.Roll(frames, pin);
     }
     return frames;
 }
Beispiel #3
0
 private static int CalcBonus(Frames frames, int index)
 {
     int sum = 0;
     for (int i = 0; i < index + 1; i++)
     {
         sum += CalcBonusFrame(frames[i], frames);
     }
     return sum;
 }
Beispiel #4
0
 internal static int Calc(Frames frames)
 {
     RemainCalculatorCore core = new RemainCalculatorCore();
     foreach (int pin in frames.GetPins())
     {
         core.Apply(pin);
     }
     return core.GetRemain();
 }
Beispiel #5
0
        private static int CalcBonusFrame(Frame f, Frames frames)
        {
            int bonus = 0;
            int bonusCount = GetBonusCount(f);

            foreach (int pins in GetPinsAfterFrame(f, frames))
            {
                if (bonusCount == 0) return bonus;
                bonus += pins;
                bonusCount--;
            }
            return bonus;
        }
Beispiel #6
0
 private static IEnumerable<int> GetPinsAfterFrame(Frame target, Frames frames)
 {
     bool found = false;
     foreach (Frame f in frames)
     {
         if (target == f)
         {
             found = true;
             continue;
         }
         if (!found) continue;
         foreach (int pin in f.GetPins()) yield return pin;
     }
 }
Beispiel #7
0
 public static void Save(Frames frames, string path, IWriteFile fileSystem)
 {
     try
     {
         fileSystem.Open(path);
         foreach (int pin in frames.GetPins())
         {
             fileSystem.Write(pin.ToString() + ",");
         }
     }
     finally
     {
         fileSystem.Close();
     }
 }
Beispiel #8
0
 public static Frames Replace(Frames old, Frame from, Frame to)
 {
     Frames frames = new Frames(old._frames.Count);
     for (int i = 0; i < old._frames.Count; i++)
     {
         if (old._frames[i] == from)
         {
             frames._frames[i] = to;
         }
         else
         {
             frames._frames[i] = old._frames[i];
         }
     }
     return frames;
 }
Beispiel #9
0
 public static Frames Load(string path, IReadFile readFile)
 {
     Frames frames = new Frames(FrameCountRule.GetCount());
     try
     {
         readFile.Open(path);
         string content = readFile.ReadLine();
         foreach (string str in content.Split(','))
         {
             if (str == "") break;
             frames = RollService.Roll(frames, int.Parse(str));
         }
     }
     finally
     {
         readFile.Close();
     }
     return frames;
 }
Beispiel #10
0
 public static Score Calc(Frames frames)
 {
     return CalcAt(frames, FrameCountRule.GetCount() - 1);
 }
Beispiel #11
0
 public void Roll(int p)
 {
     _frames = RollService.Roll(_frames, p);
 }
Beispiel #12
0
 private static int GetRemainPins(Frames frames)
 {
     return RemainCalculator.Calc(frames);
 }
Beispiel #13
0
 public static Frames Roll(Frames frames, int p)
 {
     Frame f = GetLastNotFullFrame(frames);
     if (!Acceptable(frames, p)) throw new Exception();
     return Frames.Replace(frames, f, Frame.Append(f, new Roll(p)));
 }
Beispiel #14
0
 public static bool IsEnd(Frames frames)
 {
     return FullFrameRule.IsFull(frames[FrameCountRule.GetCount() - 1]);
 }
Beispiel #15
0
 public static bool Acceptable(Frames frames, int p)
 {
     if (p < 0) return false;
     return GetRemainPins(frames) >= p;
 }
Beispiel #16
0
 internal void SetFrames(Frames frames)
 {
     _frames = frames;
 }
Beispiel #17
0
 public static Score CalcAt(Frames frames, int index)
 {
     return new Score(CalcBase(frames, index) + CalcBonus(frames, index));
 }