Глава 13 з 27

Безкоштовно

3: Будуємо перші програми

⏱️ 45-60 хвилин
📊 intermediate

Розділ 13: "Малюємо за допомогою коду"

На наступній зустрічі Професор Біт зустрів Алісу з загадковою посмішкою.

— Сьогодні ми займатимемося мистецтвом, — оголосив він, вказуючи на великий монітор у центрі кімнати.

— Мистецтвом? — здивувалась Аліса. — Але хіба ми не вивчаємо програмування?

— Програмування і мистецтво цілком сумісні, — відповів Професор. — Сьогодні ми малюватимемо за допомогою коду!

Байт радісно підстрибнув і вивів на своєму екрані барвистий узір з геометричних фігур.

— Для створення графіки за допомогою коду ми використовуватимемо бібліотеку Turtle, — пояснив Професор. — Це простий, але потужний інструмент для малювання.

Він на мить замовк і тихо прочитав:

В рисунке — отпечатки эволюций,
В строке — звучанье древней глубины.
Витиеватость творческих конструкций
Приносит в код дыханье новизны.

И так плетёт фракталы мирозданье,
Ведя беззвучный, вечный диалог.
Творя, пока не кончится дыханье,
Мы в вечности проводим рода ток.

Любой куплет однажды спетой песни
Спет голосами тех, кто был до нас.
Их делая полней и интересней,
Мы сохраняем их для новых рас.

Професор набрав на клавіатурі перші рядки коду:

python
import turtle

Створюємо полотно і пензель


полотно = turtle.Screen()
полотно.bgcolor("white") # Білий фон
пензель = turtle.Turtle()
пензель.shape("turtle") # Форма черепашки
пензель.color("blue") # Синій колір
пензель.pensize(2) # Товщина лінії

Малюємо квадрат


for _ in range(4):
пензель.forward(100) # Рухатися вперед на 100 кроків
пензель.right(90) # Повернути направо на 90 градусів

полотно.exitonclick() # Закрити вікно при кліку

На екрані з'явилось вікно з білим фоном, на якому синя черепашка намалювала квадрат.

— Вау! — вигукнула Аліса. — Черепашка справді намалювала квадрат!

— Бібліотека Turtle працює за принципом "черепашьої графіки", — пояснив Професор. — Ти керуєш "черепашкою", яка залишає слід, коли рухається. Це схоже на те, як якби ти водила олівцем по паперу.

— А що означає підкреслення в for _ in range(4)? — запитала Аліса.

— Добре питання! — кивнув Професор. — Підкреслення (_) використовується, коли нам не важлива змінна циклу. Ми просто хочемо повторити дію 4 рази, і нам не потрібно знати номер поточної ітерації.

— Давай намалюємо щось складніше! — запропонувала Аліса.

— Звичайно! Як щодо різнокольорової спіралі? — Професор написав новий код:

python
import turtle
import random

полотно = turtle.Screen()
полотно.bgcolor("black") # Чорний фон
пензель = turtle.Turtle()
пензель.speed(0) # Максимальна швидкість

Список кольорів для спіралі


кольори = ["red", "orange", "yellow", "green", "blue", "purple"]

Малюємо спіраль


for i in range(360):
пензель.color(random.choice(кольори)) # Випадковий колір
пензель.forward(i * 0.01 + 1) # Збільшуємо крок
пензель.right(10) # Повертаємо на 10 градусів

полотно.exitonclick()

На чорному фоні з'явилась барвиста спіраль, що переливається всіма кольорами веселки.

— Це неймовірно красиво! — захопилась Аліса. — А що означає пензель.speed(0)?

— Це встановлює максимальну швидкість руху черепашки, — пояснив Професор. — Значення можуть бути від 1 (найповільніший) до 10 (швидкий). Значення 0 означає, що анімація руху вимкнена, і черепашка малює миттєво.

— А можна намалювати щось, що більше схоже на справжній рисунок? — запитала Аліса.

— Так, можна створювати досить складні рисунки, — кивнув Професор. — Давай намалюємо квітку:

python
import turtle
import math

полотно = turtle.Screen()
полотно.bgcolor("skyblue")
пензель = turtle.Turtle()
пензель.speed(0)

Малюємо стебельце


пензель.color("green")
пензель.pensize(5)
пензель.penup()
пензель.goto(0, -200)
пензель.pendown()
пензель.left(90)
пензель.forward(200)

Малюємо серединку квітки


пензель.color("brown")
пензель.penup()
пензель.goto(0, 0)
пензель.pendown()
пензель.begin_fill()
пензель.circle(20)
пензель.end_fill()

Малюємо пелюстки


пензель.color("pink")
for i in range(12):
пензель.penup()
пензель.goto(0, 0)
пензель.pendown()
пензель.setheading(i 30) # Поворот на 30 i градусів

# Малюємо пелюстку
пензель.begin_fill()
for j in range(60):
пензель.forward(2)
пензель.left(3)
пензель.end_fill()

