Online Sports-Manager „Live“-Spielberechnung – Teil 4
Im dritten Teil dieser Beitragsreihe haben wir die Berechnungsansätze erneut erweitert. Hier folgt nun Teil 4, wenn auch etwas später als ursprünglich geplant.
Berechnungserweiterungen (Fortsetzung)
Die grundsätzliche Berechnung der einfachen Spielereignisse funktioniert bereits und einen Liveticker für die Ereignisse können wir mit dem jetzigen Stand auch bereits abbilden. Doch natürlich fehlen noch einige entscheidende Dinge, die das Spiel interessant machen. Interessant wird ein Online-Manager unter Anderem auch dadurch, dass die Teams von echten Menschen gesteuert werden, sich also in der Taktik, Aufstellung und Spielweise unterscheiden.
Bei vielen „einfachen“ (im Sinne der Spielberechnung) Managern werden die Ergebnisse vorausberechnet, ähnlich wie wir es in unserem Ansatz ja auch tun. Oftmals kann man festlegen in welcher Spielminute ein Spieler gegen einen anderen ausgetauscht werden soll, das war es dann aber auch schon. Wir möchten jedoch gerne, dass ein User auch während eines laufenden Spiels noch eingreifen und seine Taktik oder Aufstellung ändern kann. Doch wie verträgt sich das mit der Vorausberechnung der kompletten Begegnung?
Strategieänderungen trotz Vorabberechnung der Begegnungen
Diese Funktion war schon in der Planung eine ziemliche Herausforderung. Wie schaffen wir es ein Spiel komplett zu berechnen, aber dennoch dem User die Möglichkeit zu geben einzugreifen – zu jeder Zeit des Spiels?
Einfacher wäre dies gewesen, wenn wir uns für einen Berechnungsansatz entschieden hätten, der das Spiel minutenweise berechnet – jede Spielminute einzeln. Da dies aus performancetechnischen Gründen nicht in Frage kam musste eine andere Lösung her. Eine besondere Herausforderung ist hierbei, dass die Ereignisse nicht gleichmäßig über die Spielzeit, sondern zufällig auf die Spielminuten verteilt werden (siehe Teil 3).
Wie im letzten Teil auch schon erwähnt wurde, können wir die aktuelle Spielminute eines laufenden Spiels jederzeit ermitteln, indem wir die Differenz der Startzeit des Spiels und der aktuellen Zeit betrachten und den Geschwindigkeitsfaktor der Berechnung berücksichtigen. Möchte ein Spieler nun seine Strategie ändern und schickt die Änderung ab, so weiß der Server ab welcher Spielminute die Änderung greifen muss.
Die Lösung
Die Lösung ist gleichermaßen simpel und kompliziert (ja, irgendwie ein Widerspruch). Das Spiel wird einfach ab dem Zeitpunkt der Strategie-Änderung neu berechnet. Alle vorher berechneten Ereignisse des Spiels werden beibehalten, alle Ereignisse ab der Änderungsminute werden gelöscht und neu berechnet. Das war der simple Teil.
Das Komplizierte ist, dass – wie oben erwähnt – die Ereignisse nicht gleichmäßig verteilt sind. Angenommen ein Team würde mit der Startaufstellung und -strategie aufgrund der Werteverhältnisse (siehe die ersten Beitrags-Teile) 3 Tore schießen. Durch die zufällige Verteilung der Ereignisse fallen diese 3 Tore jedoch erst in der 50., 69. und 80. Minute. Nun greift der User in der 60. Spielminute ein und stellt seine Aufstellung und Strategie so um, dass sein Team mit dieser Einstellung über die 90 Minuten gerechnet kein Tor schießen würde.
Würden wir die Begegnung einfach ab der 60. Minute neu berechnen, so hätte das Team am Ende nur 1 Tor geschossen. Rechnerisch wären aber bis zur 60. Minute 2 Tore geplant. Um dieses Problem zu lösen, berechnen wir einen „Überhang“, also die Anzahl Tore (und andere Ereignisse), die zuwenig oder zuviel in den vergangenen Minuten geschehen sind.
Hier ein Beispiel, die Voraussetzungen sind wie zuvor geschildert:
1. Berechnung der Begegnung, Team schießt 3 Tore in der 50., 69. und 80. Minute.
2. User greift in der 60. Minute ein, die neuen Einstellungen würden zu 0 Toren in 90 Minuten führen.
3. Neuberechnung der Begegnung ab der 60. Minute
3a. Berechnung der „fairen Tore“ bis zur 60. Minute: 3 * 60 / 90 = 2
3b. Tatsächliche Tore: 1, dadurch ein Überhang von 1 Tor.
3c. Berechnung der Tore in den verbleibenden 30 Minuten: 0, Addition des Überhangs: 1 -> Tor in der 83. Minute (Zufallswert zwischen 60. und 90.)
Der gleiche Ansatz funktioniert natürlich auch in die andere Richtung. Angenommen ein Team würde in 90 Minuten mit den Starteinstellungen 1 Tor schießen und dieses fällt bereits in der 10. Minute. In der 20. Minute greift der User ein und stellt das Team so um, dass es auf 90 Minuten gerechnet 3 Tore schießen würde. Hier die Beispielrechnung anhand dieser Werte:
1. Berechnung der Begegnung, Team schießt 1 Tor in der 10. Minute.
2. User greift in der 20. Minute ein, die neuen Einstellungen würden zu 3 Toren in 90 Minuten führen.
3. Neuberechnung der Begegnung ab der 20. Minute
3a. Berechnung der „fairen Tore“ bis zur 20. Minute: 1 * 20 / 90 = 0,22222
3b. Tatsächliche Tore: 1, dadurch ein Überhang von -0,77778 Toren.
3c. Berechnung der Tore in den verbleibenden 70 Minuten: 3 * 70 / 90 = 2,33333, Addition des Überhangs: 1,55555 -> Tor in der 64. Minute (Zufallswert zwischen 20. und 90.)
Am zweiten Beispiel sieht man sehr schön, dass die verschiedenen Dauern, mit denen eine Einstellung berechnet wurde, berücksichtigt wird. Es fallen also im gesamten Spiel nicht 1 oder 3 Tore, sondern 2 (Kommastellen werden abgeschnitten). Nach diesem Muster wird das Spiel nach jedem Eingreifen eines Users neu berechnet. Dabei wird das Verfahren auch für die anderen Werte angewendet, also Fouls, Torschüsse etc. Nach unserer Meinung ist dieser Weg optimal um gleichermaßen performant und flexibel zu berechnen und die Möglichkeit einer echten Interaktion zu schaffen.
Dies war Teil 4 unserer Beitragsreihe. Der nächste Teil wird sich mit der Berechnung von Fouls, Verletzungen und Strafen befassen.
Mit jedem Post freue ich mich mehr auf das Projekt! Weiter so! 🙂
Geht mir auch so 🙂
Ich fiebere den Tag schon entgegen, dass wir den H&H in Rente schicken können!
Moin!
Da die letzten News ja nun schon lange zurück liegen, wollte ich mal fragen ob es schon was neues gibt? Wie sieht’s aus mit dem Projekt, wird es noch weiterverfolgt?
Hallo Klaus.
Es geht schon noch weiter, aber nur sehr langsam, da die Zeit einfach sehr knapp bemessen ist und ein Teammitglied sich verabschiedet hat.
Für einen (ausreichend) ausführlichen Newsbeitrag fehlt derzeit noch sowohl Material als auch Zeit. Da im Projekt unserer Meinung nach aber Potential steckt, haben wir nicht vor es einzustellen.
OK, danke für die schnelle Info! 🙂