示例#1
0
        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);
        }