TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
nim

ARBEITSBLATT 1: Zweidimensionales NIM-Spiel

 

 

SPIELBESCHREIBUNG

 

Zu Beginn wird ein Spielfeld mit blauen Steinen angezeigt. Es erscheint ein gelber Cursor oben links. Man kann diesen mit den Cursortasten bewegen. Mit der Select-Taste nimmt man einen Stein weg. Man kann beliebig viele Steine wegnehmen, aber alle müssen auf derselben Zeile sein. Hat man mindestens einen Stein weggenommen, so beendet man seinen Zug mit der OK-Taste und gibt die Oxocard dem Spielpartner.

Wer den letzten Stein wegnehmen muss, hat verloren.

 

 

TEILAUFGABE 1: SPIELFELD ZEICHNEN

 

Programmiere die Funktion

drawBoard(s)

Sie zeichnet das Spielfeld mit den blauen Steinen auf 3 Zeilen. Die oberste Zeile hat die Länge s und jede darunter liegende Zeile einen Stein weniger.  Die Funktion gibt die Totalzahl der gelegten Steine zurück.

Teste mit:

size = 5
nbStones = drawBoard(size)
sleep(3)
display(nbStones)

 

 

TEILAUFGABE 2: AUSWAHL MIT CURSORTASTEN

 

Programmiere die Funktion

select(pix) mit pix = (x, y)

Sie rettet den aktuellen Zustand (Farbe schwarz oder blau) bei pix und setzt dort das Cursorpixel (gelb). Man kann dieses mit den Cursortaten L3 (up), L2 (down), L1 (left), R3 (right) verschieben und das Pixel darunter erscheint wieder wie es war. Drückt man R2 (Select), so verschwindet der Stein und seine Koordinaten werden als Tupel zurückgegeben, aber nur, falls sich unter dem Cursor ein Stein (blaues Pixel) befindet.

Teste mit:

size = 4
drawBoard(size)
pix = (0, 0)
pix = select(pix)
display(10 * pix[0] + pix[1])

 

 

TEILAUFGABE 3: CURSORBEWEGUNG EINSCHRÄNKEN

 

 

Man soll sich mit dem Cursor nur innerhalb des dreizeiligen Spielfeld-Rechtecks bewegen können.

 

 

TEILAUFGABE 4: SPIELZUG MACHEN

 

Programmiere die Funktion

makeMove()

Sie macht einen Zug. Dabei können beliebig viele Steine weggenommen werden, aber mindestens einer und alle auf derselben Zeile. Beim Klicken der OK-Taste  oder wenn es keine Steine mehr hat kehrt die Funktion zurück.  Darum musst du in einer globalen Variable nbStones die Anzahl der verbleibenden Steine zählen. Um sicher zu stellen, dass alle Steine auf der gleichen Zeile weggenommen werden, kannst du eine Variablen nbTaken einführen, die du vor jedem Zug wieder auf 0 setzt.

Teste mit

size = 4
nbStones = drawBoard(size)
while True:
    nbTaken = 0
    makeMove()
    if nbStones == 0:
        break
    sleep(2)
insertBigChar("X", RED)

 

 

*ERWEITERUNG AUF ZWEI MITEINANDER SPIELENDE OXOCARDs

 

Unter Verwendung der Klasse Radio (siehe Kapitel TCP/IP) gibt es den Spieler A und den Spieler B, wobei A den ersten Zug macht. Nur der gerade Spielende sieht den Cursor und kann damit Steine entfernen. Die Wegnahme eines Steins wird also Koordinatenpaar xy an den Partner übertragen, also beispielsweise "23" für x = 2 und y = 3. Dort wird der Stein auch entfernt, sodass beide Spieler immer ein aktuelles Spielfeld haben. Beim Drücken der OK-Taste wird "OK" übertragen.

Bei Spielende wird demjenigen, der den letzten Stein entfernt, ein "L" (Loser) gezeigt, beim Gewinner ein "W" (Winner).