Ereignisse unterbrechen den normalen Programmablauf. Typisch reagiert ein Programm auf Benutzereingaben, z.B. Mausklicks oder eine Tastatureingabe. Wir können so z.B. eine Turtle erstellen, welche sich mit den Tasten der Tastatur steuern lässt.
Ereignisse muss man aber registrieren: Das Programm-Fenster muss wissen, welches Unterprogramm aufgerufen wird, wenn z.B. die Taste L gedrückt wird. Mit dem onkey
-Unterprogramm des Turtle-Screens, können wir unser aufzurufendes Unterprogramm registrieren.
# Beispiel
Im Beispiel bewegt sich die Turtle mit einer konstanten Geschwindigkeit ständig vorwärts
import turtle
spieler = turtle.Turtle()
spieler.geschwindigkeit = 1
def links():
spieler.left(15)
def rechts():
spieler.right(15)
screen = turtle.Screen()
screen.onkey(links, "Left")
screen.onkey(rechts, "Right")
screen.listen()
while True:
spieler.forward(spieler.geschwindigkeit)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Aufgaben
Ereignisse
- Erstelle ein neues Python-Skript
ereignisse.py
und kopiere den Beispiel-Code dort rein. Starte das Programm. - Die Cursortaste nach oben, soll die Turtle beschleunigen, nach unten soll sie verlangsamt werden.
- Löse eine der Zusatzaufgaben (Entweder Aufgabe 2 oder Aufgabe 3)
Verfolungsjagd
Erweitere deine Lösung der Aufgabe 1 zu einem kleinen Spiel:
- Die Spieler-Turtle fährt und kann gesteuert werden
- Es erscheinen zwei Gegner-Turtles (z.B. am Rand oder später zufällig irgendwo auf den Schirm)
- die Gegner fahren mit einer fixen Geschwindigkeit in die Richtung des Spielers (Turtle-Befehle
towards
undsetheading
) - Wenn der Spieler einem Gegner zu Nahe kommt hat er verloren (
distance
) - Wenn der Spieler es schafft, dass beide Gegner sich zu Nahe kommen, hat er gewonnen (
distance
) - Nach Sieg/Niederlage werden alle Turtles an eine neue Startposition gestellt und das Spiel neu gestartet
- Punkte zählen und anzeigen
- …
Zeichnungsprogramm
Erweitere deine Lösung der Aufgabe 1 zu einem Zeichnungsprogramm.
Folgendes wäre denkbar:
- die Turtle ist steuerbar mit der Tastatur (ev. ohne Geschwindigkeit und
while
-Schleife, sondern mit Cursortaste nach oben für vorwärts) - einige Tasten setzen verschiedene Farben (
pencolor
,fillcolor
) - eine Taste macht ein
begin_fill
, eine andere einend_fill
- mit den Zahlen-Tasten lässt sich die Stiftdicke einstellen, z.B.
turtle.pensize(5)
- Spezialtasten zeichnen ganze Kreise oder in Unterprogrammen gespeicherte Figuren, z.B. ein Stern
penup
,pendown
- …