From Test-Scratch-Wiki

< Ukr:Довідка:Scratchblocks

Псевдокод для графічного відображення оточується тегами:

Спрощене пояснення можна знайти на форумі (англ.)

Текст кожного блоку починається з нового рядку і має бути написаний саме так, як він виглядає у Скретч. Приміром:

Код Відображення
[scratchblocks]
коли @greenFlag натиснуто
завжди
    поворот @turnRight на (15) градусів
    говорити [Привіт!] (2) сек
    якщо <мишку натиснуто?> то
        змінити [натиск миші v] на (1)
    end
end
[/scratchblocks]
коли @greenFlag натиснуто
завжди
    поворот @turnRight на (15) градусів
    говорити [Привіт!] (2) сек
    якщо <мишку натиснуто?> то
        змінити [натиск миші v] на (1)
    end
end

Аргументи

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

Числовий ввод

Поле для суто числового вводу, кругле, задається звичайними дужками: (10).

перемістити на (10) кроків
перемістити на (10) кроків

Текстовий ввод

Поле для текстового вводу задається квадратними дужками: [Привіт]

говорити [Привіт]
говорити [Привіт]
подумати [бувай]
подумати [бувай]

Блоковий ввод

Булеві блоки та блоки-репортери задаються такою розміткою: <булевий> та (репортер) відповідно.

