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.2013, 12:34

Kartendeck repräsentieren

Hey,

hier gibts ja bestimmt ein paar Leute, die damit schon Erfahrungen gesammelt haben. Was ist denn eine schöne und lesbare Möglichkeit, um z.B. ein Poker-Kartendeck zu repräsentieren? Mir würde jetzt spontan eine bitflag-Array einfallen, in dem man dann, je nach benötigten Karten, einfach die entsprechenden Flags setzt. So kann man per random auch leicht Zufallsindizes ziehen, um sich Hände und Boardkarten zu erzeugen. Die Handevaluation ist dann prinzipiell auch nicht schwer, nur sind so Indizierungen wie rank*4+suit dann ziemlich hässlich. Kann man das noch schöner machen?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

23.05.2013, 13:15

Ich finde das hängt von mehreren Faktoren und auch deinem allgemeinen Klassendesign ab. Ich würde mir zum Beispiel eine Klasse für Karten schreiben. Farbe (Karo, Herz, Pik, Kreuz) würde ich vermutlich als Enumeration angeben. Kartenwert (7, 8, 9, 10, Bube, Dame, König, Ass) würde ich vermutlich auch als Enumeration darstellen. Für den Zahlenwert der Karte würde ich dann eine Funktion zum Mappen der Wertigkeiten schrieben (zum Beispiel 7 = 0 Punkte, Ass = 11 Punkte). Je nach Spiel könnte man dann diese Funktion austauschen. Der Vorteil wäre die einfache Verständlichkeit und Bedienbarkeit. Funktionen für Zufällige Hände zu schreiben wäre hier auch nicht sonderlich schwer. Eine Hand selbst wäre dann eine Liste von Karten. Für einen Kartenstapel könnte man je nach Situation einen Stack benutzen, wobei ich die Erfahrung gemacht habe, dass man doch recht oft Funktionen haben möchte, die ein Stack nicht liefert. Da kommt es dann aber immer auf die Implementierung an. Wenn man beliebige Algorithmen mit der Datenstruktur realisieren kann (zum Beispiel durch das vorhanden sein von Iteratoren), dann sollte der Stack gut geeignet sein. Ist meiner Meinung nach so einfacher als mit irgendwelchen Bitflags hantieren zu müssen. Hier sieht man halt direkt was gemeint ist.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

23.05.2013, 13:28

Bei unserem Spiel sind Karten einzelne Klassen (relativ vereinfacht gesagt) und ein Deck ist eine Klasse vom Typ Stapel. Ein Stapel ist wiederum eine Klasse, die Karten in einer Liste verwaltet und ein paar Funktionen hat, um damit zu arbeiten, z.B. Shuffle(). Eine Hand des Spielers kann so also auch ein Stapel sein, genau wie ein Ablagestapel, wenn es so etwas gibt.

Hilft das dir weiter?

Werbeanzeige