Mein Ansatz für eine Dragball-Engine wäre ein Zustandsautomat. Die Zustände repräsentieren den Drachen in Ballbesitz. Für jeden Drachen gibt es nun verschiedene Möglichkeiten den Ball weiter zu spielen, oder zu verlieren (dazu später mehr). Dies würde ich in Funktionen packen. Dieser Zustandsautomat läuft dann solange, bis ein Angriff beendet ist. Entweder durch Ballverlust, Tor oder gescheitertem Torversuch.
Das ganze wiederholt man jetzt für beide Mannschaften abwechselnd, bis man ein Spielende definiert (z.B. Anzahl an Zustandsübergängen).
Fangen wir mal beim Zustand „1“ an:
Der Ball ist beim Torwart. Dieser hat prinzipiell die Möglichkeit die Positionen 2, 3,4,5,6,7 und 8 anzuspielen. Für jede dieser Positionen würde ich eine Wahrscheinlichkeit (WK) festlegen, mit der diese versucht wird anzuspielen. Vielleicht so:
3: 30%
2,4: 25%
5: 10%
6,7: 4%
8: 2%
Danach würde ich überprüfen, welche dieser Positionen besetzt sind, z.B. 4,5,6,7,8 ist zur Zeit beliebt
. Das bedeutet 2,3 sind nicht besetzt. Die hier also nicht verfügbaren 55% (2 und 3 nicht anwesend) würde ich nun anteilig auf die übrigen Positionen verteilen und dann eine Zufallszahl zwischen 1 und 100 würfeln, um das Ziel der Aktion zu entscheiden. Alternativ könnte man natürlich auch einfach eine Zufallszahl zwischen 1 und 45 würfeln und sofort entscheiden. Beispiel:
1-2: Versuch die 8 anzuspielen
3-6: Versuch die 7 anzuspielen
7-10: Versuch die 6 anzuspielen
11-20: Versuch die 5 anzuspielen
21-45: Versuch die 4 anzuspielen
Eventuell könnte man den Drachen hier sowas wie Intelligenz programmieren, indem man noch abgleicht, ob die Anspielstation frei ist oder nicht. Ist sie frei, wird die WK diese Position anzuspielen erhöht. Typische Situation: 5,6,7,8 sind gedeckt, 4 ist frei. Der Einfachheit wegen sage ich jetzt die gedeckte Anspiel-WK wird halbiert. Die „freiwerdenden“ WK addiere ich auf die WK für die freie Anspielstation. Dann sieht es so aus:
1: Versuch die 8 anzuspielen
2-3: Versuch die 7 anzuspielen
4-5: Versuch die 6 anzuspielen
6-10: Versuch die 5 anzuspielen
11-45: Versuch die 4 anzuspielen
Jetzt wird die Zahl zwischen 1 und 45 gewürfelt. Ergebnis: 2 -> Es wird versucht zur Position 7 zu passen.
Jetzt gibt es mehrere Möglichkeiten, die ich in Funktionen packen würde.
a) Beide Drachen (1 und 7) sind ungedeckt und kein Gegner im Passweg: Pass kommt zu 100% an.
b) Beide Drachen ungedeckt, aber 1 bis n Gegner im Passweg. Für diesen Fall würde sich die Möglichkeit ergeben den Pass abzufangen. Das würde ich mit Hilfe der Dragballpunkte (DBP) so berechnen:
((DBP 1 + DBP 7) – (DBP Gegner im Passweg/x)) / (DBP 1 + DBP 7)
Für x = 10 und alle Drachen mit 500DBP z.B. würde das so aussehen:
((500+500)-(500/10)) / (500+500) = 950/1000 = 95%
Also würde für jeden Gegner im Passweg eine WK von 5% existieren, den Ball direkt aus der Luft zu fangen.
c) Anspielstation gedeckt. Dann würde ich eine ähnliche Formel verwenden, um die WK zu berechnen, dass der Pass hier abgefangen wird:
(DBP-Anspielstation – (DBP Gegner der Anspielstation/x)) / (DBP-Anspielstation)
Mit den Werten von oben:
(500-(500/10)) / 500 = 450/500 = 90%
d) Passgeber gedeckt. Macht jetzt in diesem Beispiel keinen Sinn, da der Torwart nicht gedeckt sein kann. Generell würde ich aber zunächst mal einen Zufallswurf machen, um zu entscheiden, ob ein Dribbling versucht werden soll. Falls eines versucht werden soll, würde ich wieder die obige Formel nehmen und leicht abändern. Etwa so:
(DBP des Dribblers-(DBP des Gegners/3)) / (DBP des Dribblers)
Mit Werten:
(500 – 166) / 500 = 67%
Also mit einer WK von 67% gelingt das Dribbling, dann entfällt das Nachfolgende. Gelingt das Dribbling nicht, wird der Ball vom Gegner erobert.
Wird kein Dribbling versucht, könnte man die Pass –WK so berechnen:
(DBP des Passgebers–(DBP des Gegners des Passgebers)/x) / (DBP des Passgebers)
Wieder mit Werten:
(500-450)/500=90%
e) Passgeber und –empfänger gedeckt. Dies würde dann eine Kombination aus c) und d) sein.
Für unsere konkrete Spielsituation würde das dann so aussehen:
Die gegnerischen Positionen 8,9 und 10 könnten abfangen. Nehmen wir an 8 und 10 sind besetzt. Die gegnerische 6 deckt die Anspielstation 7.
1 - 80: Der Pass kommt an
81 - 90: Der Ball landet bei der gegnerischen 6
91 - 95: Der Ball wird von der gegnerischen 8 abgefangen
96 - 100: Der Ball wird von der gegnerischen 10 abgefangen
Jetzt kommt noch die Besonderheit „Torwurf“, die ich wieder ähnlich behandeln würde.
a) Torwurf ohne Torwart: 90% WK für Tor ( die 10% würde ich für „Tor nicht getroffen“ generell einplanen)
b) Torwurf mit Torwart, ohne Gegenspieler des Werfers:
(DBP des Werfers – (DBP des Torwarts)/5) / (DBP des Werfers)
Mit Werten:
(500 – 100)/500=80%
c) Torwurf mit Torwart und Gegenspieler des Werfers:
(DBP des Werfers) – ((DBP des Torwarts + DBP des Verteitigers)/5) / (DBP des Werfers)
Mit Werten:
(500 – 200)/500=60%
Hier kann man jetzt auch noch ein Dribbling vorschalten, sodass bei Erfolg wieder Variante b) genutzt wird.
Beispiel für einen gedeckten Stürmer, ohne Dribbling:
1 – 50: Tor
51 – 90: Torwart hält
91 – 100: Tor verfehlt
Über die x-Werte lassen sich jetzt der Einfluss der DBP und die allgemeinen Spielabläufe bequem einstellen. Generell müsste man vielleicht noch ein Minimum und Maximum für die WK jeder Aktion festlegen. Beim Tor vielleicht zwischen 10% und 90%, sodass es immer eine Möglichkeit auf Erfolg und Misserfolg gibt.
Um dem Ganzen jetzt zusätzlich noch eine Unwägbarkeit hinzuzufügen könnte man einen Tagesformfaktor würfeln. Also zu Beginn vielleicht eine Zahl zwischen 0,9 und 1 für beide Mannschaften. Mit diesem Faktor wird dann jedes Ergebnis noch mal multipliziert.
Ebenso einen Auswärtsmalus zwischen 0,95 und 1. Der dann logischerweise nur für die Auswärtsmannschaft gilt.
Wahrscheinlich funktioniert Dragball im Moment so, oder zumindest so ähnlich. Mein Vorschlag, um vielleicht auch das bestehende System zu verbessern ist folgender:
Im Moment scheinen für jede Aktion ausschließlich die DBP zur Berechnung herangezogen zu werden. (Manch einer mag auch glauben, dass die DBP völlig irrelevant sind. Dem ist aber mit Sicherheit nicht so.) Dies führt zu Phänomen die nahelegen Stürmer wären die besten Verteidiger. (Mein ganz persönlicher Eindruck)
Ich würde das System nun dahingehend ändern, dass zusätzlich zu den DBP für jede Aktion eine Eigenschaft herangezogen wird. Diese wird zu den DBP addiert und steht dann für die Fähigkeit des Drachen eine Aktion auszuführen. Für mich kann ein Drache folgende Aktionen, für die es jeweils eine Gegenaktion gibt, ausführen und braucht dafür die Eigenschaften in Klammern:
- Passen(Kraft) <-> Passen verhindern(Willenskraft)
- Fangen (Kraft)<-> Fangen verhindern(Intelligenz)
- Dribbeln (Geschick) <-> Dribbeln verhindern (Feuerkraft)
- Pass abfangen(Intelligenz) <-> Pass abfangen verhindern
Willenskraft) (Gegenspieler von im Passweg stehenden Drachen können diese vielleicht am Abfangen hindern? Hab ich noch keine genaueren Gedanken zu…)
- Auf das Tor werfen(Feuerkraft) <-> Torwurf abwehren(Geschick)
Nehmen wir für das Beispiel oben mal folgende Werte für alle Drachen an:
2 Haupteigenschaften: je 300
3 Nebeneigenschaften: je 100
Ergibt: 600 DBP
Der Torwart passt wieder zur 7.
Für den Pass braucht er Kraft: 100 + DBP = 700 für diese Aktion
Die 7 braucht auch Kraft zum Fangen: 100 + 600 = 700 für diese Aktion
Der Gegner auf der 10 braucht Intelligenz zum Abfangen: 100 + 600 = 700 für diese Aktion
Ebenso die 8: 100 + 600 für diese Aktion
Der Gegner auf der 6 braucht Intelligenz zum Fangen verhindern: 300 + 600 = 900 für diese Aktion
Formel zum Abfangen:
((DBP 1 + DBP 7) – (DBP Gegner im Passweg/x)) / (DBP 1 + DBP 7)
((700+700)-(700/10)) / 1400 = 1330/1400 = 95%
Formel zum Pass fangen:
(DBP-Anspielstation – (DBP Gegner der Anspielstation/x)) / (DBP-Anspielstation)
(700 – (900/10)) / 700 = 610/700 = 87%
Ergebnis:
1 - 77: Der Pass kommt an
78 - 90: Der Ball landet bei der gegnerischen 6
91 - 95: Der Ball wird von der gegnerischen 8 abgefangen
96 - 100: Der Ball wird von der gegnerischen 10 abgefangen
Das Ganze ist noch nicht bis ins letzte Detail durchdacht, aber ich denke man kann den Zweck erkennen. Stürmer können den Ball nicht so gut abfangen und nicht so gut am Fangen hindern, wie Verteidiger. Dafür können sie besser Tore erzielen usw.
Auf konstruktive Kritik und Anregungen freut sich
DocVodka