---
# System prepended metadata

title: 'Завдання: Черепашка'
tags: [materials]

---

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