Mini-projekty
Cztery małe, ale naprawdę ukończone projekty — zbieramy wszystko, co zostało omówione w tym rozdziale, w gotowe obrazki.
Cztery małe, ale naprawdę ukończone projekty – każdy wykorzystujący tylko to, co robimy zostały już ukończone w tym rozdziale. Piąty projekt, mandala, czeka na samym końcu rozdziału — to jest finał.
Projekt A: Dom Kolorowych
Trzy oddzielne postacie (ściany, dach, drzwi), każda z własnym wypełnieniem, złożone w jedną
Kompozycja z wykorzystaniem penup()/goto()
pomiędzy:
import turtle
screen = turtle.Screen()
screen.setup(width=420, height=420)
artist = turtle.Turtle()
artist.pensize(3)
artist.speed(0)
# ściany
artist.penup(); artist.goto(-80, -80); artist.pendown()
artist.pencolor("#5B24F9"); artist.fillcolor("#EDE9FE")
artist.begin_fill()
for _ in range(4):
artist.forward(160)
artist.left(90)
artist.end_fill()
# dach
artist.penup(); artist.goto(-100, 80); artist.pendown()
artist.pencolor("#B91C1C"); artist.fillcolor("#FCA5A5")
artist.begin_fill()
artist.goto(0, 160)
artist.goto(100, 80)
artist.goto(-100, 80)
artist.end_fill()
# drzwi
Model
artist.penup(); artist.goto(-20, -80); artist.pendown()
artist.pencolor("#78350F"); artist.fillcolor("#92400E")
artist.begin_fill()
for _ in range(2):
artist.forward(40)
artist.left(90)
artist.forward(70)
artist.left(90)
artist.end_fill()
screen.exitonclick()
Dodaj kwadratowe okno w ścianie domu – kolejny mały begin_fill()/end_fill() blok.
Cel B: Projektu
Cztery okręgi jeden w drugim, o malejącym promieniu i naprzemiennych kolorach:
import turtle
screen = turtle.Screen()
screen.setup(width=380, height=380)
artist = turtle.Turtle()
artist.speed(0)
artist.hideturtle()
rings = [(90, "#DC2626"), (65, "#FAFAFC"), (40, "#DC2626"), (15, "#FAFAFC")]
for radius, color in rings:
artist.penup()
artist.goto(0, -radius)
artist.pendown()
artist.fillcolor(color)
artist.pencolor("#0D0230")
artist.begin_fill()
artist.circle(radius)
artist.end_fill()
screen.exitonclick()
rings = [(90, "#DC2626"), (65, "#FAFAFC"), (40, "#DC2626"), (15, "#FAFAFC")]
for radius, color in rings:
artist.penup()
artist.goto(0, -radius)
artist.pendown()
artist.fillcolor(color)
artist.begin_fill()
artist.circle(radius)
artist.end_fill()
for listę par (promień, kolor) — później szczegółowo rozłożymy listy i pętle. Na razie wystarczy zobaczyć ideę: powtarza się ta sama sekwencja działań dla każdej pary wartości.Zamień kolory pierścionków na własne, takie jak odcienie niebieskiego i żółtego.
Projekt C: Gwiaździstym Niebie
Ciemne tło, wiele punktów o losowym rozmiarze w losowych miejscach — ten sam zabieg, co w rozdziale o losowych punktach, ale w innym nastroju:
import turtle
import random
random.seed(11)
screen = turtle.Screen()
screen.setup(width=420, height=340)
screen.bgcolor("#0D0230")
artist = turtle.Turtle()
artist.hideturtle()
artist.penup()
for _ in range(35):
x = random.randint(-200, 200)
y = random.randint(-150, 150)
size = random.choice([6, 8, 10])
artist.goto(x, y)
artist.dot(size, "#FDE68A")
screen.exitonclick()
Dodaj jedną dużą białą kropkę w rogu ekranu — „księżyc”, narysowany wcześniej, przed przypadkowymi gwiazdami.
Projekt D: gwiazda geometryczna
Pięcioramienna gwiazda jest rysowana jedną linią, bez ani jednego oderwania pióra – sekret polega na tym, że Obrót o 144° (zamiast 72°) powoduje przecięcie się linii:
import turtle
screen = turtle.Screen()
screen.setup(width=380, height=380)
artist = turtle.Turtle()
artist.pensize(3)
artist.pencolor("#5B24F9")
artist.speed(0)
artist.forward(150)
artist.right(144)
artist.forward(150)
artist.right(144)
artist.forward(150)
artist.right(144)
artist.forward(150)
artist.right(144)
artist.forward(150)
artist.right(144)
screen.exitonclick()
for _ in range(5):
artist.forward(150)
artist.right(144)
2 × 360 / 5: Aby gwiazda prawidłowo się „złożyła”Zamień 5 na 7 i 144° pod odpowiednim kątem (podpowiedź: ta sama zasada to obracanie się dwa razy w siedmiu krokach). Co się stanie?