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())