TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
SPIELBESCHREIBUNG |
Das Spielfeld besteht aus einer Lampe, welche in den Farben rot, gelb, grün und blau leuchten kann, und im ausgeschalteten Zustand weiss ist. Es gibt zudem 4 kreisförmige Schaltflächen (Buttons), mit den Farben rot, gelb, grün und blau.
|
PHASE 1: DARSTELLUNG DES SPIELFELDES |
Vorgehen: Verwende das folgende Programmgerüst. # Ex1.py from gturtle import * def showLamp(col): pass def showButton(number): pass def setup(): pass # ------------------ main ------------------ Options.setPlaygroundSize(400, 400) makeTurtle() ht() penUp() clear("black") setTitle("Brain Game") addStatusBar(30) setup()
Funktion showLamp(col)
|
PHASE 2: DARSTELLUNG DES SPIELFELDES |
Vorgehen: setStatusText("Showing sequence with length: " + str(n) + "...") seq = [] for i in range(n): seq.append(random.randint(0, 3)) showSequence() |
PHASE 3: MIT DER MAUS DIE LAMPE EIN-/AUSSCHALTEN |
Nach der Anzeige der Sequenz mit 3 Farben, soll der Benutzer durch Drücken auf die Farbbuttons die Lampe mit derselben Farbe einschalten können. Beim Loslassen erlischt die Lampe wieder. Vorgehen: @onMousePressed def pressed(x,y): moveTo(x, y) if getPixelColorStr() == "red": buttonIndex = 0 ... @onMouseReleased def released(x,y): showLamp(-1) |
PHASE 4: DIE SEQUENZ ÜBERPRÜFEN |
Nach der Anzeige der Sequenz mit 3 Farben beginnt der Benutzer mit der Wiederholung der Farbsequenz durch Drücken der Buttons. Macht er einen Fehler, so bricht das Spiel sofort mit einer IsOver-Meldung ab, macht er es richtig, so wird eine Erfolgsmeldung ausgeschrieben. Vorgehen: if seq[clickCount] == buttonIndex:
überprüfen, ob der richtige Klick gemacht wurde. Ist dies der Fall, so erhöht man clickCount, andernfalls setzt man ein Flag isOk = False. Hat man die ganze Sequenz erfolgreich getestet, so setzt man isOk = True. Damit das Hauptprogramm informiert wird, wenn der Test zu Ende ist, verwendet man ein Flag isUserActive und fügt eine Warteschleife ein, die solange läuft, bis die Benutzeraktion beendet ist, also: clickCount = 0 isUserActive = True isOk = False while isUserActive: delay(10) if isOk: setStatusText("Sequence confirmed") else: setStatusText("Sequence failed") Vergiss nicht, im Callback released() die Variablen clickCount, isUserActive und isOk global zu machen. |
PHASE 5: DIE SEQUENZ VERLÄNGERN |
Bisher hast du mit einer festen Sequenzlänge von 3 gespielt. Jetzt musst du noch gemäss der Spielvorgabe die Sequenzlänge von 1 an erhöhen, falls der Benutzer sie richtig erraten hat. Dies tust du solange, bis er einen Fehler macht. Du hast das Programm so gut vorbereitet, dass diese Erweiterung einfach zu implementieren ist. Nach dem setup() und der Initialisierung von n = 1 fügst du den Rest des Programms in eine endlose while-Schleife und erhöhst darin n, wenn der Benutzer erfolgreich ist. Macht er einen Fehler, so brichst du die Schleife mit break ab. |
PHASE 6: DAS SPIEL ROBUST MACHEN |
Mit der Phase 5 kann man das Spiel bereits spielen, wenn sich der Benutzer an bestimmte Regeln hält und nicht in einem falschen Moment mit der Maus klickt. Darum musst du das Programm noch so verbessern, dass ein Mausklick zum falschen Zeitpunkt zu keiner Katastrophe führt. Dazu führst du ein weiteres Flag isMouseEnabled ein, dass nur dann auf True steht, wenn der Benutzer die Maus verwenden darf. Ist isMouseEnabled False, so kehrst du einfach in den Callbacks ohne weitere Aktion zurück. def pressed(x,y): if not isMouseEnabled: return ... def released(x,y): if not isMouseEnabled: return ... |
VERBESSERUNGEN, ERGÄNZUNGEN |
Du kannst das Spiel noch nach deinen Ideen erweitern, beispielsweise:
|