Programmcode für diese Lektion
Abschlussbedingungen
import turtle as t
import random
import time
#Hintergrund
fenster = t.Screen()
fenster.bgcolor("sienna1")
fenster.title("Raupespiel")
fenster.setup(width=600, height=600)
t.tracer(0)
#Raupenkoerper
raupe = t.Turtle()
raupe.shape("square")
raupe.color("DarkRed")
raupe.speed(0)
raupe.penup()
raupe.hideturtle()
raupe.richtung = "stop"
#Blattkoerper
blatt = t.Turtle()
blatt_koerper = ((0,0), (14,2), (18, 6), (20,20), (6,18), (2,14))
t.register_shape("blatt", blatt_koerper)
blatt.shape("blatt")
blatt.color("ForestGreen")
blatt.speed(0)
blatt.penup()
blatt.hideturtle()
#Texte
spiel_startet = False
text_turtle = t.Turtle()
text_turtle.color("maroon")
text_turtle.write("Drücke Leertaste", align="center", font=("Arial", 16, "bold"))
text_turtle.hideturtle()
#Punkte
punkte_turtle = t.Turtle()
segmente = []
punkte_turtle.speed(0)
punkte_turtle.hideturtle()
def ausserhalb_fenster():
linke_wand = -t.window_width() / 2
rechte_wand = t.window_width() / 2
oben_wand = t.window_height() / 2
unten_wand = -t.window_height() / 2
(x,y) = raupe.pos()
ausserhalb = x < linke_wand or x > rechte_wand or y < unten_wand or y > oben_wand
return ausserhalb
def spiel_ende():
raupe.color("sienna1")
blatt.color("sienna1")
t.hideturtle()
t.color("blue")
t.write("GAME OVER!", align="center", font=("Arial", 30, "bold"))
#verstecken des Raupenkoerpers
for segment in segmente:
segment.hideturtle()
#leeren der Segment-Liste
segmente.clear()
def anzeige_punkte(aktuelle_punkte):
punkte_turtle.clear()
punkte_turtle.penup()
x = (t.window_width() / 2) - 50
y = (t.window_height() / 2) - 50
punkte_turtle.setpos(x, y)
punkte_turtle.color("blue")
punkte_turtle.write(str(aktuelle_punkte), align="right", font=("Arial", 40, "bold"))
def platziere_blatt():
#blatt.ht ist kurz für blatt.hideturtle()
blatt.ht()
#blatt.setpos(random.randint(-200, 200), random.randint(-200, 200))
#oder
blatt.setx(random.randint(-200, 200))
blatt.sety(random.randint(-200, 200))
#blatt.st ist kurz für blatt.showturtle()
blatt.st()
def starte_spiel():
global spiel_startet
if spiel_startet == True:
return
else:
spiel_startet = True
punkte = 0
text_turtle.clear()
verzoegerung = 0.3
raupe.showturtle()
anzeige_punkte(punkte)
platziere_blatt()
while True:
fenster.update()
#Raupe frisst Blatt
if raupe.distance(blatt) < 20:
platziere_blatt()
#hinzufuegen eines Segmentes
neu_segment = t.Turtle()
neu_segment.speed(0)
neu_segment.shape("square")
neu_segment.color("grey")
neu_segment.penup()
segmente.append(neu_segment)
#Verzoegurn verringern
verzoegerung = verzoegerung - 0.002
punkte = punkte + 10
anzeige_punkte(punkte)
if ausserhalb_fenster():
spiel_ende()
#Bewegen des Raupenkoerpers in umgekehrter Reihenfolge
for index in range(len(segmente)-1, 0, -1):
x = segmente[index-1].xcor()
y = segmente[index-1].ycor()
segmente[index].goto(x, y)
#Bewege Segment 0 an die Position des Raupenkopfes
if len(segmente) > 0:
x = raupe.xcor()
y = raupe.ycor()
segmente[0].goto(x,y)
bewegen()
#gehe jedes Segment des Raupenkörpers durch un prüfe,
#ob das Segment vom Raupenkörper von Raupenkopf berührt wird
for segment in segmente:
if segment.distance(raupe) < 20:
spiel_ende()
time.sleep(verzoegerung)
def bewegen():
if raupe.richtung == "hoch":
y = raupe.ycor()
raupe.sety(y + 20)
if raupe.richtung == "runter":
y = raupe.ycor()
raupe.sety(y - 20)
if raupe.richtung == "links":
x = raupe.xcor()
raupe.setx(x - 20)
if raupe.richtung == "rechts":
x = raupe.xcor()
raupe.setx(x + 20)
def bewege_hoch():
if raupe.heading() == 0 or raupe.heading() == 180:
raupe.setheading(90)
raupe.richtung = "hoch"
def bewege_runter():
if raupe.heading() == 0 or raupe.heading() == 180:
raupe.setheading(270)
raupe.richtung = "runter"
def bewege_links():
if raupe.heading() == 90 or raupe.heading() == 270:
raupe.setheading(180)
raupe.richtung = "links"
def bewege_rechts():
if raupe.heading() == 90 or raupe.heading() == 270:
raupe.setheading(0)
raupe.richtung = "rechts"
t.onkey(starte_spiel, "space")
t.onkey(bewege_hoch, "Up")
t.onkey(bewege_runter, "Down")
t.onkey(bewege_links, "Left")
t.onkey(bewege_rechts, "Right")
t.listen()
t.mainloop()
import random
import time
#Hintergrund
fenster = t.Screen()
fenster.bgcolor("sienna1")
fenster.title("Raupespiel")
fenster.setup(width=600, height=600)
t.tracer(0)
#Raupenkoerper
raupe = t.Turtle()
raupe.shape("square")
raupe.color("DarkRed")
raupe.speed(0)
raupe.penup()
raupe.hideturtle()
raupe.richtung = "stop"
#Blattkoerper
blatt = t.Turtle()
blatt_koerper = ((0,0), (14,2), (18, 6), (20,20), (6,18), (2,14))
t.register_shape("blatt", blatt_koerper)
blatt.shape("blatt")
blatt.color("ForestGreen")
blatt.speed(0)
blatt.penup()
blatt.hideturtle()
#Texte
spiel_startet = False
text_turtle = t.Turtle()
text_turtle.color("maroon")
text_turtle.write("Drücke Leertaste", align="center", font=("Arial", 16, "bold"))
text_turtle.hideturtle()
#Punkte
punkte_turtle = t.Turtle()
segmente = []
punkte_turtle.speed(0)
punkte_turtle.hideturtle()
def ausserhalb_fenster():
linke_wand = -t.window_width() / 2
rechte_wand = t.window_width() / 2
oben_wand = t.window_height() / 2
unten_wand = -t.window_height() / 2
(x,y) = raupe.pos()
ausserhalb = x < linke_wand or x > rechte_wand or y < unten_wand or y > oben_wand
return ausserhalb
def spiel_ende():
raupe.color("sienna1")
blatt.color("sienna1")
t.hideturtle()
t.color("blue")
t.write("GAME OVER!", align="center", font=("Arial", 30, "bold"))
#verstecken des Raupenkoerpers
for segment in segmente:
segment.hideturtle()
#leeren der Segment-Liste
segmente.clear()
def anzeige_punkte(aktuelle_punkte):
punkte_turtle.clear()
punkte_turtle.penup()
x = (t.window_width() / 2) - 50
y = (t.window_height() / 2) - 50
punkte_turtle.setpos(x, y)
punkte_turtle.color("blue")
punkte_turtle.write(str(aktuelle_punkte), align="right", font=("Arial", 40, "bold"))
def platziere_blatt():
#blatt.ht ist kurz für blatt.hideturtle()
blatt.ht()
#blatt.setpos(random.randint(-200, 200), random.randint(-200, 200))
#oder
blatt.setx(random.randint(-200, 200))
blatt.sety(random.randint(-200, 200))
#blatt.st ist kurz für blatt.showturtle()
blatt.st()
def starte_spiel():
global spiel_startet
if spiel_startet == True:
return
else:
spiel_startet = True
punkte = 0
text_turtle.clear()
verzoegerung = 0.3
raupe.showturtle()
anzeige_punkte(punkte)
platziere_blatt()
while True:
fenster.update()
#Raupe frisst Blatt
if raupe.distance(blatt) < 20:
platziere_blatt()
#hinzufuegen eines Segmentes
neu_segment = t.Turtle()
neu_segment.speed(0)
neu_segment.shape("square")
neu_segment.color("grey")
neu_segment.penup()
segmente.append(neu_segment)
#Verzoegurn verringern
verzoegerung = verzoegerung - 0.002
punkte = punkte + 10
anzeige_punkte(punkte)
if ausserhalb_fenster():
spiel_ende()
#Bewegen des Raupenkoerpers in umgekehrter Reihenfolge
for index in range(len(segmente)-1, 0, -1):
x = segmente[index-1].xcor()
y = segmente[index-1].ycor()
segmente[index].goto(x, y)
#Bewege Segment 0 an die Position des Raupenkopfes
if len(segmente) > 0:
x = raupe.xcor()
y = raupe.ycor()
segmente[0].goto(x,y)
bewegen()
#gehe jedes Segment des Raupenkörpers durch un prüfe,
#ob das Segment vom Raupenkörper von Raupenkopf berührt wird
for segment in segmente:
if segment.distance(raupe) < 20:
spiel_ende()
time.sleep(verzoegerung)
def bewegen():
if raupe.richtung == "hoch":
y = raupe.ycor()
raupe.sety(y + 20)
if raupe.richtung == "runter":
y = raupe.ycor()
raupe.sety(y - 20)
if raupe.richtung == "links":
x = raupe.xcor()
raupe.setx(x - 20)
if raupe.richtung == "rechts":
x = raupe.xcor()
raupe.setx(x + 20)
def bewege_hoch():
if raupe.heading() == 0 or raupe.heading() == 180:
raupe.setheading(90)
raupe.richtung = "hoch"
def bewege_runter():
if raupe.heading() == 0 or raupe.heading() == 180:
raupe.setheading(270)
raupe.richtung = "runter"
def bewege_links():
if raupe.heading() == 90 or raupe.heading() == 270:
raupe.setheading(180)
raupe.richtung = "links"
def bewege_rechts():
if raupe.heading() == 90 or raupe.heading() == 270:
raupe.setheading(0)
raupe.richtung = "rechts"
t.onkey(starte_spiel, "space")
t.onkey(bewege_hoch, "Up")
t.onkey(bewege_runter, "Down")
t.onkey(bewege_links, "Left")
t.onkey(bewege_rechts, "Right")
t.listen()
t.mainloop()
Zuletzt geändert: Donnerstag, 16. Februar 2023, 16:05