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); } }