Übungen
Aufgabe 1: Objekte und ihre Beziehungen darstellen
(a) Analysiere die folgende Implementierung eines Würfelspiels. Beschreibe in Worten, welche Objekte hier jeweils miteinander in Beziehung stehen. Verdeutliche die Objektkonstellation zu einer selbst gewählten Spielsituation mit einem Objektdiagramm.
#----------------------------------------
# Wuerfel
#----------------------------------------
from random import randint
class Wuerfel(object):
def __init__(self):
self.augen = randint(1, 6)
def werfen(self):
self.augen = randint(1, 6)
def getAugen(self):
return self.augen
#----------------------------------------
# Spieler
#----------------------------------------
class Spieler(object):
def __init__(self, pName):
self.name = pName
self.wuerfel = None
self.punkte = 0
def setWuerfel(self, pWuerfel):
self.wuerfel = pWuerfel
def wuerfeln(self):
self.wuerfel.werfen()
self.punkte = self.punkte + self.wuerfel.getAugen()
def getName(self):
return self.name
def getPunkte(self):
return self.punkte
#----------------------------------------
# Test
#----------------------------------------
wuerfel1 = Wuerfel()
wuerfel2 = Wuerfel()
spieler1 = Spieler('Zauberhand')
spieler1.setWuerfel(wuerfel2)
spieler2 = Spieler('Loser')
spieler2.setWuerfel(wuerfel1)
for i in range(5):
spieler1.wuerfeln()
spieler2.wuerfeln()
print('Punktestand', spieler1.getName(), ':', spieler1.getPunkte())
print('Punktestand', spieler2.getName(), ':', spieler2.getPunkte())
print()
(b) In der gezeigten Implementierung des Spiels wird eine Kennt-Beziehung benutzt. Woran erkennt man das? Ändere die Implementierung so ab, dass Hat-Beziehungen anstelle der Kennt-Beziehungen benutzt werden.
(c) Wir ändern das Spielsystem wie folgt ab:
Beschreibe, was sich geändert hat. Implementiere und teste das neue Spielsystem.
(d) Ein Spielmanager soll eine feste / beliebige Anzahl Spieler verwalten und zum Spielen aktivieren. Zudem soll der Spielmanager nach den Spielrunden den Gewinner ermitteln.
Entwickle zunächst ein Objektdiagramm für das erweiterte Spielsystem. Beschreibe das Spielsystem auch mit einem Klassendiagramm. Implementiere und teste das gesamte Spielsystem.
(e) Ändere das Spielsystem aus (d) wie folgt ab: Der Spielmanager verwaltet und aktiviert eine beliebige Anzahl von Spielern. Nach jeder Spielrunde scheidet der Spieler aus, der die geringste Punktzahl hat. Wenn es keinen eindeutigen Verlierer gibt, scheidet kein Spieler aus. Gespielt wird solange, bis der Gewinner feststeht.
Aufgabe 2: Objekte und ihre Beziehungen modellieren und implementieren
Wir betrachten das Spiel "chuck a luck".
Das Spiel chuck-a-luck
wird folgendermaßen gespielt:
Der Spieler / die Spielerin zahlt zuerst einen Dollar (Cent) als Einsatz. Diesen setzt er / sie auf eine Zahl des Spielfeldes. Anschließend wirft er / sie drei Würfel. Der Spielanbieter bestimmt, wie viele Würfel mit der gesetzten Spielzahl übereinstimmen. Gibt es keine Übereinstimmungen, ist der Einsatz verloren, ansonsten zahlt der Spielanbieter den Einsatz zurück und zusätzlich für jede Übereinstimmung einen Dollar (Cent).
Hier ein noch unvollständiger Klassenentwurf zu diesem Spiel.
(a) Erstelle zunächst ein Objektdiagramm für eine Spielsituation. Ergänze dann das Klassendiagramm entsprechend.
(b) Implementiere das Spiel passend zum Klassendiagramm. Teste die Implementierung anschließend mit folgenden Testprogramm:
#----------------------------------------
# Test
#----------------------------------------
# Erzeugung und Verbindung der Objekte
# ...
# Ausgabe
print('Wuerfel: ', wuerfelA.getAugen(), wuerfelB.getAugen(), wuerfelC.getAugen())
print('Konto : ', konto.getStand())
print()
# Durchführung des Spiels
for i in range(10):
spieler.spielen(2)
spielanbieter.gewinnAuszahlen()
# Ausgabe
print('Wuerfel: ', wuerfelA.getAugen(), wuerfelB.getAugen(), wuerfelC.getAugen())
print('Konto : ', konto.getStand())
print()