якщо <<мишку натиснуто?> і <(образ #) = [1]>> то
    штамп
end
якщо <<мишку натиснуто?> і <(образ #) = [1]>> то
    штамп
end

Свого часу булеві блоки відображувалися круглими, наче репортери. Це було виправлено у scratchblocks3.

Ввод кольору

SandCastleIcon.png This page has links to outside of the Scratch website or Wikipedia. Remember to stay safe when using the internet as we can't guarantee the safety of other sites.

Поле для вводу кольору задається розміткою [#hexcode]. Тут #hexcode – 16-річний RGB код кольору.

задати колір олівця [#00ff00]
задати колір олівця [#00ff00]

Сайт colorpicker.com може допомогти записати правильний код для обраного кольору.

Випадаючий список

Позначка випадаючого меню зі списком задається символом "v": [вибір v]. Звісно, відображення не призначене для змінювання читачем, тож насправді розкрити цей список на веб-сторінці неможливо. У псевдокоді наводиться єдине, обране автором програми, значення.

зупинити [все v]
зупинити [все v]

Можна задати кругле відображення цього поля в такий спосіб: (вибір v).

оповістити (старт v)
оповістити (старт v)

Спеціальні блоки

Певні блоки задаються особливою розміткою, зокрема ті, які всередині містять зображення-піктограми.

Блоки-шляпи

Блок Коли зелений прапорець натиснуто задається особливим синтаксисом (внаслідок можливості багатомовної локалізації):

коли @greenFlag натиснуто
коли @greenFlag натиснуто

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

коли спрайт натиснуто
коли спрайт натиснуто

Блок Коли клавішу () натиснуто використовує випадаючий список:

коли клавішу [пропуск v] натиснуто
коли клавішу [пропуск v] натиснуто

Зчіплюючі блоки

Блок Поворот на () градусів потребує вказівки напрямку поворота. У псевдокоді напрямок позначається спеціальними словами: @turnRight (за годинниковою стрілкою, англ. clockwise); @turnLeft (проти годинникової стрілки, англ. counterclockwise).

поворот @turnRight на () градусів
поворот @turnRight на () градусів
поворот @turnLeft на () градусів
поворот @turnLeft на () градусів

Охоплюючі блоки

Охоплюючий блок має бути закритий псевдокодом "end" після останнього блоку, який має бути охоплений цип блоком. Виняток – охоплюючий блок наприкінці псевдокоду скрипта, там він буде закритий автоматично. Приміром:

повторити (10)
    перемістити на (5) кроків
    штамп
end
повторити (10)
    перемістити на (10) кроків
    штамп

відображується як:

повторити (10)
    перемістити на (5) кроків
    штамп
end
повторити (10)
    перемістити на (10) кроків
    штамп

Коментарі

Коментарі додаються до псевдокоду після повного вмісту блоку за двома косими рисками: // коментар. Вони увійдуть у графічне відображення.

перемістити на (10) кроків // чи не занадто далеко?
перемістити на (10) кроків // чи не занадто далеко?

Користувацькі блоки

Якщо спробувати створити відображення власного блоку (нерозпізнаваного ані Скретч, ані блоковим розширенням), від відобразиться червоним (і за замовчуванням буде зчіплюючого типу).

стрибнути
стрибнути

Можна створити визначення блоку (користувацький блок) за допомогою псевдокоду "визначити", за яким іде назва нового блоку:

визначити стрибнути
повторити (10)
    змінити y на (4)
end
визначити стрибнути
повторити (10)
    змінити y на (4)
end

Можна додати перелік аргументів – числових, булевих, текстових:

визначити стрибнути (висота) <тяжіння ввімкнене?> [повідомлення]
визначити стрибнути (висота) <тяжіння ввімкнене?> [повідомлення]

Таке визначення можна застосовувати всередині того самого тегу <scratchblocks>, де воно зроблене, і новий блок виглядатиме як розпізнаваний Скретч та Scratchblocks.

стрибнути

визначити стрибнути
повторити (10)
    змінити y на (4)
end
стрибнути

визначити стрибнути
повторити (10)
    змінити y на (4)
end

Користувацькі блоки вводу

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

говорити (висота)
говорити (висота)

Але якщо подібний запис зробити всередині визначення користувацького блоку, отримаємо відображення блока-репортера:

визначити стрибнути (висота)
говорити (висота)
визначити стрибнути (висота)
говорити (висота)

Спискові блоки-репортери

Якщо спробувати записати списковий блок-репортер, він відобразиться як репортер із простою змінною, бо розширення не аналізує код програми й тому не може розрізнити просту й спискову змінну.

говорити (список команди Скретч)
говорити (список команди Скретч)

Але якщо всередині того самого тега <scratchblocks> застосувати до змінної дії як до списка, тобто використати її у блоці списка, отримаємо коректне відображення:

додати [mres] до [список команди Скретч v]
додати [paddle2see] до [список команди Скретч v]
додати [harakou] до [список команди Скретч v]
говорити (список команди Скретч)
додати [mres] до [список команди Скретч v]
додати [paddle2see] до [список команди Скретч v]
додати [harakou] до [список команди Скретч v]
говорити (список команди Скретч)

Якщо таке використання змінної видається зайвим, можна для неї безпосередньо вказати тип :: list:

говорити (список команди Скретч :: list)
говорити (список команди Скретч :: list)

Скорочення запису псевдокоду

Можна скоротити псевдокод ScratchBlocks, прибравши необов'язкові символи. Це закінчення охоплюючих блоків наприкінці скрипта, дужки та лапки для закривання виразів наприкінці рядку, пропуски між полями вводу та текстом блоку. Отже, ці два фрагменти псевдокоду дають одне й те саме відображення:

Повний запис Скорочений запис
коли @greenFlag натиснуто
запитати [n=] і чекати
надати [n v] значення (відповідь)
надати [i v] значення [0]
повторити до <(n) = [1]>
якщо <(остача (n) на (2)) = [0]> то
надати [n v] значення ((n) / (2))
інакше
надати [n v] значення (((3) * (n)) + (1))
end
змінити [i v] на (1)
end
говорити (i)
коли @greenFlag натиснуто
запитати[n=]і чекати
надати[n v]значення(відповідь
надати[i v]значення[0
повторити до<(n)=[1
якщо<(остача(n)на(2))=[0]>то
надати[n v]значення((n)/(2
інакше
надати[n v]значення(((3)*(n))+(1
end
змінити[i v]на(1
end
говорити(i
коли @greenFlag натиснуто
запитати[n=]і чекати
надати[n v]значення(відповідь
надати[i v]значення[0
повторити до<(n)=[1
якщо<(остача(n)на(2))=[0]>то
надати[n v]значення((n)/(2
інакше
надати[n v]значення(((3)*(n))+(1
end
змінити[i v]на(1
end
говорити(i

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

Ручна розмітка

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

Повне роз'яснення застосування хаків наведено на форумі.

Зміна кольору та форми

Ти можеш змінити колір та форму відображення блоку. Це буває необхідним, коли слід відобразити блоки, що не належать до Скретч, правильним чином.

Дія Код Відображення
Зміна категорії (будь-якого блоку)
блок :: looks
говорити [Я не блок руху!] :: motion
з'їсти (колір олівця :: pen) :: control
якщо <торкається [вказівник миші v] ? :: list> то
    померти :: grey
end
блок :: looks
говорити [Я не блок руху!] :: motion
з'їсти (колір олівця :: pen) :: control
якщо <торкається [вказівник миші v] ? :: list> то
    померти :: grey
end
Зміна кольору
подумати [Довільні кольори?] :: #228b22
подумати [Довільні кольори?] :: #228b22
Зміна форми
блок1 :: events hat
блок2 :: motion stack
блок3 :: pen reporter
блок4 :: operators boolean
блок1 :: events hat
блок2 :: motion stack
блок3 :: pen reporter
блок4 :: operators boolean
Створення охоплюючого блоку й зміна категорії
мійблок {
    ...
} :: sensing
мійблок {
    ...
} :: sensing
Охоплюючий блок з кількома розвилками
pqr {
    ...
} stu {
    ...
} vwx :: sound
pqr {
    ...
} stu {
    ...
} vwx :: sound
Охоплюючий блок-шляпа
шляпа {
    ...
} :: motion cap
шляпа {
    ...
} :: motion cap
Додавання піктограм
@greenFlag @turnRight @loopArrow :: grey
@greenFlag @turnRight @loopArrow :: grey

Snap!

See also:

Поточна версія розширення також підтримує можливості, специфічні для Snap!, як-от "кільцевання". Інші блоки Snap! можна створити за допомогою описаних вище хаків кольору та форми.

run ({create clone :: control} @addInput :: grey ring) :: control

<() @addInput :: grey ring>

say (http:// [snap.berkeley.edu] :: sensing)

((6) × (7) :: operators)

(join [hello ] [world] @delInput @addInput :: operators)

script variables ((foo) :: grey) ((bar) :: grey) @delInput @addInput :: grey

(all but first of (list) :: list)

warp {
  перемістити на (10) кроків
} :: grey

report [Все!] :: control cap

(<> @addInput) // навіть без :: grey ring

Таким псевдокодом створюється наступне відображення:

run ({create clone :: control} @addInput :: grey ring) :: control

<() @addInput :: grey ring>

say (http:// [snap.berkeley.edu] :: sensing)

((6) × (7) :: operators)

(join [hello ] [world] @delInput @addInput :: operators)

script variables ((foo) :: grey) ((bar) :: grey) @delInput @addInput :: grey

(all but first of (list) :: list)

warp {
  перемістити на (10) кроків
} :: grey

report [Все!] :: control cap

(<> @addInput) // навіть без :: grey ring

GP

Поточна версія розширення включає також хаки, специфічні для.

when tracking (mouse x :: variables) (mouse y :: variables) :: hat control

((1) != (0) :: operators)

define(функція :: motion) :: custom hat
return (1) :: control

говорити (pi :: operators) :: motion

коли я отримую [go] :: control

чекати @addInput :: control

(isNil [obj v] :: operators)

(торкається вказівника миші :: sensing)

((--( :: #ffffff) :: operators) :: operators)

if (--( :: #ffffff) :: operators) {
} @addInput :: control
Cookies help us deliver our services. By using our services, you agree to our use of cookies.