Exemple #1
0
        public static List<Tuple<Team, Team>> GenerateTeams(User[] Players)
        {
            var result = new ConcurrentQueue<Tuple<Team,Team>>();
            var powerOfTwo = 1 << (Players.Count() - 1);
            var numberOfPlayers = Players.Count();

            Parallel.For(0, (int)powerOfTwo, counter =>
            {
                var ones = GetOnes(counter, numberOfPlayers, 0);
                if (ones == numberOfPlayers / 2 || (numberOfPlayers % 2 == 1 && ones == (numberOfPlayers / 2) + 1))
                {
                    result.Enqueue(CreateTeamFromInt(counter, Players));
                }
            });

            return new List<Tuple<Team,Team>>(result);
        }
Exemple #2
0
        private static Tuple<Team, Team> CreateTeamFromInt(int TeamNumber, User[] Players)
        {
            var currentPlayerMask = 1;
            var team1 = new Team();
            var team2 = new Team();
            for (int currentPlayer = 0; currentPlayer < Players.Count(); currentPlayer++)
            {
                if ((currentPlayerMask & TeamNumber) != 0)
                {
                    team1.Members.Add(Players[currentPlayer]);
                }
                else
                {
                    team2.Members.Add(Players[currentPlayer]);
                }
                currentPlayerMask = currentPlayerMask << 1;
            }

            return  new Tuple<Team, Team>(team1, team2);
        }