#include "Kartenstapel.h" Kartenstapel::Kartenstapel(void) { kartenzahl = KARTENZAHL; //Hier werden 32 Spielkarten dynamisch erzeugt //kleinste Karte ist die 7 int wert = (int)Sieben; for ( int i=0; i < KARTENZAHL; i+=4, wert++) { stapel[i+0] = new Karte(Karo, (Wert)wert); stapel[i+1] = new Karte(Herz, (Wert)wert); stapel[i+2] = new Karte(Pik, (Wert)wert); stapel[i+3] = new Karte(Kreuz, (Wert)wert); } } Kartenstapel::~Kartenstapel(void) { for ( int i=0; i < kartenzahl; i++) delete stapel[i]; } unsigned short Kartenstapel::holeKartenZahl() { return kartenzahl; } Karte Kartenstapel::holeKarte(unsigned short nr) { if ( nr >=1 && nr <= kartenzahl ) { nr--; Karte k(stapel[nr]->holeFarbe(),stapel[nr]->holeWert()); return k; } else { //Ungültige Karte zurück Karte k((Farbe)NULL, (Wert)NULL); return k; } } void Kartenstapel::mischeStapel(void) { srand( (unsigned)time( NULL ) ); Karte* temp; unsigned int k1, k2; //Eine Million mal Karten austauschen --> mischen :-) for ( unsigned int i=0; i < 1000000; i++) { //Zwei Karten bestimmen k1 = rand() % KARTENZAHL; k2 = rand() % KARTENZAHL; //Karten tauschen temp = stapel[k1]; stapel[k1] = stapel[k2]; stapel[k2] = temp; } } bool Kartenstapel::istStapelLeer() { if ( kartenzahl > 0 ) return false; else return true; } Karte Kartenstapel::zieheKarte() { if ( !istStapelLeer() ) { //Eine Karte weniger im Stapel //Index für gezogene Karte passt nun auch kartenzahl--; Karte k(stapel[kartenzahl]->holeFarbe(),stapel[kartenzahl]->holeWert()); //Karte aus Stapel löschen delete stapel[kartenzahl]; return k; } else { //Ungültige Karte zurück Karte k((Farbe)NULL, (Wert)NULL); return k; } }