PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage bzgl. Haltung von Klasseneigenschaften



`kk
21-10-2005, 11:39
Hi Leute,
ich habe eine Frage bezueglich eines Programmdesigns.

Undzwar habe ich vor mir fuer das Kartenspiel Magic eine kleine
Deckverwaltung (bis jetzt in C++) zu basteln.

Eine Karte hat z.B. eine Eigenschaft "Farbe".
Moegliche Werte sind dabei z.B. schwarz, blau, rot... usw.
Es kommen im Programmverlauf keine neuen Farben dazu.

Wie wuerdest ihr das in C++ am Besten abbilden?
Mir fallen da folgende Moeglichkeiten ein:

1) Ein enum pro Eigenschaft der Karte
2) Eine "CardProperty" Klasse mit - z.B. - einem const vector fuer
moeglichen Werte der Eigenschaft
3) Was anderes, was mir noch nicht eingefallen ist..

Bei 1) habe ich Zahlen, was ziemlich unuebersichtlich wird,
wenn der Großteil der Eigenschaften einer Karte eine Ganzzahl ist.

Danke fuer Tipps und Ideen.

Gruß
Kai

SeeksTheMoon
21-10-2005, 11:45
ein vector oder eine andere Klasse gingen zwar problemlos, aber ein enum wird am meisten Platz sparen und am wenigsten Verwaltungs-Overhead haben.

`kk
21-10-2005, 11:50
Es ging mir rein um die Uebersicht.
Wenn's um den Platz gegangen waere, koennte ich gleich
direkt die Werte so reinschreiben wie sie sind... ;)

Aber ok.. danke fuer dein Tipp.
Hat jemand evtl. noch ne andere Idee außer die zwei
bereits genannten?

Danke & Gruß
Kai

Boron
21-10-2005, 14:09
Wo hast du bei bei einem enum Zahlen?
Da arbeitet man doch nur noch mit den sprechenden Namen:

typdef enum
{
SCHWARZ,
BLAU,
ROT
} CARD_COLOUR;Dass dann SCHWARZ intern den Wert 0 bekommt, BLAU den Wert 2 usw. das ist ja dann nicht mehr wichtig.

`kk
21-10-2005, 14:26
Fuer die Farbe kann ich ein enum nehmen ja...

Aber es gibt z.B. auch einige Eigenschaften, wo nach und
nach mehrere moegliche Werte hinzu kommen.

Ich habe z.B. eine Textdatei mit allen Karten, die ich
beim Programmstart einlese und Kartenobjekte erstelle.
Es gibt verschiedene Kartentypen, die ich vorher nicht kenne.
Zumindest dafuer (Sprich: Fuer den Kartentyp) muesste ich
eine Klasse zusammenbauen. Und wenn ich diese sowieso hab,
dachte ich mir, kann ich sie auch gleich fuer die Farbe benutzen.

Danke fuer eure Antworten.

Gruß
Kai

anda_skoa
21-10-2005, 15:54
Eigenschaften die sich nicht gegenseitig ausschließen, kann man leichter in getrennten Variablen halten.

zB ein bool für "Fliegend", ein bool für "Artefakt", etc

Theoretisch kann man dann immer noch beim Zugriff kontrollieren, daß keine unmöglichen Kombination entstehen, wie Fliegend + Trampelschaden.

Allerdings kann eine Karte mehrere Zustände mit unterschiedlichen Eigenschaften haben, wenn ich nicht irre.

Daher könnte man die Zustände in eine extra Klasse geben und in der Karte dann Objekte dieser Zustände.

zB einen Zustand für getapt und einen für normal.

Ciao,
_

`kk
21-10-2005, 16:11
Hallo anda_skoa,
bei diesen Eigenschaften ist es relativ klar, diese
so abzuspeichern. Entweder kann die Karte fliegen, oder nicht. ;)

Aber da das für eine Deckverwaltung nicht besonders
von Belangen ist, kann ich das getrost weglassen.

Ich will ja kein Spiel schreiben...


Aber mir ging es jetzt ja wirklich eher um die Eigenschaften,
wo man im Prinzip ne Auswahl von mehreren Werten hat...
diese Werte aber dynamisch erzeugt werden.

Aber danke trotzdem fuer dein Tipp!

Gruß
Kai

anda_skoa
21-10-2005, 17:10
Deckverwaltung also mehr im Sinne von Schallplattenverwaltung, also welche man hat, bzw wieviel Stück davon?

Welche der Eigenschaften möchtest du denn dabei benutzen?

Ciao,
_

`kk
21-10-2005, 18:17
Hallo anda.

Naja..., fast. ;)

Ich moechte *alle* Karten im Programm
zur Verfuegung stellen, damit man aus diesem Kartenpool
(ca. 15000 Karten) heraus Decks erstellen kann.

Diese sollen dann als Txt-, XML-, HTML- (whatever ;))
exportiert werden koennen.

Wenn ich dafuer erstmal die Logik habe, werde
ich wahrscheinlich auch eine GUI dafuer bauen.

Und wo ich grad dabei bin... wer gerne mitmachen moechte,
ich suche noch Hilfe. ;) Das Programm wird entweder in
C++, Python oder OCaml geschrieben. So ganz festlgelegt
habe ich mich da aber noch nicht.

Gruß
Kai