Ein Beispiel eines Kartenspiels


Als ein umfangreiches Beispiel für die Nachbildung der wirklichen Welt lassen Sie uns eine Variante des Programms CARDS aus Seite 32 betrachten. Dieses Programm, CARDOBJ, ist so umgeschrieben worden, daß Objekte verwendet werden. Es führt zwar keine neuen Konzeptionen ein, aber es verwendet fast alle Programmierkonzepte, die wir bisher besprochen haben.

Wie beim Beispiel CARDS erstellt CARDOBJ drei Karten mit festgesetzten Kartenwerten und tauscht sie untereinander aus, um dadurch den Gegenspieler über die genaue Lage der Karten zu verwirren. Aber CAEDOBJ ist jede Karte ein Objekt der Klasse card. Hier folgt das Listing:

// cardobj.cpp // Spielkarten als Objekte #include <iostream.h> enum Suit { kreuz, karo, herz, pik }; const int bube = 11; // Von 2 bis 10 handelt es sich const int dame = 12; // um Ganzzahlen ohne Namen const int koenig = 13; const int as = 14; enum Boolean { false, true }; class card { private: int number; // 2 bis 10, bube, dame, koenig, as Suit suit; // kreuz, karo, herz, pik public: card() // Konstruktor 1 { } card(int n, Suit s) // Konstruktor 2 { suit = s; number = n; } void display(); // Karte anzeigen Boolean isEqual(card); // Gleiche Karte? }; void card::display() // Karte anzeigen { if(number >= 2 && number <= 10) cout << number << " "; else switch(number) { case bube: cout << "Bube "; break; case dame: cout << "Dame "; break; case koenig: cout << "Koenig "; break; case as: cout << "As "; break; } switch { case kreuz: cout << "Kreuz"; break; case karo: cout << "Karo"; break; case herz: cout << "Herz"; break; case pik: cout << "Pik"; break; } } Boolean card::isEqual(card c2) // Rückgabe des Wertes wahr, // Wenn Karten übereinstimmen { return (number==c2.number && suit==c2.suit) ? true : false; } void main() { card temp,chosen,prize; // Karte definieren int position; card card1 = { 7, kreuz }; // Initialisierung und Definition von card1 cout << "\nKarte 1 ist "; card1.display(); // card1 anzeigen card card2 = { bube, herz }; // Initialisierung und Definition von card2 cout << "\nKarte 2 ist "; card2.display(); // card2 anzeigen card card3 = { as, pik }; // Initialisierung und Definition von card3 cout << "\nKarte 3 ist "; card3.display(); // card3 anzeigen prize = caed3; // prize ist die zu ratende Karte cout << "Ich tausche Karte 1 und Karte 3\n"; temp = caed3; card3 = card1; card1 = temp; cout << "Ich tausche Karte 2 und Karte 3\n"; temp = card3; card3 = card2; card2 = temp; cout << "Ich tausche Karte 1 und Karte 2\n"; temp = card2; card2 = card1; card1 = temp; cout << "Nun, wo befindet sich (1, 2, oder 3) die Karte "; prize.display(); // Gewinnkarte anzeigen cout << "? "; cin >> position; Einlesen der vom Anwender geratenen Position switch(position) { // Die getroffene Wahl des Anwenders setzen case 1: chosen = card1; break; case 2: chosen = card2; break; case 3: chosen = caed3; break; } if(chosen.isEqual(prize)) // Ist die gewählte Karte die Gewinnkarte? cout << "Das ist richtig! Sie haben gewonnen!\n"; else cout << "Schade. Sie haben verloren.\n"; cout << " Sie haben folgende Karte gewählt: "; chosen.display(); // Gewählte Karte anzeigen cout << endl; }

Hier ist die Ausgabe, wenn der Anwender die falsche Karte auswählt:

Karte 1 ist 7 Kreuz
Karte 2 ist Bube Herz
Karte 3 ist As Pik
Ich tausche Karte 1 und Karte 3
Ich tausche Karte 2 und Karte 3
Ich tausche Karte 1 und Karte 2
Nun, wo befindet sich (1, 2 oder 3) die Karte ? 1
Schade. Sie haben verloren. Sie haben folgende Karte gewählt:
7 Kreuz


39