Skip to content

Instantly share code, notes, and snippets.

@stephengruppetta
Created November 17, 2023 23:23
Show Gist options
  • Save stephengruppetta/488a3e4af62c8b62c8c3e1a6f414ea35 to your computer and use it in GitHub Desktop.
Save stephengruppetta/488a3e4af62c8b62c8c3e1a6f414ea35 to your computer and use it in GitHub Desktop.
# magic_sparkle.py
import random
import turtle
import time
from dot import Dot
BACKGROUND_COLOUR = "#1a6b72"
frame_rate = 60
spawn_delay_range = 0.15, 0.25
dot_size_range = 0.05, 0.5
dot_speed_range = 0.5, 1
lead_dot_speed = 2
lead_dot_rotation_angle = 5
window = turtle.Screen()
window.tracer(0)
window.bgcolor(BACKGROUND_COLOUR)
lead_dot = turtle.Turtle()
lead_dot.shape("circle")
lead_dot.color("white")
lead_dot.penup()
def turn_left():
lead_dot.left(lead_dot_rotation_angle)
def turn_right():
lead_dot.right(lead_dot_rotation_angle)
window.onkeypress(turn_left, "Left")
window.onkeypress(turn_right, "Right")
window.listen()
dots = []
delay = 0
interval_start = 0
while True:
start_frame_time = time.time()
lead_dot.forward(lead_dot_speed)
# Spawn a new dot every half a second (for now)
if time.time() - interval_start > delay:
interval_start = time.time()
delay = (
random.random()
* (spawn_delay_range[1] - spawn_delay_range[0])
+ spawn_delay_range[0]
)
dots.append(
Dot(
lead_dot.xcor(),
lead_dot.ycor(),
dot_size_range,
dot_speed_range,
)
)
# Move all the dots
for dot in dots:
dot.fall()
if dot.ycor() < -window.window_height() / 2:
dots.remove(dot)
turtle.turtles().remove(dot)
# Add delay if needed to fix frame rate
frame_time = time.time() - start_frame_time
if frame_time < 1 / frame_rate:
time.sleep(1 / frame_rate - frame_time)
window.update()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment