Пример #1
0
        private void TryToBuildPartyFromNextTicket(AdventureTicket nextTicket)
        {
            if (nextTicket.Players.Count == partySize)
            {
                FormAdventurePartyAndRemoveTickets(nextTicket.Adventures.First(), nextTicket);
            }

            List <AdventureTicket> matches = new List <AdventureTicket>();

            foreach (var adventure in nextTicket.Adventures)
            {
                foreach (var at in tickets.Values)
                {
                    bool result = at.Equals(nextTicket);
                    if (!at.Equals(nextTicket) &&
                        at.Adventures.Contains(adventure) &&
                        !nextTicket.IsDuplicateCharClassType(at.Players))
                    {
                        matches.Add(at);
                    }
                }

                int match = 0;
                foreach (var m in matches)
                {
                    match += m.Players.Count;
                }

                if (match >= partySize - nextTicket.Players.Count)
                {
                    matches.Add(nextTicket);
                    FormAdventurePartyAndRemoveTickets(adventure, matches.ToArray());
                }
            }
        }
Пример #2
0
        private string Queue(IPlayer player, IList <IAdventure> adventures)
        {
            var ticket = new AdventureTicket(adventures, player);

            tickets.Add(ticket.TimeIn, ticket);
            TryToBuildParty();
            return(string.Format("You have joined the group finder! The estimated " +
                                 "waiting time is {0} mins", GetAverageWaitTime().Minutes));
        }
Пример #3
0
            public override bool Equals(object o)
            {
                if (o == null || !(o is AdventureTicket))
                {
                    return(false);
                }

                AdventureTicket at = (AdventureTicket)o;

                return(this.TimeIn.Equals(at.TimeIn) &&
                       this.Players.Equals(at.Players) &&
                       this.Adventures.Equals(at.Adventures));
            }
Пример #4
0
        private string Queue(IParty party, IList <IAdventure> adventures)
        {
            if (adventures.Any(AdventureUtils.GetPartySizeRequirementPredicate(party)))
            {
                IEnumerable <IAdventure> matches = adventures
                                                   .Where(AdventureUtils.GetPartySizeRequirementPredicate(party));
                Random     rnd       = new Random();
                IAdventure adventure = matches.ElementAt(rnd.Next(0, matches.Count()));
                adventureQueue.Add(new KeyValuePair <IParty, IAdventure>(party, adventure));
                return(string.Format("Your party has joined the adventure queue for {0}, which " +
                                     "will start shortly.", adventure.Name));
            }

            var ticket = new AdventureTicket(adventures, party.Players.ToArray());

            tickets.Add(ticket.TimeIn, ticket);
            TryToBuildParty();
            return(string.Format("You have joined the group finder! The estimated " +
                                 "waiting time is {0} mins", GetAverageWaitTime().Minutes));
        }