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

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.

X

Fehler melden

X

Suche