public IEnumerable <MatchMadeTeam> RandomizeTeams(IEnumerable <GuardianSnapshot> guardians, int teamSize) { var numberOfTeams = guardians.Count() / teamSize; var guardianArray = guardians.ToArray(); var teams = new List <MatchMadeTeam>(); for (var i = 0; i < numberOfTeams; i++) { var team = new MatchMadeTeam(); var teamGuardians = new List <GuardianSnapshot>(); var teamElo = 0.0; var teamEfficiency = 0.0; for (var j = i * teamSize; j < i * teamSize + teamSize; j++) { teamGuardians.Add(guardianArray[j]); teamElo += guardianArray[j].GuardianElo; teamEfficiency += guardianArray[j].GuardianEfficiency; } team.Guardians = teamGuardians; team.TeamElo = teamElo / teamSize; team.TeamEfficiency = teamEfficiency / teamSize; teams.Add(team); } return(teams); }
internal IEnumerable <MatchMadeTeam> SwapTwoPlayers(IEnumerable <MatchMadeTeam> teams, int teamIndex1, int teamIndex2) { var nextConfiguration = new MatchMadeTeam[teams.Count()]; var teamsArray = teams.ToArray(); for (var i = 0; i < teams.Count(); i++) { nextConfiguration[i] = new MatchMadeTeam(); var guardianArray = teamsArray[i].Guardians.ToArray(); var newGuardiansArray = new GuardianSnapshot[guardianArray.Length]; for (var j = 0; j < guardianArray.Length; j++) { newGuardiansArray[j] = guardianArray[j]; } nextConfiguration[i].Guardians = newGuardiansArray; } var guardianIndex1 = _random.Next(0, nextConfiguration[teamIndex1].Guardians.Count()); var guardianIndex2 = _random.Next(0, nextConfiguration[teamIndex2].Guardians.Count()); var team1Guardians = nextConfiguration[teamIndex1].Guardians.ToArray(); var team2Guardians = nextConfiguration[teamIndex2].Guardians.ToArray(); var guardian1 = team1Guardians[guardianIndex1]; team1Guardians[guardianIndex1] = team2Guardians[guardianIndex2]; team2Guardians[guardianIndex2] = guardian1; nextConfiguration[teamIndex1].Guardians = team1Guardians; nextConfiguration[teamIndex2].Guardians = team2Guardians; foreach (var team in nextConfiguration) { var teamElo = 0.0; var teamEff = 0.0; foreach (var guardian in team.Guardians) { teamElo += guardian.GuardianElo; teamEff += guardian.GuardianEfficiency; } teamElo = teamElo / team.Guardians.Count(); teamEff = teamEff / team.Guardians.Count(); team.TeamEfficiency = teamEff; team.TeamElo = teamElo; } return(nextConfiguration.ToList()); }
internal IEnumerable <MatchMadeTeam> KeepNextConfiguration(IEnumerable <MatchMadeTeam> nextTeamConfiguration) { var newTeamConfiguration = new MatchMadeTeam[nextTeamConfiguration.Count()]; var teamsArray = nextTeamConfiguration.ToArray(); for (var i = 0; i < nextTeamConfiguration.Count(); i++) { newTeamConfiguration[i] = new MatchMadeTeam(); var guardianArray = teamsArray[i].Guardians.ToArray(); var newGuardiansArray = new GuardianSnapshot[guardianArray.Length]; for (var j = 0; j < guardianArray.Length; j++) { newGuardiansArray[j] = guardianArray[j]; } newTeamConfiguration[i].TeamEfficiency = teamsArray[i].TeamEfficiency; newTeamConfiguration[i].TeamElo = teamsArray[i].TeamElo; newTeamConfiguration[i].Guardians = newGuardiansArray; } return(newTeamConfiguration); }