Лабораторне заняття 1. Розробка програм на мові Scratch

Мета роботи: ознайомитися з середовищем візуального програмування Scratch, навчитися використовувати основні інструменти середовища.

Теоретичні відомості

Scratch – візуальне подієво-орієнтоване середовище програмування, створене для дітей та підлітків.

Програми на Scratch складаються з графічних блоків, підписи до яких залежать від обраної для інтерфейсу мови. Може бути обрана одна з 50 мов інтерфейсу, включаючи українську.

Основними компонентами Scratch-програми є об'єкти-спрайти. Спрайт складається з графічного представлення – набору кадрів-образів (Costume) та сценарію-скрипта. Для редагування образів спрайтів в Scratch вбудований графічний редактор (Paint Editor). Дія Scratch-програми відбувається на сцені (Stage) розміром 480 × 360 (умовних) пікселів з центром координат по середині тла.

Для програмування сценаріїв в Scratch використовується drag-and-drop-підхід: блоки з палітри перетягуються в область скриптів.

За функціональним призначенням блоки діляться на 10 груп, приналежність блоку до тієї чи іншої групи позначається його кольором (див. табл. 1.1).

В багатьох блоків є біле поле редагування, призначене для введення параметрів програмістом.

Блоки бувають трьох видів: блоки стеку, блоки заголовків і блоки посилань.

 

Таблиця 1.1 – Розподіл блоків Scratch за функціональним призначенням

Група

Англійська назва

Колір

Примітка

Рух

Motion

Синій

керують рухом спрайту (не застосовується на тлі)

Вигляд

Looks

Фіолетовий

керують зовнішнім виглядом спрайту

Звук

Sound

Бузковий

керують звуком спрайту

Події

Events

Жовтий

перевірка наявності подій, відправка сигналів до всіх спрайтів

Керування

Control

Оранжевий

керуючі конструкції, заголовки обробників подій

Датчики

Sensing

Блакитний

опитування пристроїв введення, таймер та ім'я учасника

Оператори

Operators

Зелений

арифметико-логічні операції

Змінні

Variables

Оранжевий

розділ для керування змінними і списками

Мої блоки

My Blocks

Рожевий

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

 

Блоки стеку (більша частина блоків) (Stack Blocks) зверху мають виїмку, а знизу – виступ (рис. 1.1а), з їх допомогою вони об'єднуються в групу блоків, яку називають стеком (рис. 1.1б). Стеки можна копіювати і переміщати як єдиний блок. Особливим різновидом блоків стеку є керуючі конструкції, такі як цикли – вони мають С‑подібну форму, і можуть охоплювати собою вкладений стек Scratch-блоків (рис. 1.3в).

  

а)                               б)                              в)

Рисунок 1.1 – Блоки стеку:

а) одиничний блок; б) стек; в) вкладений стек

Блоки заголовків (їх також називають шапками) (Hats) мають опуклий верхній край і виступ для об'єднання знизу – вони утворюють заголовки Scratch-стеків (рис. 1.2). До блоків-заголовків відносяться блоки «коли ...» (When ...) з групи «Події», що дозволяють організувати обробники повідомлень: зовнішніх – від клавіатури і миші, і внутрішніх – переданих між спрайтами.

 

Рисунок 1.2 – Блок заголовка

Блоки посилань (Reporters) призначені для заповнення внутрішніх полів інших блоків.

 

Рисунок 1.3 – Блоки посилань

Вигляд самого програмного середовище наведено на рис. 1.4:


Рисунок 1.4 – Програмне середовище Scratch

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

Справа розміщена сцена, яку буде бачити користувач. Тут також можна керувати спрайтами та фоном (тлом) самої сцени.

Для написання найпростішої програми достатньо з’єднати всього два блоки (рис. 1.5), в результаті чого кіт, якого звати Scratch, буде говорити «Привіт!».


Рисунок 1.5 – Програма «Привіт!» на мові Scratch

