Du bist nicht angemeldet.

1

Freitag, 20. Mai 2011, 08:58

Diskussion zur Dragballengine

Wenn ich eine Dragballengine nachprogrammieren müsste, würde sie wahrscheinlich wie folgt aussehen:

Als erstes bestimme ich, wo der Ball ist, z.B. auf der 8. Dann nehme ich eine Tabelle, in der ein Gewicht je anderer Position steht, bspw. 2-1/3-1/4-1/5-3/6-3/7-3/9-5/10-6/11-5/Tor-3. Dies ist zu lesen, dass ich 3 "Lose" habe, um auf Position 7 zu werfen, 5 Lose auf 11 und 3 für einen Torwurf.

Nun schaue ich, welche Positionen besetzt sind, z.B. 2, 4, 5, 9, 10. Streiche ich die anderen Positionen aus der Tabelle, erhalte ich 2-1/4-1/5-3/9-5/10-6/Tor-3.
Ich habe also 19 Lose und "ziehe" eins davon. Der Ball wird zur 10 gespielt.

Ebenso bestimme ich jetzt, welcher Text erscheint, z.B. "Okeanos läuft auf Kashira zu, diese dribbelt aber glücklich um Okeanos herum und passt weit nach links zu Lussy Lou." Da der Text einen Verteidiger braucht, ermittle ich aus den Positionen 8 nach 10, welcher der Gegner zur Verteidigung kommt, wieder mit einer Gewichtstabelle.
Aus dem Text ermittle ich noch die Dauer des Spielzugs und den Fitnessverlust der beteiligten Drachen.

Abschließend schaue ich, ob der Pass ankommt. Ich würde da irgendeine Funktion nehmen, die das Produkt aus DB-Punkten und aktueller Fitness ins Verhältnis setzt. Jetzt muss ich "nur" noch so lange alle Parameter optimieren, bis die Spiele "fair" sind.

Irgend welche anderen Ideen?
Wir feiern Durch den Monsun

"Silbersturm" ist zu den Dragon Wings gewechselt.

2

Freitag, 20. Mai 2011, 09:16

Also erstens musst du mit der Textermittlung warten, bis du weißt ob der Pass ankommt :)
Zweitens könnte die Wahrscheinlichkeitsverteilung der Anspielstationen auch davon abhängen, was besetzt ist.
(Oder sogar wo der Gegner steht)

Außerdem ist denkbar halt auch ein mehrstufiger Prozess:

- Möglicherweise Check ob der Drache den Wurf schafft: Zufallswurf gegen Stärke + Fitness, repräsentiert Chance dass der Drache es verhaut
- Für alle am Passweg stehenden Drachen ein Eingreifversuch: Zufallswurf gegen eigene Stärke + Fitness abzüglich z.B. des offenen Spielraumes des Passwurf-Zufalls. Je besser der Wurf (was bei stärkeren Drachen öfter vorkommt) desto schwerer das Abfangen. Ggf. noch modifiziert um Abzüge aufgrund der Entfernung.
- Falls der Zieldrache gedeckt ist wieder ein entsprechender Check, ob der Ball gefangen wird, Basis evtl das Verhältnis von DB-Stärke des Fangenden zu der des Deckenden
Ich bin Fan von AgRW! :love:

3

Freitag, 20. Mai 2011, 09:39

Also erstens musst du mit der Textermittlung warten, bis du weißt ob der Pass ankommt :)

Klar, dass zum Schluss noch die Ausgabe der passenden Nachricht im Chat kommt. Das ist für mich aber keine Enginearbeit, sondern GUI-Sache.
Wir feiern Durch den Monsun

"Silbersturm" ist zu den Dragon Wings gewechselt.

4

Sonntag, 19. Juni 2011, 18:33

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
RIP Schnapsbar!

Neue Heimat gefunden und zwar hier: Fellowship of Bar and Riders!

Thema bewerten