--- tags: materials --- # Завдання: Черепашка В цих завданнях потрібно намалювати статичну фігуру черепашкою. На кожне завдання потрібний окремий файл. ## Level 1 Черепашка може робити: * `turtle.forward(X)` --- X пікселів вперед * `turtle.backward(X)` --- X пікселів назад (не змінюючи напрямок руху) * `turtle.left(X)` --- поворот X градусів вліво * `turtle.right(X)` --- поворот X градусів вправо * `turtle.color(X)` --- змінити колір пера. Доступно багато кольорів, наприклад, `"red"`, `"white"`, `"black"`, `"green"`, `"yellow"`, `"blue"`, `"orange"`, ... або HTML формат `"#FF0000"`, `"#00FF00"`, ... * `turtle.penup()` --- підняти перо. Після цього черепашка не буде залишати слід * `turtle.pendown()` --- опустити перо. Після цього черепашка буде залишати слід :::info **Багатокутники** 1. Намалювати квадрат 2. Намалювати правильний восьмикутник 3. Намалювати правильний шестикутник 4. Придумати, як намалювати будь-який правильний N-кутник (або подивитись в вікіпедії) ::: :::info **Сітка** ![](https://i.imgur.com/R26baDD.png) ::: :::info **Зигзаг** ![](https://i.imgur.com/c3P7fV4.png) ::: :::info **Піраміда** ![](https://i.imgur.com/BBDD77m.png) ::: :::info Намалювати черепашкою кілька будь-яких букв, наприклад, П Р И В І Т ![](https://i.imgur.com/nHTIAR8.png) ::: ## Level 2 На другому рівні потрібно використати процедури та параметри, щоб відмалювати більш складні зображення (або просто гарно структурувати код). :::info Потрібно виконати попередні завдання з використанням процедур та параметрів: - сітка повинна мати розмір квадрату як параметр, і квадрат має бути процедурою - у зигзагу потрібно виділити те, що повторюється у процедуру - в піраміді потрібно зробити ширину піраміди параметром - в буквах потрібно кожну букву зробити процедурою. Потім з цих процедур скласти слово, або навіть кілька слів ::: - `turtle.pensize(X)` --- зробити слід, який лишає черепашка, товщиною у X пікселів - `turtle.tracer(0, 0)` --- пришвидшити роботу черепашки. Цю команду треба виконати на початку, а в кінці програми написати команду `turtle.update()` - `turtle.dot(X)` --- поставити крапку розміром X пікселів - `turtle.pensize()` --- змінює ширину сліду черепашки - `turtle.color(0.1, 1, 0.5)` --- зробити відтінок кольору - числа в дужках можна змінювати від `0.0` до `1.0` - `turtle.color(1.0, 0.0, 0.0)` --- чистий червоний колір - `turtle.color(0.0, 1.0, 0.0)` --- чистий зелений колір - `turtle.color(0.0, 0.0, 1.0)` --- чистий синій колір Нові завдання: :::info **Зірка** ![](https://i.imgur.com/qpwnNGs.png) ::: :::info **Ряд квадратів** ![](https://i.imgur.com/qCS87il.png) ::: :::info **Восьмикутник з квадратів** ![](https://i.imgur.com/ixxngsf.png) ::: :::info **Труба** Зробити щось типу труби з багатокутників. Темніші відтінки можна зробити через функцію `turtle.color(0.0, X, 0.0)`, де X --- дробове число від 0.0 до 1.0 (0.1, 0.2, 0.3, і т.д.) ![](https://i.imgur.com/8Zv3TWs.png) ::: :::info **РНК** РНК --- рибонуклеїнова кислота, старша сестра ДНК. Складається з послідовності чотирьох різних молекул, які на картинці зображені 4-ма різними кольорами. На картинці обидві РНК мають одинакові послідовності, але згинаються по різному. Потрібно намалювати дві одинакові РНК через процедури з параметром "кут згину". ![](https://i.imgur.com/q0oFAgE.png) ::: :::info **Спіраль** Спіраль --- це круг, у якого постійно збільшується (або зменшується) радіус. В черепашці зміну радіусу можна схитрити як зміну кута повороту при малюванні багатокутника. ![](https://i.imgur.com/XaHy8AV.png) ::: :::info **Pizza time!** ![](https://i.imgur.com/HFEElKR.png) ::: :::info Намалювати якийсь об'єкт з природи (сонце, листочок, котика, ...) або з техніки (машина, будинок, ...). ::: ## Level 3 На третьому рівні з'являється інтерактив. Але спочатку додаткові команди: - `turtle.goto(X, Y)` --- перемістити черепашку в точку (X, Y) - `turtle.clear()` --- очистити всі лінії, які зробила черепашка - `turtle.undo()` --- відкатити попередню дію черепашки, так ніби її і не сталося - `turtle.stamp()` --- поставити слід Хуки на події: - `turtle.onscreenclick(F)` --- якщо F це процедура з двома параметрами, то при кліку мишкою на екрані, буде викликана процедура F з координатми місця кліку - `turtle.onkey(F, key)` --- якщо F це процедура без параметрів, то при натисненні кнопки `key`, буде викликана процедура F - приклади для кнопок: `"space"`, `"plus"`, `"minus"`, `"BackSpace"`, `"a"`, `"b"`, `"1"`, `"2"`, ... - весь список доступних клавіш знаходиться тут https://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - `turtle.onclick(F)` --- так само як і з `turtle.onscreenclick()`, тільки спрацьовує коли мишка клікнула по черепашці - `turtle.listen()` --- робить хуки на клавіші активними (потрібно викликати цю команду після настройки всіх хуків на клавіші) :::info **Проста векторна малювалка** - якщо натиснено Пробіл, то перо черепашки піднімається - якщо натиснено Ентер, то перо черепашки опускається - при кліку на екрані черепашка біжить до місця кліку (якщо перо опущене, то буде малюватись лінія) - цифри 1,2,3,4,5,6,7,8,9 змінюють колір лінії - Backspace відміняє останню дію ::: :::info **Злови черепашку** Черепашка бігає по кругу (або по маршруту, який ви визначите) з максимальною швидкістю. При кліку на черепашку вона повинна залишити круглий слід. ::: :::info **Скажена черепаха** Черепаха вічно біжить вперед (рекомендую швидкість у 2 пікселі). Клавіші "вліво" та "вправо" повертають черепаху трохи вліво або вправо. Потрібно клавішами втримати черепаху, щоб вона не забігла за межі екрану. ::: :::info **Черв'ячок** Цей код малює черв'ячка, який повзає по екрану і управляється клавішами "вліво"-"вправо". "Вліво" --- це поворот на 90 градусів вліво. ![](https://i.imgur.com/i21Iq90.png)   1. Потрібно змінити код так, щоб клавіші "вліво"-"вправо"-"вверх"-"вниз" направляли черв'ячка у відповідний бік екрану. Використати команду [`turtle.setheading()`](https://docs.python.org/3/library/turtle.html#turtle.setheading) 2. Змінити колір черв'ячка на зелений 3. При натисненні клавіші BackSpace потрібно очистити сліди черв'ячка ``` import turtle import time def onleft(): turtle.left(90) def onright(): turtle.right(90) def scene1(): turtle.onkey(onleft, "Left") turtle.onkey(onright, "Right") turtle.listen() turtle.tracer(0) turtle.fillcolor("red") turtle.shape("circle") turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() turtle.stamp() while True: turtle.forward(5) turtle.stamp() turtle.clearstamps(1) turtle.update() time.sleep(0.015) scene1() ``` :::