public Wedstrijd(int nr, Team team1, Team team2, Poul poul, Speelronde speelronde) { this.Nummer = nr; this.Team1 = team1; this.Team2 = team2; this.Poul = poul; this.Speelronde = speelronde; }
public int CreateSpeelrondes(int nr) { // Source: https://stackoverflow.com/questions/1293058/round-robin-tournament-algorithm-in-c-sharp/1293174#1293174 this.Speelrondes.Clear(); List <Team?> listTeam = new List <Team?>(this.Teams); // Copy if (listTeam.Count % 2 != 0) { listTeam.Add(null); } var numTeams = listTeam.Count; int numDays = (numTeams - 1); int halfSize = numTeams / 2; List <Team> teams = new List <Team>(); teams.AddRange(listTeam.Skip(halfSize).Take(halfSize)); teams.AddRange(listTeam.Skip(1).Take(halfSize - 1).ToArray().Reverse()); int teamsSize = teams.Count; for (int day = 0; day < numDays; day++) { var ronde1 = new Speelronde() { Nummer = day + 1, }; var ronde2 = new Speelronde() { Nummer = ronde1.Nummer + 1000, }; this.Speelrondes.Add(ronde1); if (!IsHalveCompetitie) { this.Speelrondes.Add(ronde2); } int teamIdx = day % teamsSize; var secondT = listTeam[0]; if (teams[teamIdx] is object && secondT is object) { ronde1.AddWedstrijd(new Wedstrijd(nr, teams[teamIdx], secondT, this, ronde1), true); ronde2.AddWedstrijd(new Wedstrijd(1000 + nr++, ronde1.Wedstrijden.Last().Team2, ronde1.Wedstrijden.Last().Team1, this, ronde2), false); } for (int idx = 1; idx < halfSize; idx++) { int firstTeam = (day + idx) % teamsSize; int secondTeam = (day + teamsSize - idx) % teamsSize; if (teams[firstTeam] is object && teams[secondTeam] is object) { ronde1.AddWedstrijd(new Wedstrijd(nr, teams[firstTeam], teams[secondTeam], this, ronde1), true); ronde2.AddWedstrijd(new Wedstrijd(1000 + nr++, ronde1.Wedstrijden.Last().Team2, ronde1.Wedstrijden.Last().Team1, this, ronde2), false); } } } this.Speelrondes.Sort(); return(nr); }