598
edits
(→Pokal) |
|||
Line 410: | Line 410: | ||
== Berechnungen == | == Berechnungen == | ||
=== Liga- | ''''' Liga-Spielplan ''''' | ||
Der Liga-Spielplan wird wie beim realen Vorbild durch das Round Robin Verfahren erstellt. Im Gegensatz zum Deutsche-Bundesliga-Spielplan kann es vorkommen, dass einige Vereine während der Saison mehr Heimspiele ausgeführt haben, als andere Vereine. Am Ende der Saison hat jedes Team jedoch die gleiche Anzahl an Heimspielen. | |||
In der deutschen Bundesliga ist es so, dass auf jedes Heimspiel immer ein Auswärtsspiel folgt. Bei KU kann es also vorkommen, dass man zwei Heim- oder Auswärtsspiele nacheinander hat. | |||
Der Begriff Round Robin (Rundlauf-Verfahren; Zeitscheibenverfahren) bezeichnet ein Scheduling-Verfahren, welches mehreren konkurrierenden Prozessen begrenzte Ressourcen zuordnet. Das heißt, dass allen Prozessen nacheinander für jeweils einen kurzen Zeitraum – dem sogenannten Zeitschlitz – Zugang zu den benötigten Ressourcen gewährt wird. Danach wird der jeweilige Prozess wieder hinten in die Warteschlange eingereiht. Dieses Prinzip wird unter anderem bei Multi-Tasking-Systemen genutzt. | |||
Zusammengefasst: | |||
<pre> | |||
... | |||
### 1) erstelle Array ($array_teams) mit allen teilnehmenden Teams einer Liga | |||
while($row = mysql_fetch_object($qry)) | |||
{ | |||
$i++; | |||
$array_teams[$i] = $row->ID_team; | |||
} | |||
### 2) durchlaufe fortan die Schleife: | |||
for ($round = 1; $round < $num_teams; $round++) | |||
{ | |||
### Es wird 13 Mal die Schleife durchlaufen. | |||
### Grund dafür ist die Anzahl (14) der Teams ($num_teams), | |||
### die in einer Liga antreten. | |||
### Jeder Schleifendurchlauf erstellt einen Spieltag. | |||
... | |||
### 2.1) erstelle Array ($teams_done) | |||
$teams_done = array(); | |||
### 2.2) durchlaufe fortan die Schleife: | |||
for ($team = 1; $team < $num_teams; $team++) | |||
{ | |||
### Es werden also jedem Team, | |||
### ausser dem Letzten (14. Team), | |||
### eine Zählnummer gegeben. | |||
### 2.2.1) Prüfe, ob das Team bereits abgearbeitet ist: | |||
if (!in_array($team, $teams_done)) | |||
{ | |||
### 2.2.2) Wenn Bedingung false, dann wähle Gegner: | |||
$opponent = $round - $team; | |||
$opponent += ($opponent < 0) ? $num_teams : 1; | |||
### 2.2.3) Wenn Bedingung | |||
### (Gegner ist nicht das momentan ausgewählte Team) true, | |||
### gehe weiter: | |||
if ($opponent != $team) | |||
{ | |||
### 2.2.3.1a) Wenn Bedingung true ist, gehe weiter: | |||
if (($team+ $opponent) % 2 == 0 xor $team < $opponent) | |||
{ | |||
### Das heißt, es muss entweder der Rest der Summe | |||
### beider Teams durch 2 dividiert 0 ergeben oder | |||
### (exklusives Oder!) das momentan ausgewählte Team | |||
### einen kleineren Index als der Gegner haben. | |||
### Ist dies der Fall, wird die nun feststehende | |||
### Paarung in die Datenbank eingetragen. | |||
### Heimrecht hat das ausgewählte Team ($array_teams[$team]), | |||
### auswärts spielt der gewählte Gegner ($array_teams[$opponent]). | |||
### Es werden die eindeutigen IDs der Vereine in die Datenbank | |||
### geschrieben, welche in Schritt 1) in das Array | |||
### $array_teams gespeichert wurden. | |||
} | |||
### 2.2.3.1b) Wenn Bedingung von oben false ist, gehe weiter: | |||
else | |||
{ | |||
### Der Vorgang ist dem aus 2.2.3.1a) fast identisch. | |||
### Es werden lediglich Heim- und Auswärtsteams getauscht. | |||
### Somit bedeutet das: | |||
### Heimrecht hat der gewählte Gegner ($array_teams[$opponent]), | |||
### auswärts spielt das momentan ausgewählte Team ($array_teams[$team]). | |||
} | |||
### 2.2.4) Schreibe abgearbeitete Teams in das Array, | |||
### welches in Schritt 2.1) erstellt wurde: | |||
$teams_done[] = $team; | |||
$teams_done[] = $opponent; | |||
} | |||
} | |||
} | |||
### 2.3a) Wenn Bedingung true ist, gehe weiter: | |||
if ($round % 2 == 0) | |||
{ | |||
### Das heißt, es muss der Rest der Rundenzahl ($round), | |||
### welche in der Schleife aus Schritt 2) initialisiert wurde, | |||
### durch 2 dividiert 0 ergeben. | |||
### Ist dies der Fall, wird das letzte verbleibende Team (14.), | |||
### welches in Schritt 2.2) ausgelassen wurde, | |||
### noch einer Paarung zugeteilt: | |||
$opponent = ($round + $num_teams) / 2; | |||
### Nun werden die Paarungen, wie bereits erläutert, | |||
### in die Datenbank geschrieben. | |||
} | |||
### 2.3b) Wenn Bedingung von oben false ist, gehe weiter: | |||
else | |||
{ | |||
$opponent = ($round + 1) / 2; | |||
### Nun werden die Paarungen, wie bereits erläutert, | |||
### in die Datenbank geschrieben. | |||
### Im Unterschied zu 2.3a) wird bei 2.3b) das Heimrecht getauscht. | |||
} | |||
} | |||
</pre> | |||
''''' Pokal ''''' | |||
''''' Spielberechnung ''''' | |||
== Ziele für die Zukunft == | == Ziele für die Zukunft == |
edits