Skip to content

Instantly share code, notes, and snippets.

@stephengruppetta
Created December 15, 2022 07:34
Show Gist options
  • Save stephengruppetta/7e0112ca65a048619ee02765001754af to your computer and use it in GitHub Desktop.
Save stephengruppetta/7e0112ca65a048619ee02765001754af to your computer and use it in GitHub Desktop.
import turtle
import random
# If using a web-based platform, set to `True`
# web_based = True
web_based = False
if web_based:
i_scale = 1.5
snow_size = 4
snow_speed = 3
draw_speed = 10
rate_of_snow_balls = 6
else:
i_scale = 1
snow_size = 7
snow_speed = 2
draw_speed = 10
rate_of_snow_balls = 2
width = 600 / i_scale
height = 600 / i_scale
screen = turtle.Screen()
if not web_based:
screen.setup(width, height)
screen.title("Happy Christmas from CodeToday")
def make_triangle(x, y, size, outline, triangle):
triangle.hideturtle()
triangle.penup()
triangle.setposition(x, y)
triangle.pensize(3)
if outline:
triangle.pendown()
if not outline:
triangle.fillcolor("forest green")
triangle.begin_fill()
triangle.setposition(x + size, y - size)
triangle.setposition(x - size, y - size)
triangle.setposition(x, y)
if not outline:
triangle.end_fill()
def make_ball(x, y, size, colour, ball):
ball.hideturtle()
ball.penup()
ball.setposition(x, y)
ball.color(colour)
ball.dot(size)
def move_snow(snow):
position = snow.position()
snow.clear()
make_ball(
position[0],
position[1] - snow_speed,
snow_size,
"white",
snow,
)
def snow_fall():
rand_make_snow = random.randint(0, rate_of_snow_balls)
if rand_make_snow == 0:
snow = turtle.Turtle()
snow.hideturtle()
snow.penup()
list_of_snow.append(snow)
make_ball(
random.randint(int(-width / 2), int(width / 2)),
width / 2,
snow_size,
"white",
snow,
)
for snow in list_of_snow:
move_snow(snow)
if snow.position()[1] <= -width / 2:
snow.clear()
list_of_snow.remove(snow)
del snow
screen.update()
# make tree (main part)
triangle_1 = turtle.Turtle()
triangle_1.speed(draw_speed)
outline = True
for repeat in range(2):
make_triangle(0, width / 3, width / 6, outline, triangle_1)
make_triangle(0, width / 4, width / 4, outline, triangle_1)
make_triangle(0, width / 8, width / 3, outline, triangle_1)
outline = False
screen.tracer(0)
stem = turtle.Turtle()
# white snowy ground
stem.penup()
stem.hideturtle()
stem.setposition(-width, -width / 3)
stem.color("white")
stem.begin_fill()
stem.setposition(width, -width / 3)
stem.setposition(width, -width / 2)
stem.setposition(-width, -width / 2)
stem.end_fill()
screen.update()
# tree stem
stem.color("brown")
stem.setposition(-width / 30, -width / 4.8)
screen.tracer(1)
stem.pendown()
stem.begin_fill()
stem.setposition(width / 30, -width / 4.8)
stem.setposition(width / 30, -3 * width / 8)
stem.setposition(-width / 30, -3 * width / 8)
stem.setposition(-width / 30, -width / 4.8)
stem.end_fill()
screen.bgcolor("sky blue")
# decorations: balls
screen.tracer(2)
ball_colours = ["red", "red", "red", "gold", "violet", "white"]
ball_positions = [
(-width / 30, width / 4),
(3 * width / 40, width / 5),
(-width / 20, width / 6),
(width / 30, width / 9),
(-width / 12, width / 30),
(width / 12, width / 24),
(-width / 9, -width / 20),
(width / 8, -width / 15),
(0, -width / 6),
(-width / 6, -width / 6),
(width / 5, -width / 7.5),
]
for position in ball_positions:
make_ball(
position[0],
position[1],
20 / i_scale,
random.choice(ball_colours),
turtle.Turtle(),
)
screen.update()
# snow is falling…
list_of_snow = []
screen.tracer(0)
for _ in range(50):
snow_fall()
text_1 = turtle.Turtle()
text_1.hideturtle()
text_1.penup()
text_1.setposition(0, width / 2.7)
text_1.color("red")
text_1.write(
"Merry Christmas",
font=("Apple Chancery", max(int(30 / i_scale), 15), "bold"),
align="center",
)
for _ in range(25):
snow_fall()
text_1.setposition(width / 60, -width / 2.18)
text_1.color("black")
text_1.write(
"from",
font=(
"Apple Chancery",
max(int(20 / i_scale), 10),
"normal",
),
align="center",
)
if web_based:
text_1.setposition(width / 6, -width / 2.14)
else:
text_1.setposition(width / 7.5, -width / 2.14)
text_1.color(242 / 255, 114 / 255, 124 / 255)
text_1.write(
"code",
font=("Avenir", max(int(30 / i_scale), 15), "normal"),
align="center",
)
if web_based:
text_1.setposition(width / 2.95, -width / 2.14)
else:
text_1.setposition(width / 3.95, -width / 2.14)
text_1.color(0, 160 / 255, 193 / 255)
text_1.write(
"today",
font=("Avenir", max(int(30 / i_scale), 15), "normal"),
align="center",
)
if web_based:
for _ in range(300):
snow_fall()
else:
while True:
snow_fall()
turtle.done()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment