Поки в проєкті немає змінних, гра не вміє рахувати. Спрайт бігає, звуки грають, але очок немає, життів немає, рівень не переключається. Змінна — це місце з ім'ям, куди проєкт кладе число й звідки потім його бере. Усе, що в грі треба пам'ятати, живе саме там.
Тема здається простою рівно до першої гри з рахунком, після якої починаються питання: чому очки не обнуляються, чому в усіх клонів однакове значення, чому віконце закриває половину сцени. Нижче довідник по блоках і розбір цих ситуацій по черзі.
Створення і головний вибір
Змінні лежать в оранжевому розділі, кнопка «Створити змінну». У вікні просять ім'я і пропонують вибір з двох рядків, який потім змінити вже не вийде — доведеться створювати нову.
| Варіант | Що означає | Коли брати |
|---|---|---|
| Для всіх спрайтів | одне значення на весь проєкт | очки, рівень, час |
| Тільки для цього спрайта | у кожного спрайта й клона своє | здоров’я ворога, швидкість |
Перший варіант беруть за замовчуванням, і для рахунку він правильний: очки в грі одні. Другий знадобиться, щойно з'являться клони, і про нього окремо нижче — саме на ньому плутанина найчастіша.
Блоки
| Блок | Що робить |
|---|---|
| задати [очки] значення 0 | записує конкретне число |
| змінити [очки] на 1 | додає до того, що вже є |
| змінити [очки] на -1 | віднімає |
| показати змінну [очки] | віконце з'являється на сцені |
| сховати змінну [очки] | віконце зникає |
| кругле поле [очки] | саме значення, для перевірок і виразів |
Перші два блоки плутають постійно, хоча різниця між ними принципова. «Задати» стирає попереднє значення і кладе нове. «Змінити» додає до наявного. Для нарахування очка за монету потрібен другий; якщо написати «задати значення 1», рахунок назавжди залишиться одиницею, скільки монет не збирай.
Останній рядок — не команда, а кругле поле, яке вставляють всередину інших блоків. Саме з нього складаються умови на кшталт «якщо очки більше десяти» і написи «У тебе очок: 12».
Чому очки не обнуляються
Найчастіша скарга в проєктах з рахунком: дитина запускає гру вдруге, а очки починаються не з нуля, а там, де закінчилися минулого разу. Нічого не зламалося. Змінна зберігає значення між запусками, бо зелений прапорець нічого не стирає — він лише запускає скрипти.
Лікування одне: першим ділом після прапорця поставити «задати очки значення 0». Те саме стосується життів, рівня, таймера. Корисно завести звичку: у кожного проєкту є короткий блок на старті, де всі змінні повертаються до початкових значень, і вже після нього починається сама гра.
Побічний ефект цієї звички приємний: проєкт стає передбачуваним. Дитина перестає перезавантажувати сторінку, щоб «почати чесно», а це дрібниця, яка помітно скорочує шлях від ідеї до робочої гри.
Змінні і клони
Ось місце, де вибір при створенні нарешті стає видимим. Нехай у грі десять ворогів-клонів, у кожного має бути своє здоров'я. Якщо змінна створена «для всіх спрайтів», вона в проєкті одна: влучили в першого ворога — відняли здоров'я одразу в усіх, і вони гинуть усі разом.
Варіант «тільки для цього спрайта» вирішує це сам. У кожного клона з'являється власна копія змінної, зі своїм значенням, і клони перестають заважати один одному. Правило просте: усе, що описує стан конкретного об'єкта, робиться локальним, а те, що описує стан гри, — загальним.
Перевірити, що вибрано правильно, можна без коду: якщо дія з одним об'єктом впливає на всіх однакових, змінна загальна, а мала б бути своєю.
Віконце на сцені
Віконце змінної має три вигляди, і перемикаються вони правою кнопкою по самому віконцю. Звичайний показує ім'я і значення, великий — тільки велике число, зручне для рахунку в грі. Третій вид, повзунок, дозволяє міняти значення мишкою прямо під час роботи.
Повзунок варто показати окремо, бо це найшвидший спосіб підібрати число. Швидкість персонажа, розмір стрибка, затримка між пострілами — усе це зручніше крутити повзунком живцем, ніж правити в коді й перезапускати по колу.
Галочка біля змінної в списку блоків вмикає й вимикає віконце без жодного коду. Перед здачею проєкту зайві віконця варто поприбирати: вони закривають сцену й видають службові числа, яких гравцеві бачити не треба.
Зворотний відлік на змінній
У Scratch є вбудований таймер, але він рахує тільки вперед і на весь проєкт один. Щойно потрібен відлік «залишилося тридцять секунд» або окремий час на кожен рівень, роблять свою змінну.
Схема коротка: задати час тридцять, далі цикл «повторювати, поки час більший за нуль», усередині якого чекати одну секунду і змінювати час на мінус один. Після циклу — те, що має статися, коли час вийшов.
Тут же ловиться типова помилка: блок очікування забули, і цикл прокручує тридцять кроків миттєво. Зовні це виглядає так, ніби таймер не працює зовсім, хоча відпрацював він чесно — просто за соту частку секунди.
Числа і текст порівнюються по-різному
Змінна зберігає не тільки числа: туди можна покласти слово. Проблеми починаються, коли значення змішуються. Блок запитання кладе у відповідь завжди текст, навіть якщо дитина ввела цифру, і порівняння такого тексту з числом іноді дає несподіваний результат.
Помітно це на сортуванні: за правилами тексту «10» виявляється менше за «9», бо порівнюються перші символи, а не величини. Для вікторини з числовими відповідями надійніше одразу переписати відповідь у свою числову змінну через блок складання з нулем — тоді Scratch трактує її як число.
Дрібниця, але саме вона ховається за більшістю «чомусь не зараховує правильну відповідь» у дитячих вікторинах.
Коли однієї змінної мало
Поруч зі змінними живуть списки — та сама ідея, але на багато значень одразу. Якщо потрібно зберегти не останній результат, а всі, не одне слово, а словник з двадцяти, потрібен список.
Блоки в нього свої: додати, видалити, вставити, замінити, а також круглі поля «елемент номер» і «довжина списку». Для дитини це перший контакт з тим, що в текстових мовах називається масивом, і перехід далі виходить майже безболісним — міняються слова, а не суть.
На практиці списки з'являються в проєктах трохи пізніше: таблиця рекордів, набір питань для вікторини, інвентар. Братися за них до того, як звичайні змінні стали зрозумілими, не варто.
Три поради про імена
Імена на кшталт «змінна1» мстять уже через тиждень: відкривши проєкт, дитина не пам'ятає, що це було. Називайте тим, що всередині: «очки», «життя», «рівень», «швидкість».
Другий момент — одна змінна на одне призначення. Спроба тримати в одному місці і рахунок, і номер рівня закінчується тим, що одне затирає інше, і знайти це важко.
І третє: якщо змінних стало більше семи-восьми, частина з них, швидше за все, зайва. Зазвичай це означає, що в проєкті кілька різних рахунків, які насправді один і той самий, порахований по-різному.
Далі зручно подивитися, як змінні працюють разом з координатами — про них є окремий довідник, а повний перелік блоків за категоріями зібраний у довіднику блоків. Коли від Scratch час переходити до тексту, розібрано в матеріалі про Scratch і Python.