Пример #1
0
        private static Rotation IdentifyRotation(EventRegistration player, GameAssignment swap)
        {
            if (swap.CanAddPlayer())
            {
                return(new Rotation(RotationType.MovePlayer));
            }
            else
            {
                foreach (var p in swap.Players)
                {
                    if (p.PrefersGameOverCurrentAssignment(player.Assignment.Game))
                    {
                        return(new Rotation(RotationType.TradePlayers)
                        {
                            PlayerTwo = p
                        });
                    }
                }
            }

            return(Rotation.NoRotation);
        }
Пример #2
0
        private static void FixInvalidGames(List <GameAssignment> assignments)
        {
            for (int i = 0; i < assignments.Count; i++)
            {
                GameAssignment a = assignments[i];
                if (a.Players.Count == 0)
                {
                    assignments.Remove(a);
                    i--;
                }
            }

            assignments.Sort((x, y) => x.GetTotalSatisfaction().CompareTo(y.GetTotalSatisfaction()));
            assignments.Reverse();

            for (int i = 0; i < assignments.Count; i++)
            {
                GameAssignment a = assignments[i];
                if (!a.IsValid())
                {
                    var unassignedPlayers = new List <EventRegistration>();

                    Debug.WriteLine("Removing Players from Invalid Assignment: " + a.ToString());
                    foreach (var p in a.Players)
                    {
                        p.Assignment = null;
                        unassignedPlayers.Add(p);
                    }

                    assignments.Remove(a);
                    i--;

                    for (int j = i; j < assignments.Count; j++)
                    {
                        GameAssignment potentialNewAssignment = assignments[j];
                        for (int p = 0; p < unassignedPlayers.Count; p++)
                        {
                            EventRegistration unassigned = unassignedPlayers[p];
                            if (potentialNewAssignment.CanAddPlayer() &&
                                unassigned.HasPreferenceForGame(potentialNewAssignment.Game))
                            {
                                Debug.WriteLine("Moving unassigned player '{0}' to preferred game:{1}", unassigned.User.Name, potentialNewAssignment.Game);

                                potentialNewAssignment.Players.Add(unassigned);
                                unassigned.Assignment = potentialNewAssignment;
                                unassignedPlayers.Remove(unassigned);
                                p--;
                            }
                        }
                    }

                    foreach (EventRegistration p in unassignedPlayers)
                    {
                        foreach (var assignment in assignments)
                        {
                            if (assignment.CanAddPlayer())
                            {
                                Debug.WriteLine("Moving unsatisfied player '{0}' to game:{1} (sorry!)", p.User.Name, assignment.Game);
                                assignment.Players.Add(p);
                                p.Assignment = assignment;
                                break;
                            }
                        }
                    }
                }
            }
        }