Ховаємо черепашку і завершуємо


пензель.hideturtle()
полотно.exitonclick()

На екрані з'явилась квітка з рожевими пелюстками, коричневою серединкою і зеленим стебельцем на блакитному фоні.

— Це прекрасно! — вигукнула Аліса. — Але код став набагато складнішим.

— Так, тут ми використали кілька нових команд, — погодився Професор. — Наприклад:

  • goto(x, y) переміщує черепашку в указані координати

  • penup() і pendown() дозволяють піднімати і опускати "перо", щоб переміщатися без малювання

  • beginfill() і endfill() заповнюють кольором область всередині намальованого контуру

  • setheading() встановлює напрямок черепашки

  • hideturtle() ховає черепашку, щоб вона не псувала рисунок
  • Логік, що спостерігала за процесом, додала:
    — У програмуванні графіки ми часто використовуємо математику. Координати, кути, відстані — все це математичні концепції.

    — А можна створювати анімації? — запитала Аліса.

    — Звичайно! — відповів Професор. — Давай створимо просту анімацію рухомого сонця:

    python
    import turtle
    import time

    полотно = turtle.Screen()
    полотно.bgcolor("lightblue")
    полотно.setup(600, 400) # Розмір вікна

    Створюємо сонце


    сонце = turtle.Turtle()
    сонце.shape("circle")
    сонце.color("yellow")
    сонце.penup()
    сонце.goto(-300, 0) # Початкова позиція зліва

    Створюємо землю


    земля = turtle.Turtle()
    земля.penup()
    земля.goto(-300, -100)
    земля.pendown()
    земля.color("green")
    земля.pensize(3)
    земля.forward(600) # Лінія землі
    земля.hideturtle()

    Анімація сходу і заходу


    for x in range(-300, 301, 5):
    y = 100 (1 - ((x / 150) * 2)) # Парабола для траєкторії
    сонце.goto(x, y)
    time.sleep(0.05) # Пауза для створення анімації

    полотно.exitonclick()

    На екрані з'явилась анімація: жовте сонце повільно піднімалось над зеленою лінією горизонту, а потім опускалось.

    — Це вже справжня анімація! — захопилась Аліса. — Ми використовуємо цикл, щоб сонце рухалось по параболі від лівого краю до правого.

    — Ще одне цікаве застосування програмування в графіці — це фрактали, — сказав Професор. — Фрактали — це геометричні фігури, які повторюють свою структуру на різних масштабах.

    — Звучить складно, — насупилась Аліса.

    — Насправді, їх досить просто створювати за допомогою рекурсивних функцій, — посміхнувся Професор. — Дивись:

    python
    import turtle

    полотно = turtle.Screen()
    полотно.bgcolor("black")
    пензель = turtle.Turtle()
    пензель.color("green")
    пензель.speed(0)

    Рекурсивна функція для малювання гілки


    def намалювати_гілку(черепашка, довжина, рівень):
    if рівень == 0:
    return

    черепашка.forward(довжина)

    черепашка.right(30)
    намалювати_гілку(черепашка, довжина * 0.7, рівень - 1)

    черепашка.left(60)
    намалювати_гілку(черепашка, довжина * 0.7, рівень - 1)

    черепашка.right(30)
    черепашка.backward(довжина)

    Налаштовуємо початкову позицію


    пензель.penup()
    пензель.goto(0, -200)
    пензель.left(90)
    пензель.pendown()

    Малюємо фрактальне дерево


    намалювати_гілку(пензель, 100, 6)

    пензель.hideturtle()
    полотно.exitonclick()

    На екрані з'явилось витончене фрактальне дерево з безліччю гілок.

    Черепашка малює фрактальне дерево

    — Це дивовижно! — вигукнула Аліса. — Як це працює?

    — Функція намалювати_гілку викликає сама себе, створюючи менші гілки на кінці кожної гілки, — пояснив Професор. — Параметр рівень визначає, скільки разів відбуватиметься це гілкування. Коли рівень досягає нуля, рекурсія зупиняється.

    — У природі теж багато фракталів, — помітила Логік. — Дерева, сніжинки, листя папороті, системи кровоносних судин — всі вони мають фрактальну структуру.

    — Комп'ютерна графіка — це обширна область, — підсумував Професор. — Від простих геометричних фігур до складних 3D-моделей і анімацій. І все це створюється за допомогою коду!

    — Тепер я розумію, що програмування — це не тільки вирішення задач і обробка даних, але й творчість, — сказала Аліса. — Це як магія: пишеш кілька рядків коду, і з'являється красивий рисунок!

    Завдання

    Придумай і опиши, який рисунок ти хотів би створити за допомогою коду. Це може бути що завгодно: тварина, рослина, геометричний узір або абстрактна композиція. Як би ти використав основні команди (рух, повороти, кольори) для створення свого рисунка? Зроби начерк на папері і подумай, які цикли або функції могли б допомогти намалювати повторювані елементи.