Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

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.

Objektdiagramm

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.

Objektdiagramm

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

Fehler melden

X

Suche