Simulation eines Kartenstapels
Anforderungen an ein Kartenstapel-Softwareobjekt
Ein Softwareobjekt zur Simulation eines Kartenstapels sollte sich in wesentlichen Punkten genauso verhalten wie ein realer Kartenstapel. Aber, was sind diese wesentlichen Punkte?
Ein Kartenstapel besteht aus einer Ansammlung noch vorhandener Karten. Einen Kartenstapel kann man mischen. Wenn er nicht leer ist, dann kann man die oberste Karte ziehen.
Ein Softwareobjekt zur Simulation eines Kartenstapels muss also die noch vorhandenen Karten verwalten können. Zudem muss es Operationen zur Verarbeitung der verwalteten Daten vorsehen, die den Operationen eines Kartenstapels entsprechen: Mischen der Karten, Ziehen einer Karte, Überprüfen, ob überhaupt noch Karten vorhanden sind.
Wir verdeutlichen ein solches Softwareobjekt mit einem (erweiterten) Objektdiagramm.
Erzeugung und Verwendung eines Kartenstapel-Softwareobjekts
Wir stellen hier einen Bauplan zur Erzeugung von Kartenstapel-Softwareobjekten zur Verfügung. Du musst die Details des Bauplans nicht verstehen, um die nach dem Bauplan erzeugten Softwareobjekte nutzen zu können. Wir werden uns in einem der folgenden Abschnitte genauer mit solchen Bauplänen beschäftigen.
Den Bauplan zur Erzeugung von Kartenstapel-Softwareobjekten findest du in der Datei kartenstapel.py. Lade diese Datei herunter und öffne sie mit dem Python-Editor. Führe den Quelltext mit [Run][Run Module] einmal aus. Beachte, dass beim Ausführen die im Quelltext vorliegende Klassendeklaration vom Python-Ausführsystem übernommen wird. Es wird jedoch kein Ergebnis im Ausführfenster angezeigt. Jetzt kann die Simulation des Kartenstapels beginnen.
Der folgende Python-Dialog zeigt, wie man - mit Hilfe der Klasse Kartenstapel
-
ein Objekt kartenstapel
mit den gewünschten Funktionalitäten
erzeugen kann und wie man dieses neu erzeugte Objekt anschließend nutzt.
>>>
>>> kartenstapel = Kartenstapel()
>>> kartenstapel
<__main__.Kartenstapel object at 0x01362330>
>>> kartenstapel.kartenListe
['X-A', 'X-K', 'X-D', 'X-B', 'X-10', 'X-9', 'X-8', 'X-7',
'P-A', 'P-K', 'P-D', 'P-B', 'P-10', 'P-9', 'P-8', 'P-7',
'H-A', 'H-K', 'H-D', 'H-B', 'H-10', 'H-9', 'H-8', 'H-7',
'K-A', 'K-K', 'K-D', 'K-B', 'K-10', 'K-9', 'K-8', 'K-7']
>>> kartenstapel.mischen()
>>> kartenstapel.kartenListe
['X-9', 'P-10', 'P-D', 'X-D', 'X-8', 'X-A', 'H-10', 'P-7',
'K-10', 'X-7', 'H-D', 'P-9', 'K-7', 'K-9', 'X-K', 'X-10',
'K-A', 'P-B', 'P-K', 'H-A', 'K-K', 'P-8', 'K-B', 'P-A',
'H-7', 'H-9', 'K-8', 'X-B', 'H-K', 'K-D', 'H-B', 'H-8']
>>> kartenstapel.istLeer()
False
>>> kartenstapel.karteZiehen()
'X-9'
>>> kartenstapel.kartenListe
['P-10', 'P-D', 'X-D', 'X-8', 'X-A', 'H-10', 'P-7', 'K-10',
'X-7', 'H-D', 'P-9', 'K-7', 'K-9', 'X-K', 'X-10', 'K-A',
'P-B', 'P-K', 'H-A', 'K-K', 'P-8', 'K-B', 'P-A', 'H-7',
'H-9', 'K-8', 'X-B', 'H-K', 'K-D', 'H-B', 'H-8']
Aufgabe 1
(a) Analysiere den Python-Dialog und beantworte die folgenden Fragen:
- Wie wird das Kartenstapel-Objekt erzeugt?
- Wie inspiziert man die vom Kartenstapel-Objekt verwalteten Daten?
- In welcher Reihenfolge liegen die Karten zu Beginn auf dem Kartenstapel?
- Was bewirkt die Anweisung
kartenstapel.mischen()
? - Wie wird im Python-Dialog eine Karte "gezogen"? Welche Karte ist es hier?
(b) Führe selbst einen solchen Python-Dialog aus.
Erzeuge (wie oben) zunächst ein Objekt kartenstapel
.
Führe mit diesem Objekt ein 17-und-4-Spiel (mit einem einzigen Spieler) durch.
Achte genau auf die Darstellung der Details.
Aufgabe 2
Die Verwendung eines Kartenstapel
-Objekts kann man auch mit einem
Testprogramm erkunden.
(a) Speichere das folgende Testprogramm im selben Ordner ab, in dem auch die Datei kartenstapel.py
mit der Klassendeklaration der Klasse Kartenstapel
gespeichert ist. Führe
das Testprogramm anschließend aus
und erläutere die erzeugten Ausgaben.
from kartenstapel import Kartenstapel
# Testprogramm
kartenstapel = Kartenstapel()
print(kartenstapel.kartenListe)
print()
kartenstapel.mischen()
print(kartenstapel.kartenListe)
print()
print(kartenstapel.istLeer())
gezogeneKarte = kartenstapel.karteZiehen()
print(gezogeneKarte)
print(kartenstapel.kartenListe)
(b) Entwickle analog ein Testprogramm, das einen Kartenstapel erzeugt, die Karten mischt und anschließend solange die oberste Karte zieht und ausgibt, bis der Kartenstapel leer ist. Benutze dabei die in der Klassendeklaration vorgesehenen Operationen.