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