Exemple #1
0
        public List <DisplayTeam> FairTeams(IEnumerable <Guid> selectedPlayers)
        {
            random = new Random();
            var selectedPlayersList = selectedPlayers.ToList();
            var shuffled            = selectedPlayers;

            if (selectedPlayers.Count() < 4)
            {
                return(new List <DisplayTeam>());
            }
            if (selectedPlayers.Count() > 4)
            {
                shuffled = Shuffle(selectedPlayers);
            }
            var matchup       = new List <DisplayTeam>();
            var minDifference = 10000;
            var minPerm       = Enumerable.Empty <Guid>();

            foreach (var perm in permute4(shuffled))
            {
                var blueTeam = teams.FirstOrDefault(t => (t.DefenseID == perm[0]) && (t.OffenseID == perm[1]));
                var redTeam  = teams.FirstOrDefault(t => (t.DefenseID == perm[2]) && (t.OffenseID == perm[3]));
                if ((blueTeam == null))
                {
                    blueTeam = new DisplayTeam
                    {
                        DefenseName = playerRetriever.GuidToName(perm[0]),
                        OffenseName = playerRetriever.GuidToName(perm[1]),
                        Rank        = ELO.EloHandler.StartingScore
                    };
                }
                if ((redTeam == null))
                {
                    redTeam = new DisplayTeam
                    {
                        DefenseName = playerRetriever.GuidToName(perm[2]),
                        OffenseName = playerRetriever.GuidToName(perm[3]),
                        Rank        = ELO.EloHandler.StartingScore
                    };
                }
                var difference = Math.Abs(blueTeam.Rank + 100 - redTeam.Rank); //Blue Team with blue advantage minus redd rank
                if (difference < minDifference)
                {
                    minDifference = difference;
                    matchup       = new List <DisplayTeam> {
                        blueTeam, redTeam
                    };
                    minPerm = perm;
                }
            }
            if (minDifference == 10000)
            {
                return(new List <DisplayTeam>());
            }
            foreach (var id in minPerm)
            {
                selectedPlayersList.Remove(id);
            }
            foreach (var id in selectedPlayersList)
            {
                matchup.Add(new DisplayTeam {
                    DefenseName = playerRetriever.GuidToName(id)
                });
            }
            return(matchup);
        }