Created
January 6, 2024 08:00
-
-
Save horstjens/e767707db3836410db051098c0ec8e4d to your computer and use it in GitHub Desktop.
sternschnuppe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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