Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

23.05.2012, 18:14

[Java] Sonderregeln bei einem Trading Card Game initialisieren

Hi Community,

Ich versuche mein Wissen in Java zu erweitern und vielleicht irgendwann passable Spiele erzeugen zu können.

Aktuell plane ich zu Übungszwecken ein Trading Card Game (ums genauer zu sagen eine Version von Duel Masters, das vor ein paar Jahren eingestellt wurde). Habs vorher auch schonmal mit einem One Piece TCG versucht, bin da aber auch an den Sonderregeln gescheitert. Und nachdem ich jetzt auch keine Möglichkeit habe an Bilder und Regeln der Karten zu kommen, musste ich das Projekt jetzt einstellen :dash: .

Die Grundspielzüge und eine Gui zu programmieren ist ja kein sonderlich großes Problem (für den Notfall tuts zu Beginn ja auch eine Oberfläche mit Listen).

Das größte Planungsproblem sind die Sonderregeln der einzelnen Karten. Jede Karte kann mehere Sonderregeln haben. Jede Sonderregel hat Bedingungen in welchem Moment die Sonderregel aktiviert wird oder welche Zusatzvoraussetzungen erfüllt werden müssen. Außerdem wirken manche Sonderregeln nur für die eigene Karte, manche für mehere, manche betreffen beide Spieler, manche nur den gegnerischen etc.

Ich hab jetzt schon mehrere Arten gesehen, wie es zwar gehen könnte, weiß aber nicht welche die beste ist.

Einmal muss ich bei jedem Sonderregelobjekt zumindest mal festlegen, wann die Sonderregel der Karte eintritt.

Einmal die Möglichkeit, dass in einer Klasse Sonderrgeln alle Sonderregeln des Spiels Programmiert sind und diese Regeln über eine einelne Methode aufgerufen dann für die jeweilige Karte aufgerufen werden (switch Case zum Beispiel) Problem hierbei ist, dass die Methode zur automatischen Auswahl sehr viele Parameter haben müsste von denen manche dann in einigen Fällen keine Werte haben)

Eine andere Möglichkeit wäre die entsprechenden Sonderregeln über ein Objekt vom Typ Method in die Regeln der Karte zu integrieren. Ich weiß aber auch nicht, ob das die beste Möglichkeit ist. Dort muss ja aber dann auch sehr viel eingegeben werden und ob so alle Sonderregeln im richtigen Moment abgeprüft werden, kann ich gerade auch nicht sagen.

Teilweise könnte man zumindest mit einer Reihe Variablen vom Typ Boolean allgemeine Sonderregeln angeben. Nur gibt es aber auch Regeln die Regeln von anderen Karten verändern und nicht einfach über eine Boolvariable abgefragt werden können.

Kann mir hier jemand die beste Möglichkeit nennen, wie man die Sonderregeln einbinden könnte

Gruß

Erik "EMMachine"

Lares

1x Contest-Sieger

  • Private Nachricht senden

2

23.05.2012, 20:54

Puh, also ich glaube eine "beste" Möglichkeit gibt es nicht, aber ich würde folgendes machen: Effekte die häufig vor kommen und dem zufolge nur ein Stichwort auf der Karte steht (ich glaube einer dieser Effekte hieß Schildbrecher oder Doppelbrecher bei Duel Masters oder?), werden indirekt in dein Kartenobjekt integriert (also nicht als eigenständige Methode sondern durch ne Variable Schildbrecher = xy). Und bei der Schadensverteilung entsprechend mit einberechnet.
Komplexe Effekte werden als Unterobjekt der Kartenklasse integriert. Bei der Initialisierung des Kartenobjekts wird auch der Effekt "initialisiert".

So zum eigentlichen Effektobjekt:
Das Objekt hat verschiedene Flags (boolean Werte), die angeben, unter welchen Bedingungen der Effekt aktiviert wird (z.B. der Flag Angriff wenn du mit der Karte angreifst oder wird_angegriffen wenn dein Gegner die Karte angreift). So nun wird nach jeder spielwichtigen Aktion eines Spielers geprüft, ob eine Karte vorhanden ist, die sich bei dieser Aktion aktiviert. Ist dies der Fall wird die Methode EffektAktivieren() der Karte aufgerufen, die lediglich die entsprechende Aktion des Effektobjekts auffruft. Um jetzt Konter- und Ketteneffekte hinzuzufügen, muss nur bei jeden Effektaufruf erneut geprüft werden ob eine entsprechende Karte existiert die sich bei dem neuen Flag aktiviert. Der Rest wäre dann Fehlerbehandlung: Die Zielkarte wurde bereits in der Kette zerstört? Ok der Effekt läuft ins Leere, usw.