TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
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 |
|
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). |