public void Generate()
        {
            var boxes = new Boxes(new List <Box> {
                new Box(Reward.Hundred, 1),
                new Box(Reward.Twenty, 2),
                new Box(Reward.Five, 5),
                new Box(Reward.ExtraLife, 1),
                new Box(Reward.GameOver, 3)
            });

            var additionalRewards = new List <AdditionalReward> {
                AdditionalReward.Five,
                AdditionalReward.Ten,
                AdditionalReward.Twenty,
                AdditionalReward.SecondChance
            };

            Generate(new GameWithProbability(), boxes, additionalRewards);
        }
        private void HandleAdditionalRewards(GameWithProbability currentGame, Boxes boxes, List <AdditionalReward> additionalRewards)
        {
            foreach (var additionalReward in additionalRewards)
            {
                var game = new GameWithProbability(currentGame);
                game.Add(new AdditionalRewardMove(additionalReward, new Fraction(1, additionalRewards.Count)));

                if (additionalReward == AdditionalReward.SecondChance)
                {
                    var newAdditionalRewards = new List <AdditionalReward>(additionalRewards);
                    newAdditionalRewards.Remove(additionalReward);

                    Generate(game, boxes, newAdditionalRewards);
                }
                else
                {
                    _games.Add(game);
                }
            }
        }
        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);
            }
        }
 public void Generate(Boxes boxes, List <AdditionalReward> additionalRewards)
 {
     Generate(new GameWithProbability(), boxes, additionalRewards);
 }
Exemplo n.º 5
0
 public Boxes(Boxes other)
 {
     _boxes = other.Select(b => new Box(b)).ToList();
 }