Skip to content

Instantly share code, notes, and snippets.

@horstjens
Created January 6, 2024 08:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save horstjens/e767707db3836410db051098c0ec8e4d to your computer and use it in GitHub Desktop.
Save horstjens/e767707db3836410db051098c0ec8e4d to your computer and use it in GitHub Desktop.
sternschnuppe
import turtle
import random
class Stern(turtle.Turtle):
sternenliste = []
löschen = False # muss man einen Stern löschen?
def __init__(self, pos, startfarbe=(1,1,0), endfarbe=(1,1,1)):
super().__init__()
self.hideturtle()
self.shape("stern")
self.pencolor(startfarbe)
self.fillcolor(startfarbe)
self.startfarbe = startfarbe
self.endfarbe = endfarbe
self.alter = 0
self.maximales_alter = 10
self.größe = 1.0 # startgröße
self.wachstum = 0.1 # um wieviel größer eine Sekunde später
self.drehung = 10 # grad pro sekunde nach links
self.speed(0)
self.penup()
self.goto(pos)
Stern.sternenliste.append(self)
def update(self, dt):
#self.hideturtle()
self.alter += dt
if self.alter > self.maximales_alter:
self.hideturtle()
Stern.löschen = True
return
# prozentuales alter
alter = self.alter / self.maximales_alter
farbe = [0,0,0]
for i in range(3):
farbe[i] = self.startfarbe[i] + (self.endfarbe[i]
- self.startfarbe[i]) * alter
self.pencolor(farbe[0],farbe[1],farbe[2])
self.fillcolor(farbe[0],farbe[1],farbe[2])
xfactor, yfactor, outline = self.shapesize()
self.größe += self.wachstum * dt
self.shapesize(self.größe, self.größe)
self.left(self.drehung*dt)
self.showturtle()
höhe = 600
breite = 1200
screen = turtle.Screen()
screen.setup(breite, höhe)
screen.setworldcoordinates(0,0,breite,höhe)
screen.title("sternschnuppe")
screen.bgcolor("white")
turtle.speed(0) # ganz schnell
turtle.hideturtle()
screen.tracer(20,0) # superschnell
punktliste = ((20.00,-0.00), (4.05,2.94), (6.18,19.02), (-1.55,4.76),
(-16.18,11.76), (-5.00,0.00),(-16.18,-11.76),
(-1.55,-4.76), (6.18,-19.02), (4.05,-2.94))
screen.register_shape("stern", tuple(punktliste))
peter = turtle.Turtle()
peter.shape("turtle")
peter.penup()
peter.goto(0,höhe/1.5)
peter.dx, peter.dy = 80, 40
dt = 0.01
intervall = 1.4
nächster_stern = 0.5 # sekunden
zeit = 0
while True:
zeit += dt
Stern.löschen = False
for s in Stern.sternenliste:
s.update(dt)
if Stern.löschen:
Stern.sternenliste = [s for s in Stern.sternenliste if s.alter < s.maximales_alter]
screen.title(f"{len(Stern.sternenliste)}")
# moving peter
x = peter.xcor() + peter.dx * dt
y = peter.ycor() + peter.dy * dt
peter.dy += -9.81 * dt
peter.setheading(peter.towards(x,y))
peter.goto(x,y)
# neuer Stern?
if zeit > nächster_stern:
Stern(peter.pos())
nächster_stern = zeit + random.uniform(0.25,0.7)
# abprallen:
if (peter.dx > 0) and (peter.xcor() > breite):
peter.setx(breite)
peter.dx *= -1
if (peter.dx < 0) and (peter.xcor() < 0):
peter.setx(0)
peter.dx *= -1
if (peter.dy > 0) and (peter.ycor() > höhe):
peter.sety(höhe)
peter.dy *= -1
if (peter.dy < 0) and (peter.ycor() < 0):
peter.sety(0)
peter.dy *= -1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment