TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
dass die ereignisgesteuerte Programmierung ein neues Programmierkonzept ist, das aber den alltäglichen Erfahrungen sehr nahe kommt. Statt dass du mit einem Programm der Turtle in zeitlicher Abfolge Befehle erteilst, könntest du die Turtle so steuern, dass sie bei bestimmten Ereignissen ihren Zustand ändert. |
MUSTERBEISPIEL ZU CALLBACKS |
Nach dem Start des Programms verharrt die Turtle in der Homeposition, bis du ihr mit einem Mausklick befiehlst, an die Stelle des Mauscursors zu springen. Die Programmiertechnik, um auf einen Mausevent zu reagieren, ist die Folgende:
|
MERKE DIR... |
Die neue Programmiertechnik ist daran zu erkennen, dass die Funktion drawDot(x, y) nirgends von deinem Programm aufgerufen wird. Es ist vielmehr das System, dass sie beim Auftreten eines Ereignisses aufruft. Eine solche Funktion nennen wir Callbackfunktion oder kurz Callback. |
DEIN ERSTES GAME |
Der Einfachheit halber verwendest du im Programm keine Zeichen, sondern färbst bei einem Mausklick die Felder je nach Spieler rot oder grün. Dabei verwendest du den Füllbefehl fill(), mit dem die Turtle das geschlossene Gebiet ausfüllt, in dem sie sich gerade befindet.
from gturtle import * def square(): repeat 4: forward(50) right(90) def drawGrid(): for x in range(3): for y in range(3): setPos(50 * x, 50 * y) square() def fillSquare(x, y): global player if player == 1: setFillColor("red") player = 2 elif player == 2: setFillColor("green") player = 1 setPos(x, y) fill() player = 1 makeTurtle(mouseHit = fillSquare) hideTurtle() drawGrid() |
MERKE DIR... |
Da player sowohl im Hauptprogramm wie in der Funktion fillSquare(x, y) verwendet wird, nennt man sie eine globale Variable. Eine Variable die hingegen nur in einer Funktion verwendet wird, nennt man eine lokale Variable. Du wirst als Eigentätigkeit das Programm noch etwas verbessern. |
ZUM SELBST LÖSEN |
|
5*. |
|
Es gibt in der Turtlegrafik viele weitere Callbacks für Maus- und Keyboardevents. Sie sind in der Dokumentation beschrieben.
Die Registrierung kann auch mit der Annotationszeile @onMouseHit erfolgen:
from gturtle import * @onMouseHit def mouseHit(x,y): moveTo(x, y) dot(30) makeTurtle()
Es ist Geschmackssache, was man vorzieht.