Example #1
0
        private async void NewGame(Chat c)
        {
            if (c.Id != Admin)
            {
                return;
            }

            List <Chat> localMembers;

            lock (Members)
            {
                if (Members.Count > CurrentConfiguration.Sum(x => (int)x))
                {
                    Program.Bot.SendTextMessageAsync(c.Id, "Недостаточно карт. Невозможно начать новую игру.");
                    return;
                }
                if (CurrentConfiguration.Sum(x => (int)x) - Members.Count >=
                    CurrentConfiguration.Skip(2).Take(2).Sum(x => (int)x))
                {
                    Program.Bot.SendTextMessageAsync(c.Id,
                                                     "Количество оставшихся карт больше, чем количество плохих ролей. Невозможно начать новую игру.");
                    return;
                }
                localMembers = new List <Chat>(Members);
            }

            var localMembers2 = new List <Chat>(localMembers);
            var rnd           = new Random(DateTime.Now.Millisecond);

            roles = new Dictionary <long, Role>(localMembers.Count);

            var leader = rnd.Next(0, localMembers.Count);

            roles.Add(localMembers[leader].Id, Role.Ведущий);
            localMembers.RemoveAt(leader);

            var rolesBag = new List <Role>();

            for (var i = 1; i < CurrentConfiguration.Length; i++)
            {
                for (var j = 0; j < CurrentConfiguration[i]; j++)
                {
                    rolesBag.Add((Role)i);
                }
            }

            while (localMembers.Count > 0)
            {
                var x = rnd.Next(0, rolesBag.Count);
                roles.Add(localMembers[0].Id, rolesBag[x]);
                localMembers.RemoveAt(0);
                rolesBag.RemoveAt(x);
            }

            remainingRoles = rolesBag;

            var markup = new ReplyKeyboardMarkup(new KeyboardButton[] { Strings.ShowMeRole }, true);

            foreach (var chat in localMembers2)
            {
                Program.Bot.SendTextMessageAsync(chat.Id, "Новая игра началась!",
                                                 replyMarkup: markup);
            }
        }