Try   HackMD

Черепашка. Структури даних

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

У попередніх серіях

LVL 1

Де ви знайомитесь з віртуальним роботом-черепашкою і керуєте ним за допомогою команд.

LVL 2

Де ви знайомитесь з процедурами, першим потужним способом організації програм, та параметрами процедур, способом об'єднання процедур для зменшення кількості коду.

LVL 3

Де ви знайомитесь з подіями (events) та хуками (процедурами, які прив'язуються на події).

LVL 3.5. MEGA PROGRAM

Завдання

Зробити одну велику мега програму, яка буде складатись з усіх ваших маленьких програм (окрім інтерактивних). При натисненні на клавішу (abcdefghijklmnop) черепашка очищує екран і малює фігуру з одного з завдань.

Наприклад, a - малює квадрат, b - малює шестикутник, c - малює сітку, d - малює зигзаг, і так далі.

Для цього потрібно буде, щоб кожна ваша програма стала процедурою у мега-програмі.

Завдання

В черепашці є команда turtle.write("blabla"), яка малює текст на екрані. Але, ця команда не вміє робити поворот тексту.

Щоб зробити поворот тексту, нам потрібно свою команду super_write(). А для цієї команди нам потрібно усі букви алфавіту.

Це завдання групове. Кожен отримує як завдання список букв, які треба зробити черепашкою, і потім все це об'єднати у одну мега-програму АЛФАВІТ.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Деталі:

  • кожна буква повинна бути у своїй процедурі
  • малюємо великі букви (ABCDEF), а не маленькі
  • коли черепашка починає малювати букву, треба вважати що вона знаходиться у лівому верхньому кутику букви
  • коли черепашка закінчує малювати букву, вона повинна перейти у місце, де має починатись наступна буква (правий верхній кут + відступ). На картинці вище - точки старту позначені червоним квадратиком
  • у процедури букви є один параметр - height, який відповідає за висоту букви. Буква не повинна бути більша за height (і, бажано, не повинна бути менша). Це потрібно для того, щоб не сталось як на картинці - одна буква більша за інші

LVL 3.8. MOVE

Ось програма, яка заставляє черепашку рухатись по формулі, описаній в процедурі move(). Параметр x означає скільки секунд пройшло після старту програми, а отже, цей параметр з часом змінюється (постійно росте).

Як нові використано дії:

  • import math - додає різні математичні формули
  • import time - додає різні функції та процедури для роботи з часом
    • time.time() - повертає кількість секунд, які пройшли з 1 січня 1970 року. Результат кожен раз змінюється коли ви запускаєте програму (постійно росте)
    • time.sleep(x) - поставити програму на паузу на x секунд. Це дозволяє контролювати FPS. Наприклад, time.sleep(0.01) у вічному циклі означає, що максимальний FPS буде встановлено як 1сек / 0.01cек = 100.
  • a*b - помножити два числа і повернути результат
  • a**b - піднести a в степінь b. Наприклад, x**2 це
    x2
    , (a+1)**3 це
    (a+1)3
import turtle import math import time turtle.tracer(0,0) def move(x): turtle.goto(x*10, 10*x**2 - x*20) def scene(t0): while True: move(1 * (time.time() - t0)) time.sleep(0.01) turtle.update() scene(time.time())

Завдання

Знайти де змінюється швидкість черепашки та збільшити швидкість у 10 разів.

Завдання

Знайти місце, де написана формулу руху черепашки і змінити її параметри так, щоб виглядало як на малюнку:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Завдання

Перевірити інші формули, подивитись як вони працюють:

  • turtle.goto(10*x, 100*math.sin(x))
  • turtle.goto(10*x, 100 / x)
  • turtle.goto(10*x, 100*(math.sin(x) + math.sin(2*x) + math.sin(7*x)) )
  • turtle.goto(-x, -x)
  • turtle.goto(10*x, 10*x + 5*math.sin(10*x))
  • turtle.goto(100*math.sin(x), 100*math.cos(x))
  • turtle.goto(100*math.sin(x), 100*math.cos(x)**2)
  • turtle.goto(math.sin(x)*(10*math.sin(x) + x**2- 50), 100*math.cos(x)-x)
  • turtle.goto(x*math.sin(x), x*math.cos(x))
  • turtle.goto((int(x) % 10)*10, 0)

Колір також можна змінювати по формулі, наприклад:

  • turtle.color(0, abs(math.sin(x)), abs(math.cos(7*x)))

Завдання:

  • запам'ятати (або записати) як будуються найважливіші криві:
    • пряма лінія — вміти її направляти в будь-яку сторону
    • парабола — це крива польоту снаряду
    • хвилька (синусоїда) — вміти міняти кількість гребенів (частоту), і розмір гребенів (амплітуду)
    • коло — це рух повороту. Дуже важлива штука. Розуміти як міняти радіус
    • спіраль
  • розуміти, як направити криву у зворотньому або дзеркальному напрямку
  • розуміти як управляти швидкістю анімації
  • розуміти, що формулу можна поставити будь-де — навіть колір може бути по формулі, і формула може бути інша
    (для кольору є обмеження, що кожен елемент R, G, B має бути >= 0 та <=1)

LVL 4. Many turtles + Random

Окрім руху по формулі, існує також хаотичний, випадковий рух. Для створення хаосу потрібно використати додаткові функції Пайтона:

  • import random - підключає рандом. Після того, як рандом підключено, можна запускати такі функції:
    • random.random() - випадкове число з 0 до 1, наприклад, 0.377. Може використовуватись у команді turtle.color()
    • random.randrange(a, b) - випадкове число >= a та < b. Наприклад, random.randrange(10, 15) може бути будь-яким з 10, 11, 12, 13, 14.

Щоб зробити нову черепашку, потрібно написати так:

carl = turtle.Turtle() joe = turtle.Turtle()

Тепер carl та joe - імена для двох черепашок. Кожну з них можна окремо рухати через, наприклад, carl.forward(100) та joe.goto(-100, -100).

Завдання

Зробити багато черепашок, всі з яких рухаються по особливим правилам:

  • всі черепашки мають різні імена
  • всі черепашки мають різні кольори
  • дві черепашки рухаються по формулі спіралі (по різним формулам)
  • 5 черепашок рухаються у випадковому напрямку
  • 1 черепашка рухається у випадкові точки екрану
  • 1 черепашка завжди рухається вперед, але клавішами можна управляти напрямком її руху
  • 1 черепашка, яка рухається фіксовано як п'ятикутна зірочка

Якщо натиснути пробіл ("space"), то всі шляхи всіх черепашок стираються і починають малюватись наново.