Перший заголовковий блок відповідає за виконання скрипта, що йде після нього, після натискання кнопки «Виконати» . Наступний блок виводить на екран сцени надпис «Привіт!» у вигляді діалогового вікна (рис. 1.6). Після цього виконання програми завершується.


Рисунок 1.6 – Результат виконання програми «Привіт!»

Розглянемо приклад використання умов – створимо програму «Няв» (рис. 1.7), у якій кіт буде відтворювати звук «Няв», але не при кожному виконанні програми, а з ймовірністю 50%.


Рисунок 1.7 – Скрипт програми «Няв» на мові Scratch

В даному прикладі використовується умовний оператор «якщо» з групи «Керування». Для забезпечення 50% ймовірності спрацювання, скрипт буде генерувати випадкове число від 1 до 10 (блок «випадкове» з групи «Оператори») та виконувати вкладений оператор «відтворювати звук» лише за умови, що згенероване число буде менше 6 (у половині випадків).

Якщо необхідно забезпечити повторне виконання певних дій скрипта, можна скористатися оператором «завжди». На рис. 1.8 показано програму «Цикл», яка забезпечує безперервне «нявчання» кота, без необхідності кожного разу натискати кнопку «Виконати».


Рисунок 1.8 – Скрипт програми «Цикл» на мові Scratch

В якості циклу використовується блок «завжди», що забезпечує виконання вкладених блоків до тих пір, поки програма не буде зупинена за допомогою кнопки «Зупинити» . Блок «чекати» призупиняє виконання (на вказану кількість секунд), для того, щоб звук встиг відтворитися повністю, оскільки час виконання циклу складає кілька мікросекунд.

Розглянемо приклад програми «Погладь кота» (рис. 1.9), в якій спрайт реагує на дії користувача – наведення на нього курсору.

В даному випадку цикл «завжди», буде постійно перевіряти (блок «якщо»), чи не виконується оператор «торкається», що реагує на наведення вказівника на спрайт, який зображає кота. У випадку, коли вказівник знаходиться в межах спрайту – відбудеться виконання дій, заданих всередині блоку «якщо». Після виходу вказівника за межі спрайту – виконання цих дій припиняється. Таким чином можна реалізувати взаємодію користувача з програмою, використовуючи мишку або взаємодію спрайтів між собою.


Рисунок 1.10 – Скрипт програми «Погладь кота» на мові Scratch

Тепер розглянемо реалізацію програми «Перемикач» (рис. 1.11), що дозволяє вмикати та вимикати безперервне «нявчання» кота, натискаючи на клавішу «пробіл» на клавіатурі.

   

Рисунок 1.11 – Реалізація програми «Перемикач» на мові Scratch

Перш ніж починати створювати скрипти для цієї програми, необхідно визначити змінну muted, яка буде виступати в якості прапорця, тобто «підказувати», чи потрібно «нявчати» в даний момент. Для цього необхідно перейти в розділ «Змінні», натиснути кнопку «Створити змінну» та ввести її ім’я. Після підтвердження вона з’явиться у списку змінних в даному розділі.

Оператор «змінити … на» дозволяє присвоїти нове значення для цієї змінної (для початку рівне 0). В циклі «завжди» буде перевірятися натискання клавіші «пробіл» (оператор «клавішу … натиснуто?»), а далі в залежності від умови буде змінено значення змінної muted на 1 або 0. Вкладений оператор умови дозволяє розглянути кілька варіантів розгалуження дій програми (блок «якщо … інакше»).

Поряд з цим, створюємо ще один скрипт для даного спрайту. Він буде виконуватись паралельно з першим. В ньому буде перевірятися значення змінної muted і якщо воно буде рівне 0 – здійснюватиметься «нявчання».

Розглянемо реалізацію власних функцій на прикладі програми «Кашель», представленої на рис. 1.12.


а)                                  б)

Рисунок 1.12 – Реалізація програми «Кашель» на мові Scratch:

а) використання власної функції; б) власна функція.

