private void Generate(GameWithProbability currentGame, Boxes boxes, List <AdditionalReward> additionalRewards)
        {
            foreach (var box in boxes)
            {
                var game            = new GameWithProbability(currentGame);
                var moveProbability = new Fraction(box.Count, boxes.CountBoxes());
                game.Add(new RewardMove(box.Reward, moveProbability));

                var newBoxes = new Boxes(boxes);
                newBoxes.RemoveBox(box.Reward);

                if (box.Reward == Reward.GameOver && !HasExtraLife(game.Moves))
                {
                    HandleAdditionalRewards(game, newBoxes, additionalRewards);
                    continue;
                }

                Generate(game, newBoxes, additionalRewards);
            }
        }