Die Aufgabe wäre, ein Spiel wie das obenstehende zu programmieren. Das ist nicht einfach, insb. wenn man nur die Funktionalität von PyTurtles in Trinkets benutzen möchte. Also vielleicht lieber gleich die Musterlösung nachvollziehen und sich an den Erweiterungen versuchen.
import turtle
import random
# Fenster einrichten
window = turtle.Screen()
window.bgcolor("skyblue")
window.tracer(0)
# Status, ob das Spiel läuft
game_running = False
# Turtle (Vogel) erstellen
bird = turtle.Turtle()
bird.shape("turtle")
bird.color("red")
bird.penup()
bird.goto(-100, 160)
bird.dy = 0
# Schwerkraft
gravity = -0.05 #Menge der Beschleunigung nach unten
#Hindernisse
pipes = [] #eine bisher leere Liste namens "pipes"
for i in range(3):
# Hindernisse erstellen
thispipe = turtle.Turtle()
thispipe.shape("square")
thispipe.color("green")
thispipe.penup()
thispipe.goto(random.randint(0, 400), random.randint(-200, 200)) #Anfangsposition
thispipe.pipe_speed = 2 #Bewegungsgeschwindigkeit, könnte auch individuell gesetzt werden, s. nächste Zeile
#thispipe.pipe_speed = random.random()*2+1
pipes.append(thispipe) #die gerade erstellte turtle wird der Liste hinzugefügt
print("Mausklick startet das Spiel und steuer die Turtle")
# Funktionen
def bird_up(x,y):
bird.dy = 2 #Beschleunigung nach oben, wird dann in der Vogelbewegung automatisch von gravity reduziert und rutscht irgendwann ins Minus
def move_pipes():
for pipe in pipes: #also für jedes Element auf der Liste pipes
pipe.setx(pipe.xcor() - pipe.pipe_speed) #um speed nach links verschieben
#anstatt den shape zu benutzen könnte man auch selbst etwas zeichnen
#pipe.hideturtle()
#pipe.clear()
#pipe.dot(40,"blue")
# Wenn das Hindernis den linken Rand erreicht, an/hinter den rechten Rand zurücksetzen
if pipe.xcor() < -350:
pipe.goto(random.randint(200, 400), random.randint(-200, 200))
# Kollisionserkennung
def check_collision():
for pipe in pipes:
if bird.distance(pipe) < 40: #zu nah am Hindernis
return True
if bird.ycor() < -190 or bird.ycor() > 190: #am Boden oder am Himmel angekommen
return True
return False
# Spiel starten
def start_game(x, y):
global game_running
game_running = True
#window.onclick(None) # Klick deaktivieren, um wiederholten Start zu verhindern
# Tastenbindung
window.listen()
#window.onkey(bird_up, "space")
# Hauptspiel-Schleife
while True:
window.update()
if game_running: # Spielrunde
# Vogelbewegung
window.onclick(bird_up)
bird.dy += gravity
bird.sety(bird.ycor() + bird.dy)
# Hindernisse bewegen
move_pipes()
# Kollisionserkennung
if check_collision():
print("Game Over!")
game_running = False
#Reset
bird.goto(-100, 160) # Vogel zurücksetzen
bird.dy = 0
for pipe in pipes:
pipe.goto(random.randint(200, 400), random.randint(-200, 200))
else:
window.onclick(start_game) # Spiel Starten
- Sorgen sie für mehr Hindernisse - sagen wir 5.
- Sorgen Sie dafür, dass die Geschwindigkeit der Hindernisse zufällig bestimmt wird.
- Die zufällige Geschwindigkeit soll nach jeder Bildschirmüberquerung neu gesetzt werden.
- Können Sie den Code so ändern, dass die Turtle per Leertaste bewegt wird?
Aufgabe: Programmieren sie diese Figur im
Online-Editor