Actually committing this time:

This is program to make a picture of a mountain with trees
and snowflakes.

Somewhere I got stuck was figuring out how to use a loop to make the
trees without it also adding too many steps to the turtle. Eventually
I decided that a loop would be less efficient than just writing the
code to draw each triangle individually.

Something I figured out was how to make the trees equally spaced
along the bottom of the mountain. If I had more time, I think I
would have liked to create a function that does this so that I can
change the size of the mountain and number/size of trees without having
to rethink how much space needs to be between each tree.

One strategy I used to get unstuck was commenting out everything except
what I was currently working on and running the code to see it draw
that specific object. Additionally, drawing what I was trying to
have the turtle draw in order to figure out the geometry of it.

Something I'd like to learn about is how to make it so things are
randomly generated. I think that would have helped make the snowfall
a little more realistic looking.

As far as future projects go, I think it would be cool to learn how
to animate it and show the snow falling and then settling on the trees
This commit is contained in:
Thomas Naber 2023-07-31 12:11:26 -04:00
parent 167de84bdc
commit 94ac144093
2 changed files with 137 additions and 13 deletions

View File

@ -1,7 +1,131 @@
# drawing.py
# ----------
# By ____(you)___________
# By Tom Naber
#
# (Briefly describe what this program does.)
# This program is going to draw a snowman, some snowflakes, and
# trees
from turtle import *
from math import sqrt
"""this function takes the turtle to the lower left corner of the
drawing"""
def goToCorner():
penup()
setx(-250)
sety(-250)
pendown()
""" This function will turn the turtle left the specified angle,
and then will move the turtle the specified distance without
drawing anything then returns to the direction the
turtle was pointing.
"""
def fly (angle, dist):
left(angle)
penup()
forward(dist)
pendown()
right(angle)
"""This function draws a rectangle with a top and bottom of size
width and a left and right size of size height, with a fill
color and line color specified."""
def drawRectangle(width, height, fill, line):
color(line)
fillcolor(fill)
begin_fill()
forward(width)
left(90)
forward(height)
left(90)
forward(width)
left(90)
forward(height)
left(90)
end_fill()
"""draws an isosceles triangle with legs the length of size
and a color/outline as specified from fill and line."""
def drawTriangle(size, fill, line):
color(line)
fillcolor(fill)
begin_fill()
forward(size * sqrt(2)/2)
left(135)
forward(size)
left(90)
forward(size)
left(135)
forward(size * sqrt(2)/2)
end_fill()
""" This function draws a tree with a brown rectangular trunk,
and green triangles as the top.
"""
def drawTree(size):
drawRectangle(size, size * 2, "saddle brown", "black")
fly(90, size * 2)
forward(size/2)
drawTriangle(size * 4, "dark green", "dark green")
fly(90, size * 1.5)
drawTriangle(size * 3, "dark green", "dark green")
fly(90, size * 1.5)
drawTriangle(size * 2, "dark green", "dark green")
fly(-90, size * 5)
fly(180, size/2)
""" draws a snowflake of specified size. The turtle ends in
the same place that it starts.
"""
def drawSnowflake(size):
pensize(2)
color("alice blue")
left(90)
for number in range(1, 4):
forward(size)
fly(120, size/2)
left(240)
right(90)
"""The code below draws a picture of a mountain with five equally
spaced trees at its base, and then 28 snowflakes in the air."""
goToCorner()
fly(180,60)
drawRectangle(300 * sqrt(2) + 120, 300, "sky blue", "black")
fly(0, 150 * sqrt(2) + 60)
drawTriangle(300, "slate gray", "black")
fly(90, 100 * sqrt(2))
drawTriangle(100, "white", "black")
goToCorner()
for number in range(1, 6):
drawTree(15)
fly(0, 300 * sqrt(2)/4 - 3.75)
goToCorner()
fly(90, 270)
for number in range(1, 11):
drawSnowflake(8)
fly(-60, 30)
drawSnowflake(8)
fly(-120, 40)
drawSnowflake(8)
fly(10, 25)
drawSnowflake(8)
fly(80,40)
drawSnowflake(8)
fly(40,25)
done()

24
poetry.lock generated
View File

@ -42,13 +42,13 @@ lxml = ["lxml"]
[[package]]
name = "certifi"
version = "2023.5.7"
version = "2023.7.22"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
{file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"},
{file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"},
{file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
{file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
]
[[package]]
@ -159,13 +159,13 @@ files = [
[[package]]
name = "furo"
version = "2023.5.20"
version = "2023.7.26"
description = "A clean customisable Sphinx documentation theme."
optional = false
python-versions = ">=3.7"
files = [
{file = "furo-2023.5.20-py3-none-any.whl", hash = "sha256:594a8436ddfe0c071f3a9e9a209c314a219d8341f3f1af33fdf7c69544fab9e6"},
{file = "furo-2023.5.20.tar.gz", hash = "sha256:40e09fa17c6f4b22419d122e933089226dcdb59747b5b6c79363089827dea16f"},
{file = "furo-2023.7.26-py3-none-any.whl", hash = "sha256:1c7936929ec57c5ddecc7c85f07fa8b2ce536b5c89137764cca508be90e11efd"},
{file = "furo-2023.7.26.tar.gz", hash = "sha256:257f63bab97aa85213a1fa24303837a3c3f30be92901ec732fea74290800f59e"},
]
[package.dependencies]
@ -342,13 +342,13 @@ files = [
[[package]]
name = "sphinx"
version = "7.0.1"
version = "7.1.1"
description = "Python documentation generator"
optional = false
python-versions = ">=3.8"
files = [
{file = "Sphinx-7.0.1.tar.gz", hash = "sha256:61e025f788c5977d9412587e733733a289e2b9fdc2fef8868ddfbfc4ccfe881d"},
{file = "sphinx-7.0.1-py3-none-any.whl", hash = "sha256:60c5e04756c1709a98845ed27a2eed7a556af3993afb66e77fec48189f742616"},
{file = "sphinx-7.1.1-py3-none-any.whl", hash = "sha256:4e6c5ea477afa0fb90815210fd1312012e1d7542589ab251ac9b53b7c0751bce"},
{file = "sphinx-7.1.1.tar.gz", hash = "sha256:59b8e391f0768a96cd233e8300fe7f0a8dc2f64f83dc2a54336a9a84f428ff4e"},
]
[package.dependencies]
@ -497,13 +497,13 @@ sphinx = ">=7.0.1,<8.0.0"
[[package]]
name = "urllib3"
version = "2.0.3"
version = "2.0.4"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.7"
files = [
{file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"},
{file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"},
{file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"},
{file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"},
]
[package.extras]