[C++] Daten von einer Klasse in eine ander verschieben?

g4mmler

Mitglied
Hi,

ich versuche momentan ein Kartenspiel zu programmieren.
Dazu existiert eine Klasse Card und eine Klasse Deck.
Aus der Klasse Stapel entstehen 2 Objekte die jeweils ein Array aus Cards besitzen.

Code:
class CCard
{...};
class CDeck
{
public:
...
private:
CCard Stapel[50];
}

CDeck Stapel1;
CDeck Stapel2;

Ich möchte nun ein Karte von Stapel 1 ziehen und auf stapel 2 legen.
D.h. die oberste Karte ( Stapel[49] ) soll auf den anderen stapel gelegt werden.

Sie soll also in einem der arrays gelöscht oder zumindest die Werte auf null gesetzt werden
und in dem anderen die Werte eingefügt werden

Am liebsten wäre mir eine Lösung bei der ich mit der syntax:

Code:
Stapel1 > Stapel2;

die Karte übertragen kann.

Ich würde mich aber über jeden Lösungsweg freuen, auch wenn er komplett von meinen Anfängen abweicht.

mfg g4mmler
 
Zuletzt bearbeitet:
Ich weiß jetzt nicht was du in deiner CCard Klasse für Member hast, aber theoretisch kannst du einfach sagen (vorrausgesetzt du setzt in deiner CDeck Klasse die Stapel unter public statt unter private):

//Werte der obersten Stape2-Karte mit denen der obersten Stapel1-Karte neu setzen
Stapel2[49] = Stapel1[49];
//Werte der obersten Stapel1-Karte löschen
Stapel[49].iBeispielmember1 = 0;
Stapel[49].fBeispielmember1 = 0.0f;

(Wenn du dein private nicht in public ändern willst, dann musst du einfach eine Funktion in deine CDeck Klasse schreiben, die dann die Werte setzt)

Damit werden die Werte der obersten Stapel2-Karte auf die der obersten Stape1-Karte gesetzt. Dies funktioniert allerdings nur wenn du in deiner CCard Klasse nur simple Member wie int oder float Variablen hast, arbeitest du auch mit Zeigern wirds komplizierter.


Wenn du Stapel 2 eine Karte HINZUFÜGEN willst, musst du entweder ihren CCard-Array auf die maximale Kartenanzahl erhöhen, in diesem Fall wohl [100], oder du musst dynamisch Speicher reservieren (was ich dir auch empfehle, wenn du dich damit auskennst, da dies wesentlich 'sauberer' ist ;) )
 
Da ein Array immer eine feste Anzahl von Elementen hat, ist es für Deinen Zweck imho nicht die ideale Lösung. Wie schon von WhiteGandalf vorgeschlagen, würde ich ein dynamisches Konstrukt wählen, also eine von vector<CCard> oder ein list<CCard> abgeleitete Klasse. Dann kannst du einen Operator '>>' definieren, der das letzte Element des der list an eine andere list anhängt und es von der ersten list entfernt.
 
Ok danke für die hilfe.
Werde mich erstmal ein bisschen mit der dynamischen speicherverwaltung beschäftigen.
Haben wir an der uni noch nicht als thema gehabt und ich bin auch zu Hause noch nicht so weit gekommen.
Noch eine frage:
Liste gibt es doch als fertige klasse in einer bestimmten systemdatei oder?

mfg g4mmler
 
Zurück