---
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()
```
:::