Verwaltung der Spielmarken
Zielsetzung
Bisher haben wir die Anzahl der Spielmarken eines Spielers mit einem entsprechenden Attribut verwaltet.
Die Spielmarken, die in die Kasse eingezahlt werden, haben wir dagegen mit einem eigenen Objekt verwaltet.
Im Folgenden soll die Verwaltung von Spielmarken vereinheitlicht werden.
Verwaltung der Spielmarken der Spieler mit Objekten
Die Spielmarken der Spieler sollen jetzt ebenfalls mit passenden Objekten verwaltet werden.
Es bietet sich an, hier auch Objekte der Klasse Kasse
zu benutzen.
Bei der Erzeugung dieses zusätzlichen Kasse
-Objekts gehen wir einen anderen Weg.
Dieses zusätzlichen Kasse
-Objekt soll vom Spieler
-Objekt
erzeugt (und vernichtet) werden. Beachte, dass das Spieler
-Objekt jetzt Referenzen
auf zwei Kasse
-Objekte hat.
Aufgabe 1
Weiter unten findest du den Quelltext einer Implementierung des abgeänderten Modells. Analysiere diese Implementierung unter folgenden Gesichtspunkten:
(a) Warum ist das Spieler
-Objekt für die Erzeugung des neuen Kasse
-Objekts
zuständig? An welcher Stelle im Quelltext zeigt sich das?
(b) Der Konstruktor der Klasse Kasse
wurde etwas abgeändert (Übergabe eines Startwerts bei der Erzeugung).
Warum ist diese Veränderung erforderlich? Wo muss sie überall berücksichtigt werden?
(c) Wie wird der Markenaustausch beim Spielen jetzt realisiert? Was sind die Vorteile der überarbeiteten Version?
#----------------------------------------------------------- # Würfel #----------------------------------------------------------- from random import randint class Wuerfel(object): __slots__ = ('augen') def __init__(self): self.augen = randint(1, 6) def werfen(self): self.augen = randint(1, 6) #print(self.augen) def getAugen(self): return self.augen #----------------------------------------------------------- # Kasse #----------------------------------------------------------- class Kasse(object): __slots__ = ('stand') def __init__(self, pStartwert): self.stand = pStartwert def auszahlen(self, pBetrag): self.stand = self.stand - pBetrag def einzahlen(self, pBetrag): self.stand = self.stand + pBetrag def getStand(self): return self.stand #----------------------------------------------------------- # Spieler #----------------------------------------------------------- class Spieler(object): __slots__ = ('name', 'rMeineKasse', 'rWuerfel1', 'rWuerfel2', 'rSpielKasse') def __init__(self, pName, pMarken, pWuerfel1, pWuerfel2, pSpielKasse): self.name = pName self.rMeineKasse = Kasse(pMarken) self.rWuerfel1 = pWuerfel1 self.rWuerfel2 = pWuerfel2 self.rSpielKasse = pSpielKasse def spielen(self): self.rWuerfel1.werfen() self.rWuerfel2.werfen() augenGesamt = self.rWuerfel1.getAugen() + self.rWuerfel2.getAugen() if augenGesamt == 12: self.rMeineKasse.auszahlen(12) self.rSpielKasse.einzahlen(12) elif augenGesamt == 11: anzahlMarken = self.rSpielKasse.getStand() self.rSpielKasse.auszahlen(anzahlMarken) self.rMeineKasse.einzahlen(anzahlMarken) else: differenzBetrag = 11 - augenGesamt self.rMeineKasse.auszahlen(differenzBetrag) self.rSpielKasse.einzahlen(differenzBetrag) def getName(self): return self.name def getMarken(self): return self.rMeineKasse.getStand() #----------------------------------------------------------- # Spielmanager #----------------------------------------------------------- class Spielmanager(object): __slots__ = ('rSpieler1', 'rSpieler2', 'rSpieler3') def __init__(self, pSpieler1, pSpieler2, pSpieler3): self.rSpieler1 = pSpieler1 self.rSpieler2 = pSpieler2 self.rSpieler3 = pSpieler3 def spielrundeDurchfuehren(self): self.rSpieler1.spielen() self.rSpieler2.spielen() self.rSpieler3.spielen() #----------------------------------------------------------- # Test #----------------------------------------------------------- w1 = Wuerfel() w2 = Wuerfel() k = Kasse(0) sp1 = Spieler('Winner', 100, w1, w2, k) sp2 = Spieler('Looser', 100, w1, w2, k) sp3 = Spieler('Zitterhand', 100, w1, w2, k) m = Spielmanager(sp1, sp2, sp3) m.spielrundeDurchfuehren() print(sp1.getMarken(), sp2.getMarken(), sp3.getMarken())