public (string, Mission) BuildNewMissionString(GameSettings settings, Mission previous) { var rng = new Random(); var missionCount = Missions.Count(); var selectedMission = Missions.ElementAt(rng.Next(0, missionCount)); if (selectedMission == previous) { return(BuildNewMissionString(settings, previous)); } var maxSelection = settings.Players.Count() - (selectedMission.SubjectCount - 1); // using ToList to get a NEW list without shuffling the original list. var players = settings.Players.ToList().OrderBy(x => rng.Next()); // Get correct amount of random players, and shuffle selection var subjects = settings.Players.GetRange(rng.Next(0, maxSelection), selectedMission.SubjectCount).OrderBy(x => rng.Next()); var consequence = ""; switch (settings.Difficulty) { default: case Difficulty.Normal: if (rng.Next(0, 2) == 1) { consequence = selectedMission.FinishesGlass; } else { consequence = string.Format(selectedMission.TakesDrinks, rng.Next(1, 5)); } break; case Difficulty.Drunk: consequence = selectedMission.FinishesGlass; break; case Difficulty.Sober: consequence = string.Format(selectedMission.TakesDrinks, rng.Next(2, 5)); break; } return(string.Format(selectedMission.MissionText, subjects.ToArray()) + " " + consequence, selectedMission); }