Online Sports-Manager „Live“-Spielberechnung – Teil 3
Im zweiten Teil dieser Beitragsreihe haben wir die Berechnungsansätze aus Teil 1 erweitert und an einem Beispiel einen ersten groben Spielverlauf im Online-Manager kreiert. Hier folgt nun Teil 3.
Berechnungserweiterungen (Fortsetzung)
Mit dem aktuellen Stand unserer Berechnungen können wir schon einen groben Spielverlauf abbilden. Wer hat wie viele Aktionen, über welche Spielfeldseite finden die Aktionen statt? Außerdem kann der Manager Strategien für sein Team einstellen, welche diese Werte beeinflussen und auch direkten Einfluss auf die berechneten Spielverläufe haben.
Bevor wir mit den Erweiterungen der Berechnung fortfahren, soll an dieser Stelle noch ein gravierender Unterschied zu einer „KI“-Berechnung oder auf Wahrscheinlichkeiten basierender Berechnungen hervorgehoben werden. Anstatt die Werte wie in unserem Berechnungsbeispiel aus dem vorherigen Teil der Beitragsreihe zu verwenden, könnten wir sie auch als Wahrscheinlichkeiten interpretieren.
In unserem Beispiel haben wir gesagt, dass Team A aus der Defensive über die linke Seite in das Mittelfeld vordringt. Hier noch einmal der entsprechende Ausschnitt:
Team A (14) / (Team A (14) + Team B (18)) = 14 / 32 = 0,438 = 43,8%
somit erreichen 43,8% der Aktionen (10) das Mittelfeld, in unserem Fall also 10 * 0,438 = 4,38
Stattdessen könnten wir auch sagen, dass nicht ein fester Anteil von 4,38 Aktionen das Mittelfeld erreicht sondern im Durchschnitt 4,38 von 10 Aktionen. In PHP ausgedrückt einmal die Berechnungen im Vergleich:
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$teamA = 14;
$teamB = 18;
// Berechnung 1 (feste Anzahl):
$insMittelfeld = $teamA / ($teamA + $teamB);
// Berechnung 2 (Anteil mit Wahrscheinlichkeit):
$insMittelfeld = 100 * $teamA / ($teamA + $teamB);
if(mt_rand(1, 100) < = $insMittelfeld) // weiter mit nächstem Schritt
[/pastacode]
Natürlich kann man die Varianten nicht eins zu eins vergleichen, es sollte trotzdem sofort auffallen, dass die erste Berechnung bei jedem Aufruf genau das selbe Ergebnis liefert, die zweite jedoch nicht, da sie davon abhängt welcher Zufallswert ermittelt wird.
Für unser Projekt haben wir uns entschieden mit festen Werten zu arbeiten um die Ergebnisse absolut nachvollziehbar und auch (in gewissem Rahmen) wiederholbar zu machen. In gewissem Rahmen deshalb, da die Ergebnisse trotz fester Werte und Formeln von menschlichen Einstellungen wie der Teamstrategie und Spieleraufstellung abhängen.
Nun aber weiter mit dem eigentlichen Fortschritt der Berechnungen.
Ereignisse auf die Spielzeit verteilen
An dieser Stelle weichen wir die Aussage aus dem letzten Abschnitt etwas auf. Wir möchten zwar, dass die Spielergebnisse bei identischen Bedingungen auch zu identischen Ergebnissen führen, nicht jedoch dass der Spielverlauf identisch ist. Daher führen wir an dieser Stelle eine der wenigen Zufallsberechnungen ein, indem wir die Anzahl der Ereignisse zufällig auf die Spielminuten verteilen. In abstrahiertem PHP Code sieht das dann etwa so aus:
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$events = array();
$ereignisse = 5;
$ausgabe = array();
for($i = 1; $i < = $ereignisse; $i++) {
$minute = mt_rand(0, 900) / 10;
$ausgabe[$minute] = 'Ein Ereignis tritt ein';
}
ksort($ausgabe);
print_r($ausgabe);
[/pastacode]
Für die Zwecke eines Online-Managers ist dies nach unserer Ansicht völlig ausreichend. Dem Einen oder Anderen wird auffallen, dass auch 10tel Minuten möglich sind, dies hilft dabei die Ereignisse, die in der gleichen Spielminute auftreten zu sortieren.
Die Anzahl der verschiedenen Ereignisse haben wir in den vorherigen Schritten ja berechnet. So können wir nun angeben wie oft ein Angriff von welchem Team über welche Seite bis zu welcher Station stattgefunden hat und dies mit der obigen Methode auf die Spielminuten verteilen. Diese Ereignisse könnte man noch mit zufälligen Ereignissen ausschmücken, die keine Relevanz haben aber schön zu lesen sind. Natürlich dürfen auch Meldungen zu Anstoß, Halbzeit und ähnlichen Dingen nicht fehlen. Ereignisse wie Fouls, gelbe und rote Karten oder ähnliches werden derzeit auch noch nicht berücksichtigt – genauso wenig welche Spieler von den Ereignissen betroffen oder an ihnen beteiligt waren.
Ticker bzw. Ereignisbericht
Um die Ereignisse für den User / Manager aufbereitet darzustellen, werden die generierten Daten am besten in einer Datenbank hinterlegt. Hier sollte dann auch die Spielminute mit Dezimalstelle gespeichert werden um eine korrekte Sortierung und Darstellung zu gewährleisten.
Ein Spielbericht ist schön und gut, etwas Besonderes allerdings nicht. Interessant wird es, wenn die Meldungen in Echtzeit verfolgt werden können. Hier kann man sich mit einem Trick behelfen, der dem Manager den Eindruck gibt, dass die Meldungen erst entstehen obwohl sie bereits vollständig in der Datenbank hinterlegt wurden.
Zuerst legen wir fest, wie viele Spielminuten in einer echten Minute vergehen sollen.
Als Beispiel verwenden wir hier den Faktor 3.0, also vergehen pro Minute drei Spielminuten.
Als nächstes benötigen wir nun die genaue Startzeit des Spiels, die dann auch in der Datenbank hinterlegt werden sollte, beispielsweise 20.02.2012 10:00:00
Mit diesen Werten können wir nun über eine einfache Formel die aktuelle Spielminute berechnen: Spielminute = vergangene Sekunden seit Spielstart * Faktor
In der Anzeige für den User lesen wir also nur die Spielereignisse aus der Datenbank aus, bei denen wir eine Spielminute gespeichert haben, die kleiner ist als die berechnete aktuelle Spielminute.
Dies war Teil 3 unserer Beitragsreihe. In den nächsten Teilen versuchen wir dann näher auf Fouls und Karten einzugehen und ein Konzept zu entwickeln, mit dem der Manager auch während des Spiels die Team-Strategie ändern kann, obwohl die Ereignisse vorausberechnet wurden.
Füge diese URL in deine WordPress-Website ein, um sie einzubetten
Füge diesen Code in deine Website ein, um ihn einzubinden