Eine textbasierte Benutzeroberfläche
Nim-Spiel - einfache Variante
Mit einer einfachen textbasierten Benutzeroberfläche soll der Benutzer bei der Durchführung des Nim-Spiels geführt werden. Ein Programmablauf könnte z.B. zu folgendem Dialog auf dem Bildschirm führen.
>>> 16 Du bist dran! Anzahl: 1 15 Der Computer ist dran! Anzahl: 2 13 Du bist dran! Anzahl: 3 10 Der Computer ist dran! Anzahl: 1 9 Du bist dran! Anzahl: 3 6 Der Computer ist dran! Anzahl: 1 5 Du bist dran! Anzahl: 3 2 Der Computer ist dran! Anzahl: 1 1 Du bist dran! Anzahl: 1 0 Gewinner: Computer >>>
Der Benutzer wird immer wieder aufgefordert, seinen Zug (als Anzahl der zu ziehenden Streichhölzer) einzugeben. Er wird zudem ständig über die Züge des Computers und über die aktuelle Spielposition (d.h. die Anzahl der Streichhölzer auf dem Haufen) informiert.
Die Durchführung des Dialogs soll von einem geeigneten Objekt übernommen werden. Dieses Objekt soll die Durchführung des Spiels in Zusammenarbeit mit den Datenmodellobjekten übernehmen und dabei insbesondere die Ein- und Ausgaben auf dem Bildschirm koordinieren.
#----------------------------------------------------------- # Textbasiere Benutzeroberfläche #----------------------------------------------------------- class UIManager(object): __slots__ = ('rSpielmanager', 'rHaufen') def __init__(self, pSpielmanager, pHaufen): self.rSpielmanager = pSpielmanager self.rHaufen = pHaufen def starten(self): self.rSpielmanager.ersterSpieler() while not self.rSpielmanager.spielBeendet(): print() print(self.rHaufen.getPosition()) print() if self.rSpielmanager.getAktuellerSpieler() == 'Mensch': print('Du bist dran!') zug = int(input('Anzahl: ')) self.rSpielmanager.zugDurchfuehrenMensch(zug) elif self.rSpielmanager.getAktuellerSpieler() == 'Computer': print('Der Computer ist dran!') self.rSpielmanager.zugDurchfuehrenComputer() print('Anzahl:' , self.rSpielmanager.getZugComputer()) print() print(self.rHaufen.getPosition()) print() print('Gewinner: ', self.rSpielmanager.getGewinner()) #----------------------------------------------------------- # Interaktive Durchführung des Spiels #----------------------------------------------------------- from nim_einhaufen import * # Erzeugung der Datenmodell-Objekte haufen = Nimhaufen(16) mSpieler = SpielerMensch(haufen) cSpieler = SpielerComputer(haufen) spielmanager = Spielmanager(haufen, mSpieler, cSpieler) # Erzeugung und Aktivierung des UI-Objekts tuimanager = UIManager(spielmanager, haufen) tuimanager.starten()
Beachte, dass hier eine implementierte Version des Datenmodells, die sich in der Datei nim_einhaufen.py befindet, benutzt wird.
Aufgabe 1
(a) Teste die Benutzeroberfläche.
(b) Erkläre, wie das UIManager
-Objekt den Spieldialog erzeugt.
Erkläre auch, wie das UIManager
-Objekt mit den Datenmodellobjekten
kooperiert. Verdeutliche mit einem Objektdiagramm die Beziehungen zwischen
den beteiligten Objekten.
Aufgabe 2
Entwickle analog ein UIManager
-Objekt zum Nim-Spiel mit mehreren Haufen.