Середовище програмування Scratch дозволяє користувачу об’єднувати часто використовувані блоки в якості власної функції. Для цього потрібно зайти в розділ «Мої блоки», натиснути «Створити блок» та вказати його назву. Також для функції можна включити аргументи, представлені нижче: отримати число або текст (поле вводу), отримати логічне значення (поле вставки логічного виразу), додати напис.

Після натиснення кнопки «Гаразд» на робочому полі з’являється заголовковий блок з назвою функції, до якого можна приєднувати інші стандартні блоки, які і сформують новостворену функцію. Для використання в блоках визначених аргументів потрібно перетягнути їх назву із заголовкового блоку у відповідне місце.

В програмі «Кашель» реалізовано функцію (рис. 1.12б), яка змусить спрайт промовляти «Кхе!» визначену кількість разів. В цій функції визначено змінну n, яка буде використовуватись в блоці «повторити», задаючи кількість повторень.

Для вставки створеної функції в основний спрайт, необхідно її просто перетягнути з розділу «Мої блоки» у потрібне місце, та задати значення раніше визначених аргументів (рис. 1.12а).

Розглянемо приклад програми «Потоки» (рис. 1.13), яка використовує два спрайти та два скрипти до них, які надають їм можливість взаємодіяти.

      

а)                                                    б)

Рисунок 1.13 – Реалізація програми «Потоки» на мові Scratch

а) скрипт для спрайту Beetle; б) скрипт для спрайту Cat 2

Для початку необхідно видалити стандартний спрайт (вибрати його в області керування спрайтами та натиснути на кошик у правому верхньому куті спрайту) та додати два нових: Beetle та Cat 2 (натиснути кнопку «Обрати спрайт» та вибрати потрібні з бібліотеки). Розмір спрайту Beetle зменшуємо до 60% (поле Розмір в області керування спрайтами).

Вибравши спрайт Beetle, додаємо до нього код, що дозволить йому рухатись по сцені (рис. 1.13а). Спочатку задаємо його початкове положення (блок «перемістити в х: … у: …») та напрям руху (блок «повернути в напрямку»). Далі запускаємо цикл «завжди», всередині якого буде перевірятися умова «чи не торкається даний спрайт спрайту Cat 2» (блок «якщо», умовний вираз «не») і якщо це дійсно так – переміщається на 3 кроки за раз (блок «перемістити на … кроків»). Також додано блок, що змінює напрямок руху спрайту на протилежний, якщо він досяг межі сцени.

На рис. 1.13б показано скрипт для спрайту Cat 2, головна мета якого «наздогнати» спрайт Beetle. Як і в попередньому випадку, задається початкове положення. Для визначення напрямку руху використовується випадкове число від 91 до 179. Постійно перевіряється умова дотику до спрайту Beetle і якщо це сталося, програється звук та припиняється виконання скрипта. Якщо дана умова не виконалась – напрямок руху змінюється в напрямку спрайту Beetle (блок «слідувати за»), а також відбувається переміщення спрайту в даному напрямку на 1 крок.

Таким чином, програма використовує, свого роду, багатопотоковість, керуючи роботою обох спрайтів одночасно.

Програма «Марко-Поло» (рис. 1.14) демонструє яскравий приклад використання передачі повідомлень між спрайтами.


а)                                                    б)

Рисунок 1.14 - Реалізація програми «Марко-Поло» на мові Scratch

а) скрипт для першого спрайту; б) скрипт для другого спрайту

В даній програмі перший спрайт буде очікувати від користувача натискання клавіші пробіл, видавати надпис «Марко!» та відправляти повідомлення event (блок «оповістити», рис. 1.14а). Скрипт другого спрайту почне виконуватися лише тоді, коли отримає повідомлення event (рис. 1.14б).

Таким чином, використання передачі повідомлень дозволяє реалізувати механізм реакції одних спрайтів на дії інших.

Переглянути інші проєкти та приклад їх реалізації можна, перейшовши за посиланням https://scratch.mit.edu/explore/projects/all.

Остання зміна: Thursday 28 May 2020 12:01 PM