Kraps

Scratch (http://scratch.mit.edu) on uue põlvkonna graafiline programmeerimis-süsteem, mis on loodud Massachusetts’i Tehnoloogiainstituudis (Massachusetts Institute of Technology – MIT) interaktiivsete rakenduste loomiseks ning programmeerimise õppimiseks.  Scratchi  versioon 1.4 ilmus 2009. aastal, millest alates algas süsteemi kiire levik. Versioon 2.0 on kasutusel aastast 2013. Selles saab  rakenduste loomiseks ja kasutamiseks kasutada kahte võimalust:

online – redaktoriga rakendus luuakse ja käivitatakse Scratchi serveris brauseri abil
offline – redaktoriga rakendus luuakse kasutaja arvutis installeeritud tarkvara abil.

Versiooni Scratch 1.4 käsud kehtivad ka uues versioonis. Viimasesse on lisatud mõned uued vahendid ja käsud. Scratch 2.0 saab lugeda ja täita 1.4 faile, vastupidine ei ole võimailik. Versiooni 2.0 ja ka 1.4 projekte saab laadida üles Scratchi koduserverisse (nö pilvedesse) ning täita ja salvestada seal. Scratchi 1.4 projekt automaatselt teisendatakse Scratch 2.0-i. Serveris salvestatud rakendusi saab sängitada (hõlmata) ja täita veebi dokumentides (vt demosid allpool).
Scratchi 1.4 ja 2.0 offline–redaktori saab tasuta alla laadida aadressilt http://scratch.mit.edu/help. On olemas eestikeelne kasutamisjuhend ning Scratchi kodusaidil leidub suurel hulgal õppe- ja abimaterjale tõlgituna erinevatesse keeltesse (sh eesti keelde) ning näiteid. Praegu on serveris juba mitu miljonit projekti, mida võib vabalt alla laadida, uurida ja remiksida. Lisaks toimuvad arendustööd selliste vahendite loomiseks, mis võimaldavad kasutada Scratchi rakendusi ka nutiseadmetel nagu tahvelarvutid ja mobiiltelefonid.
Demo: Kraps tutvustab Scratchi
Selles väikeses demos (ca 6 minutid) tutvustab Kraps (Scratchi lähisugulane) Scratchi põhielemente ja mõningaid võimalusi. Käivitamiseks klõpsa rohelist lippu, katkestamiseks punast nuppu. NB! Rakenduses on kasutusel heli!

Scratchis on lihtne ja mugav rakenduste loomise keskkond ja kasutajaliides. Süsteemiga on kaasas rikkalik valik graafika- ja heliobjekte, neid saab lisada ka oma failidest ja Internetist. Pilte saab teha veebikaameraga ja heliklippe salvestada rakenduste loomise käigus, kui arvutil on mikrofon. Oma graafikaobjektide loomiseks või olemasolevate muutmiseks on võimalik kasutada keskkonda sisseehitatud joonistamisredaktorit. Scratchis on pööratud suurt tähelepanu atraktiivsusele ning multimeedia kasutamisele – lihtsalt ja kiirelt on võimalik luua mänge, animatsioone, koomikseid, esitlusi jms.

Samas on võimalik lahendada ka arvutuslikke, andmetöötluse- ja graafikaülesandeid: nt realiseerida, uurida ja visualiseerida klassikalisi algoritme massiividega (summade, keskmiste, ekstreemumite leidmine, erinevad otsimise ja sorteerimise meetodid), teha joonistusi ja diagramme sealhulgas funktsioonide graafikuid jms.

Näide "Kolmnurk"

Rakendus võimaldab joonistada kolmnurka, lohistades selle tippe, ja leida selle mõned omadused.

Näide "Funktsiooni uurimine"

Rakendus teeb kolme funktsiooni graafikud etteantaval lõigul ja leiab nende teatud omadused: ekstreemumid (min, max), nullkohad, pindalad ja integralid jm.

 

Scratchi "sugulased"

Scratchil on juba üsna mitmeid järglasi ja analooge. Neist tähelepanuväärseim on Berkeley ülikoolis arendatav süsteem BYOB (Build Your Own Blocks) (http://byob.berkeley.edu).
See on ühilduv Scratchiga ja momendil on oma võimaluste poolest isegi viimasest veidi ees. BYOB võimaldab luua oma käsuplokke (käske), mis vastavad oma olemuselt Scratchi plokkidele ja kujutavad endast parameetritega funktsioone ja protseduure (skripte). BYOBis saab luua ka oma objekte ja klasse. BYOB võimaldab transleerida enda ja ka Scratchi 1.4 projekte masinkoodi, saades Windowsi EXE-faili. Praegu on lõpetamisel BYOBi versioon, mis võimaldab luua rakendusi brauseris. Uue süsteemi nimeks on SNAP!.
On tekkinud mitmeid graafilisi programmeerimissüsteeme, mis on Scratchiga sarnased.
Kõigepealt võiks nimetada suurfirma Google poolt arendatavat süsteemi Blockly (http://code.google.com/p/blockly). Ka siin kasutatakse Scratchi käsuplokkidele sarnaseid elemente ning skriptid pannakse hiire abil kokku otse brauseris. Süsteemi üheks huvitavaks eriomaduseks on võimalus protseduure tõlkida erinevatesse tekstipõhistesse programmeerimiskeeltesse nagu Python, JavaScript, Dart ja XML. Koolituskeskus CODE.ORG (http://code.org) kasutab väga laialdaselt Blockly tüüpi graafilist programmeerimissüsteemii. Üsna sarnane Blocklyga on ka MIT App Inventor (http://appinventor.mit.edu), mis on ette nähtud Androidi rakenduste loomiseks mobiilidele. Veel üks omapärane eksperimentaalne süsteem on Calico (vt http://calicoproject.org), kus ühes ja samas kasutajaliideses saab kasutada erinevaid programmeerimissüsteeme: graafilist Scratchiga sarnanevat süsteemi Jigsaw, Pythonit, Rubyt, robotite programmeerimise vahendit Myro.

Sratchi kasutamisest

Scratch ja BYOB leiavad järjest laiemad kasutamisest programmeerimise õpetamisel esimeste keeltena. Need sobivad igas vanuses õppuritele, alates algklassidest kuni kolledžite ja ülikoolide programmeerimise sissejuhatavate kursusteni. Käsitletavate teemade ja lahendatavate ülesannete valikul tuleb muidugi arvestada õppijate vanust, taset, õpetamise eesmärke jm. Peab ütlema, et valikuvõimalusi ja variatsioone on siin tunduvalt rohkem kui traditsiooniliste program-meerimiskeelte kasutamisel.
USA arvutiõpetajate assotsiatsiooni (CSTA) poolt koostatud arvutiteaduse tüüpõppekavas (ülevaade, kirjeldused) põhineb aine „Sissejuhatus programmeerimisse“ täielikult Scratchil. Scratchi või BYOBiga alustatakse programmeerimise kursust näiteks CS50 Harvardi Ülikoolis (vt https://www.cs50.net/psets), Wisconsini Ülikoolis (vt link) jt. Berkeley Ülikoolis põhineb mitteinformaatikute kursus „The Beauty and Joy of Computing“ BYOBil ja Scratchil (vt http://bjc.berkeley.edu).
Esitatud kursuse antud osa põhieesmärgiks ei ole programmeerimiskeele Scratch õppimine. Scratch on siin lihtsalt vahendiks rakenduste loomise ning programmeerimise, modelleerimise ja algoritmimise aluste omandamisel. Scratchi abil on võimalik omandada kiirelt kõik peamised programmeerimise, algoritmimise, modelleerimise ja rakenduste loomise põhimõtted ja tüüptegevused: eri liiki andmete (märk-, graafika-, heli- ja videoandmed) olemus ja kasutamise iseärasused, operatsioonid andmetega ja avaldised, andmete sisestamine ja väljastamine, joonistamise põhimõtted, muutujad ja massiivid, protsesside liigid ja nende kirjeldamine. Jada, kordus, valik ja paralleelsus, programmide jagamine üksusteks ning koostöö ja andmevahetuse korraldamine nende vahel, rakenduste kasutajaliideste loomise põhimõtted, objektorienteeritud lähenemisviisi ja modelleerimise olemus. Kuigi Scratch ei toeta antud momendil kõiki objektorienteeritud (OO) programmeerimise võimalusi (tegemist on nn objektipõhise süsteemiga), võimaldab ta tutvustada ja osaliselt rakendada OO lähenemisviisi.

Materjali koosseis

Võimaldamaks õppijal saada kiiresti ülevaade Scratchist, on esimesel tasemel toodud lühivaade Scratchi kasutamisest rakenduste loomiseks. Sellega on soovitatav tutvuda kohe alguses, paralleelselt esimeste harjutustega. On lühidalt tutvustatud ka arvuti tööpõhimõtteid, tuginedes Scratchi rakendustele.
Antud osaga on linkidega seotud lisamaterjalid (teine tase), kust saab täiendavat informatsiooni vastava teema kohta. Lisamaterjalidele võivad olla viited praktikumide töölehtedelt.

Lisaks toodule on olemas mõned videoklipid ja harjutuste töölehed. Kes ei ole veel kokkupuutunud Scratchiga võiks vaadata klippi Tutvus.

Scratchi projekti struktuur ja põhiobjektid

Scratchi projekt koosneb omavahel seotud objektidest. Kasutatavad objektid ja seosed nende vahel on esitatud UML klassidiagrammina (vt modelleerimine).

projekt

Seostel toodud kordused näitavad, mitu objekti ühest klassist võivad olla seotud teise klassi objektiga. Vaikimisi on kordus 1.
Projektis on alati üks ja ainult üks lava (kordus 1), millel võib asuda suvaline arv spraite, sh ka mitte ühtegi (kordus 0..*). Selline kordus on mitmel teisel objektil: skript, heliklipp, muutuja jms.
Laval on alati vähemalt üks taust ja spraidil vähemalt üks kostüüm (1..*). Kordus 0..1 näitab, et kasutusel võib olla ainult üks objekt või mitte ühtegi (hiir, taimer, pliiats).

Projekti loomisel ja täitmisel saab kasutada ja muuta objektide omadusi (spraidi koordinaadid, suurus, nähtavus, muutuja väärtus jms). Scratchi käsuplokid on objektide meetodid, mille abil saab määrata tegevusi spraitide ja nende alamobjektidega (pliiats, heli).
Lisamaterjal: Scratchi põhiobjektid, Scratch wiki.

Spraidid

Scratchi rakenduste keskseteks komponentideks on objektid, mida nimetakse spraitideks (inglise keeles sprite – haldjas või vaim). Programmide (skriptide) abil saab määrata mitmesuguseid tegevusi spraitidega: muuta asukohta, suurust, värvust, panna kõndima, tantsima, tekitama helisid, arvutama, joonistama jms. Süsteemiga tuleb kaasa üsna suur valik spraite, mis on süstematiseeritud liikide kaupa (inimesed, loomad, asjad, …). Iga spraidiga on seotud teatud valik omadusi nagu nimi, asukoht laval (x, y), suurus, värvus, … ning meetodeid, mis on realiseeritud käsuplokkidena. Spraitide loomisel saab kasutada ka oma graafikaobjekte PNG, GIF, JPG või BMP ning animeeritud GIF-faile. Spraitide kostüüme võib luua ja muuta joonistamisredaktori abil (vt Kasutamisjuhend ja Scratch wiki).
Spraidid tegutsevad ekraanil piirkonnas, mida nimetatakse lavaks.

kostyymid

Spraidil võib olla mitu kostüümi ehk kuvandit (costume) – tüüpiliselt spraidi erinevad variandid e teisikud. Praktiliselt kujutab sprait endast graafiliste kujundite (kostüümide) kogumit. Kui sprait on nähtav, siis on nähtav üks tema kostüümidest. Vahetades kostüüme programmi käskude abil teatud sagedusega, saab tekitada animatsiooniefekte nagu kõndimine, tantsimine või muud. Kostüüme võib kasutada ka muul viisil, näiteks erinevate teadete kuvamiseks.
Lisamaterjal: Objektid Scratchis, Kasutamisjuhend, Scratch wiki.

Skriptid ja käsud

Scratchi projektis kasutatakse programmiüksusi, mida nimetakse skriptideks (script). Skript  koosneb käskudest ehk lausetest, mis on realiseeritud graafiliste plokkidena. Plokid (käsud) on jagatud funktsioonide (liikumine, juhtimine, helid jm) alusel  gruppidesse. Käsud jagunevad liht- ja liitkäskudeks, millest viimased võivad sisaldada teisi liht- ja/või liitkäske.

Plokid ühendatakse omavahel hiire abil tegevuste toimumise järjekorras. Skript algab päiseplokiga, mis on seotud skripti käivitamisviisiga: rohelise lipu klõpsamine, vajutus klahvile klaviatuuril, teate saabumine jms.
Skript kuulub alati ühele kindlale spraidile (või lavale). Ühel spraidil võib olla suvaline hulk skripte. Skriptid saavad teha omavahel koostööd teadete abil.
Programmi jagamine mitmeks omavahel koostööd tegevaks üksuseks on programmeerimises väga tähtsaks põhimõtteks. See võimaldab luua paindlikke ja ökonoomseid rakendusi, kasutada üksusi korduvalt nii samas kui ka teistes rakendustes, täita tegevusi paralleelselt jne.
Lisamaterjal: Skriptid Scratchis, Kasutamisjuhend, Scratch wiki.
skr1

Scratchis on koostöö skriptide vahel rajatud teate saatmisele ühe skripti poolt ja selle vastuvõtmisele teiste skriptide poolt. Käsuga [teata nimi] või [teata nimi ja oota] väljastatakse teade (signaal), mille võib vastu võtta ja käivituda suvaline arv skripte päisega [kui teade nimi], kus nimi on sama mis oli käsus [teata …]. Tegemist võib olla sama spraidi skriptidega või teise spraidi või lava skriptidega. Teate vastuvõtnud skriptid alustavad tööd paralleelselt.

skr2
Näiteks võib mitmel spraidil olla pildil esitatud skript, mis kõik hakkavad tööle, kui mingi skript saadab teate [teata hüppa…]. Sama päisega (nimega) skriptid võivad olla ka erineva sisuga.
Kui käsus [teata …] on täiend oota, siis peatatakse teate saatnud skripti täitmine, kuni lõpeb kõikide teate vastuvõtnud skriptide täitmine ning peale seda jätkub antud skripti töö. Kui täiendit oota käsus ei ole, jätkab teate saatnud skript oma tööd kohe pärast teate saatmist ja töötab paralleelselt teatele reageerinud skriptidega.

Näited

 

Rakenduste loomise ja kasutamise liidesed

Scratchi kasutajaliides (projekti loomise liides) kujutab endast ekraanipiirkondade kogumit, kus asuvad vahendid rakenduste loomiseks. Selle abil realiseeritakse tavaliselt rakenduse kasutajaliides, mille abil kasutaja suhtleb valmisrakendusega. Lisamaterjal: Kasutamisjuhend, Scratch wiki.
Allpool on toodud Scratch 2.0 rakenduse loomise kasutajaliides.
liides
Liidese aknas võib eristada järgmisi alasid: lava, spraidid (kasutatavate spraitide ikoonid),  käsuplokid ja plokkide grupid, skriptide ala. Plokkide gruppide kohal olevate lipikutega saab vahetada käskude, kostüümide ja helide vahelehti. Seljakoti piirkonda saab kasutada spraitide ja skriptide vahetamiseks projektide vahel. Vaikimisi on see peidetud. Offline-variandis seljakott praegu puudub.

Lava

Lava (Stage) on ekraani piirkond, kus tegutsevad kõik spraidid. Lisamaterjal: Objektid Scratchis, Kasutamisjuhend, Scratch wiki.
Laval võib olla mitu tausta. Vaikimisi on selleks valge taust. Taustu saab lisada, eemaldada, muuta. Taust on graafikaobjekt (pilt) ning oma olemuselt analoogne spraidi kostüümiga. Praegu on taustaks võrgustik.

lava Koordinaattelgede algus on lava keskel. X-telg on suunatud paremale, Y-telg ülesse. Lava laiuseks on 480 pikselit (x_min = -240, x_max = 240) ja kõrguseks 360 pikselit (y_min = -180, y_max = 180). Tegemist on tingliku ühikuga, mille suurus sõltub ekraani suurusest ja kasutatavast eraldusvõimest.

Koordinaattelgede algus on lava keskel. X-telg on suunatud paremale, Y-telg ülesse. Lava laiuseks on 480 pikselit (x_min = -240, x_max = 240) ja kõrguseks 360 pikselit (y_min = -180, y_max = 180). Tege­mist on tingliku ühikuga, mille suurus sõltub ekraani suurusest ja kasutatavast eraldusvõimest.
Saab valida lava kolme oleku (suuruse) vahel: normaalne, väike ja suur (täisekraan). Esimene variant on tavaline lava olek rakenduste loomisel. Selles olekus saab lisada uusi spraite, muuta nende asukohta, suurust jm. Lava väike olek on põhimõtteliselt sama, ainult lava mõõtmed on väiksemad ja skriptide jaoks on rohkem ruumi. Väikese lava oleku saab lülitada sisse või välja vastava käsuga menüüst Redigeeri.   Suure lava korral on täisekraanil nähtav ainult lava ning käivitamise ja peatamise nupud ning suure ja normaalse lava vahetamise nupp (üleval vasakul). Selles olekus ei saa lisada ega muuta spraite ja skripte.

Näide "Kraps rannas"

Põhjalikumaks tutvumiseks ülaltoodud Scratchi põhielementidega võiks vaadata läbi rakenduse "Kraps rannas" videoklipp ja võib olla proovida see ka realiseerida.

Andmed

Scratchi rakendustes saab kasutada graafika-, heli- ja märkandmeid.

Heliandmed

Scratchis saab suhteliselt lihtsalt kasutada heliandmeid. Süsteemis on suur vali heliklippe, neid saab importida oma helfailidest (MP3 ja WAV). Helindeid saab lindistada ka oma arvutis. Süsteemis on olemas lihtne heliredaktor. Näide "Korrutamise trenn" heliga

 

Graafikaandmed

Scratchis võib esineda kahte liiki graafikaandmeid: graafikaobjektid ja graafilised kujutised.
Graafikaobjektid imporditakse graafikafailidest või luuakse Scratchi joonistamisredaktoriga projekti loomise faasis. Formaalselt on tegemist kas lava taustadega või spraitide kostüümidega. Objektide loomiseks võib kasutada PNG, GIF, JPG, BMP faile.
Lisamaterjal: Scratchi põhiobjektid

lill
Graafilised kujutised luuakse projekti täitmise ajal. Selleks kasutatakse käske gruppidest Pliiats ja Liikumine. Grupi Pliiats käsud võimaldavad määrata pliiatsi omadusi: värv, joone paksus, olek (pliiats üleval või all) jms. Grupi Liikumine käskude abil muudetakse joonistava spraidi asukohta. Scratchis kasutatakse nn kilpkonnagraafikat.

Meetod ja nimetus võeti kasutusele aastaid tagasi programmeerimissüsteemis Logo, mis leiab ka praegu laialdast kasutust, eriti programmeerimise õpetamisel. on kasutusel mitmetes programmeerimis­süsteemides nagu Python, BYOB, Basicu mitmed versioonid. Kilpkonnagraafika elemente kasutatakse praktiliselt kõikides programmeerimissüsteemides.
Lisamaterjal: Joonistamine, Scratch wiki.

Märkandmed

Scratchis kasutatakse järgmisi märkandmeid: arvud, tekstid ja tõeväärtused. Lisamaterjal: Andmed ja avaldised.
Arvude jaoks ei ole Scratchis erinevaid vorminguid ja tüüpe, mis on iseloomulikud teistele programmeerimiskeeltele. Tegemist on tavaliste täis- ja reaalarvudega, kusjuures formaalset erinevust nende vahel ei ole. Murdosa eraldamiseks täisosast tuleb reaalarvudes kasutada punkti. Arve võib esitada käsuplokkides ning avaldistes konstantidena ja muutujatena ning sisestada klaviatuurilt. Arvude jaoks on neli põhitehet: liitmine, lahutamine, korrutamine, jagamine (+-* ,  /), võrdlustehted (<, =, >), mis esitatakse vastavate plokkide abil, ning teatud valik matemaatilisi funktsioone.
Tekstandmete väärtuseks on Scratchis, nagu ka teistes programmeerimissüsteemides, suvaliste märkide jada. Tekste saab kasutada ainult mõnedes plokkides teadete väljastamiseks, dialoogide korraldamiseks jm. Tekst sisestatakse klaviatuurilt konstandina otse plokki, omistatakse muutujale või loendi elemendile. Tekstide jaoks on olemas ka mõned tehted: ühendamine, märkide eraldamine, võrdlemine.
Tõeväärtuste ehk loogikasuuruste jaoks on ainult kaks väärtust ehk loogikakonstanti: tõene (true), väär (false). Ilmutatud kujul neid Scratchis praktiliselt ei kasutata. Loogikaväärtused tekivad võrdlustes ja loogikaavaldistes, mida kasutatakse tingimuste esitamiseks.

loogika

Konstandid ja muutujad

Lisamaterjal: Muutujad Scratchis, videoklipp "Rehmaatika"

Konstandi väärtus kirjutatakse otse käsuplokki. Programmi täitmisel ei saa konstandi väärtust muuta. Arvkonstandis võivad olla ainult numbrid, miinusmärk ja murdosa eraldaja. Tekstkonstante ei paigutata mingite piirajate (jutumärgid või ülakomad) vahele nagu seda peab tegema tekstipõhistes programmeerimiskeeltes.

kon
Plokis mine on x-i väärtus esitatud konstandiga (-200), y-i väärtus muutujaga (y0). Omistamiskäsus on kaks konstanti: 5 ja 3.75, ja kaks muutujat: x ja y. Käsus korda on kaks arvkonstanti: 3 ja 2, kaks tekstkonstanti: "Tere, " ja "!". ning üks tekstmuutuja: nimi.

Muutuja on üheks kesksemaks mõisteks kõikides programmeerimissüsteemides. Selle tähendus programmeerimises ei ole päris sama, mis on muutujal matemaatikas. Programmeerimises mõistetakse muutuja all nimega varustatud kohta arvuti mälus (mälupesa või mäluvälja), kuhu programm saab salvestada väärtusi. Salvestatud väärtust saab hiljem kasutada näiteks uue väärtuse leidmiseks.
Scratchis luuakse muutujad „käsitsi“ enne programmi täitmist grupis Andmed asuva korraldusega Loo muutuja. Muutuja loomisel kuvatakse dialoogiboks, milles saab näidata muutuja nime ja skoobi. Skoop määrab, kas muutuja on kättesaadav kõikidele spraitidele ja lavale või ainult ühele spraidile. Iga muutuja jaoks luuakse automaatselt monitor ehk näidik, mis kuvab laval muutuja jooksva väärtuse arvu või tekstina. Monitori saab ka peita. Monitori võib olla tavaline, suur või liuguriga (kerimisribaga), mille abil saab muutuja arvväärtust muuta käsitsi.
Monitoride näited:
tavalised:naid1; suured: nai2; liuguriga:nai3 .
Scratchi skriptides saab muutujatele omistada väärtusi omistamiskäskudega:
omist
Avaldis määrab väärtuse leidmise eeskirja. Selle erijuhtudeks on ka konstant ja muutuja. Käsu täitmisel leitakse avaldise väärtus ja see võetakse muutuja väärtuseks (öeldakse ka: salvestatakse muutujas), st salvestatakse antud muutuja väljas. Mõned näited:
omist2
Enamikes tekstipõhistes programmeerimiskeeltes ja algoritmides esitatakse omistamiskorraldus ehk omistamislause järgmiselt:
       muutuja = avaldis
näiteks: vahe = pikkus – kaal,  P = 2 * (a + b)

Avaldised

Avaldise abil antakse eeskiri vajaliku väärtuse leidmiseks: määratakse operandid ning tehted ja operatsioonid ning nende täitmise järjekord. Operandideks võivad olla konstandid, muutujad ja funktsiooniviidad (funktsioonid). Avaldiste koostamiseks kasutatakse vastavaid tehete ja funktsioonide plokke. NB! Sulge Scratchis ei ole.
Lisamaterjal: Andmed ja avaldised.

Arvavaldised

Arvude jaoks on neli põhitehet, mis esitatakse Scratchis vastavate plokkide abil:
arvav
Tehete järjekord määratakse plokkide paigutusega avaldises. Oluline on, et ühes plokis olev avaldise osa vastab sulgudes olevale avaldisele. Näiteks plokk apb vastab avaldisele (a + b).
Arvandmete jaoks on Scratchis teatud valik matemaatikafunktsioone, mis esitatakse avaldistes taoliste plokkide abil nagu nt  ruut. Vasakpoolses väljas saab valida funktsiooni nime: abs, sqrt, sin, cos, tan, asin, acos, atan, ln, log, e^, 10^.
Argumendiks võib üldjuhul olla avaldis, erijuhul muutuja või konstant:
fafud, sin sin(x + 45) – argument kraadides.

Tekstavaldised

Scratchis ei ole eriti palju vahendeid tegevuste täitmiseks tekstidega. Tekstide ühendamiseks on Scratch 2.0-s  plokk sidu, Mõlemas väljas võivad olla omakorda ühendamise plokid:
yhe
Plokk pik võimaldab leida antud teksti pikkuse, st märkide arvu tekstis.
Plokk mn tagastab antud numbriga (nr) sümboli.

Protsesside juhtimine

Scratchis kujutab protsessi kirjeldus käsuplokkide gruppi, milleks võib olla terve skript või osa sellest. Sõltumata kasutatavatest vahenditest võib ülesannete lahendamisel eristada nelja liiki protsesse:

  • järjestikune protsess ehk jada,
  • tsükliline protsess ehk kordus,
  • hargnev protsess ehk valik,
  • paralleelsed protsessid.

Lisamaterjal: Protsesside juhtimine, videoklipp "Rehmaatika", Scratch wiki.

Järjestikune protsess ehk jada

Järjestikuse protsessi korral täidetakse kõik käsud täpselt sellises järjekorras nagu need on esitatud. Käske ei jäeta vahele ega toimu ka kordamisi. Mingeid erilisi vahendeid protsessi määratlemisel ei ole vaja, sest täitmine toimub nö loomulikus järjekorras.

Toodud näide kujutab järjestikust protsessi. Programm küsib ja loeb ristküliku külgede pikkused a ja b, arvutab selle pindala S ja ümbermõõdu P ning leiab pindala ja ümbermõõdu suhte – suhe.
NB! käskude järjekorra valimisel peab arvestama, et neid täide-takse täpselt selles järjekorras, nagu need on esitatud programmis. Algandmete lugemise käsud peavad eelnema pindala ja ümbermõõdu arvutamisele ning viimased omakorda suhte leidmisele. Samal ajal ei oma tähtsust a ja b lugemise omavaheline järjekord ning pindala S ja ümbermõõdu P arvu-tamise järjekord.
jada

Tsükliline protsess ehk kordus

Tsükliline protsess seisneb tegevuste (käskude) korduvas täitmises. Programmis tuleb määrata reeglid ja tingimused protsessi täitmiseks. Scratchis on korduste kirjeldamiseks mitu käsuplokki, mis võimaldavad arvestada erinevat tüüpi protsessidega.
Lisamaterjal: Algoritmimine.

Etteantud korduste arvuga kordus

See esitatakse Scratchis plokiga [korda n], kus n on kordamiste arv. Viimane võib olla esitatud konstandi, muutuja või avaldise abil. Allpool on toodud selle kordusetüübi esitus ka UML diagrammi ja algoritmikeele (pseudokoodi) abil.

kor_n

Lõputu kordus

Formaalselt täidetakse ploki sees olevaid käske lõputult, kuid praktiliselt katkestatakse kordus ühel või teisel viisil. Korratavate käskude seas võib olla näiteks käsk [stopp see skript], mis täidetakse teatud tingimuse täitumisel ja see lõpetab lõputut kordust sisaldava skripti töö. Korduse võib katkestada käsk [stopp kõik], mis asub samas või mõnes teises skriptis. Alati saab korduse katkestada punase nupuga, mis lõpetab terve rakenduse töö.

kol

Eelkontrolliga tingimuslik kordus

koting

Selle korduseliigi korral korratakse tegevusi seni, kuni antud tingimus saab tõeseks.
Tingimuste esitamiseks kasutatakse loogikaavaldisi, mis esitatakse võrdluste ja loogikatehete plokkide abil:
ting
Loogikaavaldise tulemuseks saab olla ainult tõeväärtus: tõene (true) või väär (false).

Hargnev protsess ehk valik

Hargnevas protsessis valitakse üks mitmest võimalikust tegevusest, sõltuvalt antud tingimustest.
Vt ka Algoritmimine.
Scratchis on kaks valikuplokki: valik kahest ja valik ühest. Esimesel juhul täidetakse kahest võimalikust plokkide grupist üks. Teisel juhul, sõltuvalt tingimuse väärtusest, antud plokid kas täidetakse või jäetakse vahele. Iga plokk võib omakorda sisaldada valikuplokke. Tingimuste esitamiseks kasutatakse loogikaavaldisi, mis esitatakse võrdluste ja loogikatehete plokkide abil:
ting
Loogikaavaldise väärtuseks saab olla ainult tõeväärtus: tõene (true) või väär (false).

val1

val2

Paralleelsed protsessid

Kasutaja saab korraga käivitada mitu skripti, mille päises on plokk [kui klõpsatakse ...] või [kui vajutatakse klahvi …]. Lisaks juba töötavatele skriptidele võib kasutaja käivitada (kui rakenduses on ette nähtud) täiendavaid skripte, mis alustavad tööd paralleelselt eelmistega.
Skriptidest saab paralleelseid protsesse käivitada käsuplokiga [teata nimi] ja [teata nimi ja oota]. Korraga hakkavad tööle kõik skriptid, mille päises on plokk [kui teade nimi], kus nimi on sama nagu käsus teavita. Tegemist võib olla sama spraidi skriptidega või teise spraidi omadega.

Sündmused

Süsteemis on ette nähtud erinevate sündmuste kontroll ja reaktsioon nendele. Sündmusi saab tekitada kasutaja hiire ja klahvidega ning skriptid teadete saatmisega. Üheks enim esinevaks reaktsiooniks sündmustele on skriptide käivitamine, mis on seotud päiseplokkidega
Skriptid Scratchis.

sy1

sy2

Loendid

Loend (List) on järjestatud mäluväljade kogum, mis tähistatakse ühe nimega. Loendi elementidele viidatakse nime ja indeksi abil:loe1.
Käsuga Loo loend luuakse tühi loend ja laval tekib loendi monitor. Loendi elemente saab lisada, muuta ja eemalda nö "käsitsi", importida tekstifailist ja eksportida tekstifaili. Elemente saab lisada, eemaldada ja muuta vastavate käskude abil skriptides.

loendid
  loeskr

Selliseid andmekogumeid nimetatakse sageli ka ühemõõtmelisteks massiivideks.
Näites on toodud kahe loendi monitorid ja skript, mis leiab loendi hinnad elementide aritmeetilise keskmise, mis omistatakse muutujale kesk. Skript teeb kindlaks elementide arvu loendites (loendite pikkused) ja omistab selle muutujale n. Plokis [korda n] liidetakse järjest loendi hinnad elemendid (hinnad järjenumbriga k) muutujale Sum, saades hindade summa. Selle jagamisel muutuja n väärtusega saadakse keskmine.
Lisamaterjalid: Loendid 1, Loendid 2, Scratch wiki.

Kasutaja käsuplokid

Võimalus kasutajal luua oma käsuplokke on versiooni 2.0 üheks olulisemaks täienduseks. Scratchis on olemas väga kasulik võimalus programmi jagamiseks üksusteks (skriptideks) ja koostöö korraldamiseks nende vahel teadete saatmise ja vastuvõtmise mehhanismi kaudu. Kuid andmevahetuse vahendid olid seni võrdlemisi kesised, piirdudes peamiselt globaalsete muutujate ja loendite kasutamisega. Nüüd aga saab luua ka protseduure, mis võimaldavad kasutada andmevahetuseks protseduuride (skriptide) vahel parameetreid ja argumente. See on üldlevinud tehnika andmevahetuse korraldamiseks kõikides nö „suurtes“ keeltes (C, Java, Python, Visual Basic jne).
Praktiliselt taandub asi nn kasutaja käsuplokkide (sisuliselt kasutaja protseduuride) loomisele. Nende väljanägemine ja kasutamine on analoogiline süsteemi sisseehitatud standardplokkidega.

Näiteks on toodud kasutaja käsuplokk Hyppamall, mis paneb spraidi hüppama. Sprait kerkib etteantud arvu kordi (n) antud kõrgusele ja laskub peale väikest pausi alla. Enne hüpete algust kuvab sprait mingi teate, näiteks tervituse. On toodud kaks võimalikku pöördumist erinevate argumentidega.
 hyp
Esimesel juhul teeb sprait 3 hüpet kõrgusele 30 punkti (pikslit) ja kuvab teate "Tere!". Teisel pöördumisel teeb sprait 2 hüpet kõrgusele 40 pikslit ja ei kuva midagi: vastav argument puudub.

ds
Käsus on ette nähtud kolm argumenti: esimesed kaks on arvud, kolmas on tekst. Sellega peab arvestama ploki kasutamisel.
Kasutaja käsuploki loomine seisneb vastava protseduuri defineerimises (loomises). See koosneb päisest ja kehast. Vaadeldava näite korral näeb protseduur välja taoliselt.
Päis
sisaldab käsuploki nime (siin Hyppa) ja parameetreid (praegu h, n ja txt) ning märgendeid (kõrgus, n ja teade). Viimased ei ole kohustuslikud. Päise alusel moodustatakse grupi Lisaplokid alas käsuplokk
mall.
Keha kujutab endast skripti, milles kasutatakse käsuploki tööks vajalikke plokke. Oluline on, et skriptis kasutatakse parameetreid. Parameetrit txt kasutatakse plokis ütle kuvatava teate määramiseks. Parameeter n näitab plokis korda kordamiste arvu. Parameetrit h kasutatakse kaks korda: kerkimise ja laskumise suuruse näitamiseks.
Toodud klipp demonstreerib antud käsuploki kasutamist.


Allpool on toodud rakenduse programmiüksused: peaskript, millest algab täitmine, käsuploki Hüppa definatsioon ja võrdluseks skript Liigu.
demo_1
Kraps liigub vasakult paremale skripti Liigu toimel ning hüppab protseduuri Hüppa toimel.
Põhiskriptis pöördutakse kolm korda protseuuri Hüppa poole, kasutades argumentide erinevaid väärtusi. Igal pöördumisel võetakse argumentide väärtused vastavate parameetrite väärtusteks ja neid kasutatakse protseduuri täitmisel. Parmeetrite nimed: txt, n ja h, esinevad protseduuri käskudes. Argumendid on praegu enamasti esitatud konstantide abil, viimasel pöördumisel kasutatakse argumendina muutujat K, mille väärtust saab enne rakenduse täitmist liiuguri abil.
Võrdluseks toodud skriptis Liigu, kasutatakse sammude arvu (kordamiste arvu) määramiseks muutujat n ning sammu pikus on esitatud muutuja h abil. Muutujad n ja h ning parameetrid n ja h protseduuris Hüppa on erinevad asjad. Parameetrid kehtivad ainult antud protseduuri sees ja nad saavad väärtused pöördumishetkel vastavatelt argumentidelt.
Lingiga Näita rakendust saate käivitada rakenduse serveris ning näha ja soovi korral ka muuta programmi. Täpsemat infot kasutaja käsuplokkide loomise ja kasutamise kohta saate jaotisest Kasutaja käsuplokid ja Scratchi Wikist Scratch wiki

Näide "Tutvus"

Rakendus demonstreerib mitmeid Scratchi võimalusi ja vahendeid ning programmeerimise põhilisi tegevusi nagu graafika- ja heliobjektide kasutamine, märkandmete väljastamine ja sisestamine, joonistamine, korduste ja valikute kirjeldamine, muutujate, loendite ja juhuslike arvude kasutamine, lihtsate tekst- ja arvavaldiste kasutamine, tegevuste jagamine ning koostöö korraldamine skriptide vahel.

Ülevaade rakendusest

Stsenaarium: Laval on tegelased: Kraps, Mari, Juku, robot Robi ja pall. Programmi käivitamisel Kraps teretab, esitleb end, teeb salto ja küsib kasutaja nime. Kasutaja võib sisestada nime või loobuda sellest. Viimasel juhul muudab Kraps pahameelest oma värvi, väljendab kahetsust, kustutab eelmised andmed, peidab ennast ära ning lõpetab programmi töö. Kui aga kasutaja sisestab nime (põhimõtteliselt suvaline tekst: vähemalt üks märk), kiidab Kraps kasutajat ning tegelased esitlevad end, tehes seejuures mõned väikesed trikid: hüpped, saltod, tantsud jm. Seejärel pakub Juku kasutajale teenust: saada teada oma „saledus“. Kui kasutaja soovib seda, küsib Juku tema käest pikkuse ja kaalu (massi), leiab kehamassiindeksi (pikkus/kaal2) ja selle alusel „saleduse“ ning laseb abispraidil joonistada andmete ümber raami. Kui kasutaja ei soovi teada saledust, eemaldab abisprait muutujate monitorid ja raami. Enne töö lõppu jätavad tegelased hüvasti, kuvades vastavad teated ja tehes veel mõned trikid. Vahepeal poisid veidi togivad ja lennutavad palli.
Lava kujundus (taust) ei oma erilist tähtsust, see võib ka puududa. Praegu on laval mitu tausta, millest on nähtav üks. Hiireklõpsuga laval saab neid vahetada. Laval on ka muutujate näidikud (monitorid), milles kuvatakse kasutaja nimi, pikkus, kaal, indeks ja saledus. Laval on oma skriptid, üks neist töötab pidevalt paralleelselt teiste skriptidega ja muudab lava tausta värve.

 

tut_pea

Rakenduses on neli põhispraiti: Kraps, Mari, Juku ja Robi ning üks abisprait, mis joonistab ja haldab muutujate monitore (kuvab ja peidab). Konkreetsed spraitide kujud ja nimed ei oma tähtsust. Kraps on oma kahe kostüümiga kohe laval olemas. Mari ja selle kostüümid on imporditud spraitide hoidlast. Samuti on hoidlast imporditud Robi, millele on kopeerimise ja redi­geerimisega lisatud üks kostüüm. Juku on imporditud GIF‑failist. Kui aga lugeja realiseerib ise antud rakenduse, võib ta valida mõned teised spraidid.
Rakenduses on mitu skripti. Pildil on toodud üks Krapsu skriptidest, mida võib nimetada ka peaskriptiks. Sellest algab programmi töö ja siit käivitatakse teised skriptid. Peaskript alustab tööd, kui kõpsatakse rohelist lippu, samaaegselt käivitub ka lava skript, mis muudab lava taustavärve ja töötab kogu aeg paralleelset teiste skriptidega.
Edasi vaatame programmi tööd, järgides peaskripti, mille käske täidetakse järjest. Alguses on mitu lihtkäsku, kuid põhiosa skriptist moodustab liitkäsk [kui tingimus…], mis sisaldab omakorda mitut lihtkäsku. Sõltuvalt sellest, kas kasutaja sisestas oma nime või mitte, täidetakse ainult üks käsugrupp.

Skriptis on mitu käsku [teata teade…], mis käivitavad ühe või mitu alamskripti ja peatavad vahepeal peaskripti täitmise.
Siin ja edaspidi, viitamaks käskudele tekstis, paigutame need märkide [ ] vahele milles mõnikord on näidatud käsu kõik elemendid, teinekord ainult käsu algus või nimi.

Sissejuhatavad tegevused

Kõigepealt teeb käsk [näita] Krapsu nähtavaks, juhul kui ta oli peidus. See on vajalik programmi käivitamisel olukorras, kus kasutaja loobus eelmisel käivitamisel nime sisestamisest ja Kraps oli peidus. Käsk [mängi heli näu] käivitab heliklipi „näu“, mis on Krapsul kohe olemas. Vajadusel saab heliklippe importida infoalas valitavalt vahelehelt Helid. Käsk [ütle …] väljastab Krapsu tervituse, kuvades antud teksti jutumullis  Krapsu juures.
Käsk [teata hei_hop ja oota] saadab süsteemile teate, käivitamaks skripte, mille alguses on plokk [kui saabub teade hei_hop]. Praegu on Krapsul üks selline skript, mis paneb ta tegema saltot. Alamskripti käskude täitmise järel jätkub peaskripti töö.
Andmete sisestamise käsk [küsi tekst ja oota] peatab skripti täitmise, kuvab teksti spraidi juures olevas jutumullis ning kuvab lava alumises servas tekstivälja, kuhu sisestada väärtus. Kui kasutaja tipib selle ning vajutab klahvi Enter, võetakse antud väärtus sisemuutuja vastus väärtuseks ja skripti töö jätkub. Kui kasutaja vajutab kohe klahvile Enter, on tegemist nn tühja väärtusega. Käsuga [võta nimi = vastus] omistatakse muutujas vastus väärtus muutujale nimi.
Järgneb liitkäsk [kui tingimus (käsud1) muidu (käsud2)], mille abil saab kirjeldada valikuid ehk hargnevaid protsesse. Praegu on tegemist kahendvalikuga – kahest alternatiivsest võimalusest valitakse üks, olenevalt võrdluse abil esitatud tingimuse väärtusest. Kui tingimus on tõene, täidetakse käsud1 ning käsud2 jäetakse vahele. Vastupidisel juhul täidetakse käsud2 ning käsud1 jäetakse vahele. Antud juhul tehakse võrdluse abil kindlaks, kas muutujal nimi on väärtus või mitte.

Kasutaja loobus jätkamisest

Kui tingimus on tõene (muutuja nimi väärtus on tühi), täidetakse kui‑harus olevad käsud. Käsk [teavita puhasta] käivitab spraidi abi vastava skripti, mis peidab muutujate pikkus, kaal, indeks ja saledus monitorid ning kustutab raami. Käsk [pane värv efekt 100-le] muudab spraidi värvi, kasutades värvikoodi (väärtused on vahemikus 0 kuni 200). Praegu kasutatakse sinist värvi. Käsk [ütle Kahju!…] kuvab teate ja järgnev käsk [peida], mis peidab Krapsu ära. Kuna muidu‑haru käsud jäetakse vahele, siis järgnevalt täidetakse käsk [peata kõik], mis lõpetab kogu rakenduse töö.

Kasutaja jätkab

Käsu [kui…] teise haru esimene käsk [ütle…] on juba tuttav. Võrreldes eelmiste seda tüüpi käskudega, on siin kasutusel tekstavaldis, mis on moodustatud plokigatekst  ning kus ühendatakse tekstkonstant „Tubli, “  ja muutuja nimi väärtus.
Tekstide ühendamiseks tekstipõhistes süsteemides kasutatakse märki + või &. Näiteks Pythonis ja Visual Basicus pannakse selline avaldis kirja nii: „Tubli, “ + nimi, VBs ka „Tubli, “ & nimi.

Käsk [teata alustame] ja selle alusel käivitatud tegevused

Järgmine käsutüüp [teata alustame ja oota] esines juba ka eespool, kui käivitus üks Krapsu skript. Praegu on tegemist üldisema juhuga, mil käivitub korraga neli skripti, sest päisega [kui saabub teade alustame] algav skript on praegu igal spraidil. Skriptid töötavad paralleelselt. Kuna käsus teata on täiend oota, siis peatatakse peaskripti täitmine, kuni lõpeb kõikide alamskriptide töö, ning peale seda jätkub antud skripti täitmine. Vaatleme nüüd nendes protsessides osalevate spraitide vastavaid skripte ja tegevusi, mis on ülesehitatud suhteliselt sarnaselt.

Alustame. Juku ja Robi skriptid

Juku skript alustame tekitab käsuga [oota 2 sek] kõigepealt väikese pausi, et alustada tegevusi teistest veidi hiljem. Seejärel Juku esitleb end ja saadab teate „hüppa“, mis on mõeldud tema enda skriptile – see paneb Juku hüppama. Skriptis on plokiga [korda 3] määratud etteantud korduste arvuga kordus, st et ploki sees olevaid käske täidetakse kolm korda. Iga kord suurendatakse Juku y‑koordinaati 40 pikseli võrra, tehakse väike paus, vähendatakse koordinaati 40 pikseli võrra ja tehakse jälle paus. Tulemusena liigub Juku kolm korda üles ja alla, imiteerides hüppamist. Käsk [teata löök ja oota] käivitab palli skripti, mis viib palli Juku juurest Krapsu juurde ja sealt tagasi. Vahepeal lendab pall ka üles.

Juku
tut_juku

Robi
tut_robi

Robi skriptid on analoogsed. Käsuga [mängi heli robi] käivitatakse salvestatud heliklipp. Salvestada saab vahelehel Helid korraldusega Lindista, kui arvutil on mikrofon. Kui see puudub, võib võtta süsteemi heliklippide hoidlast suvalise klipi. Midagi ei juhtu, kui klippi üldse ei ole – heli lihtsalt ei mängita. Skript liigu paneb Robi kostüüme vahetama (visuaalsed efektid) ning horisontaalselt liikuma, suurendades ja vähendades x‑koordinaati. Ka siin on plokk korda, mis tagab sisemiste käskude kordamise kaks korda. Robi teine kostüüm on saadud esimesest kasutades Scratchi joonistamisredaktorit.

Alustame. Krapsu ja Mari skriptid

Kraps
aKr

 

Mari
mari

Muusika ja tantsulembese Mari skriptides demonstreeritakse heliandmete kasutamist ja tantsu imiteeri­mist kostüümide vahetamise teel. Skriptis alustamine mängitakse lihtsalt üks noot, kasutades Scratchis olevat lihtsat helide süntesaatorit. Käsus [mängi nooti number kestvusega aeg] saab näidata noodi numbri (48 kuni 72) ja kestvuse sekundites. Kes tunneb noote, võib proovida ka komponeerida meloodiat. Plokiga [mängi trummi ] saab imiteerida ka löökpillide helisid.
Skriptis tantsi võetakse Mari jaoks esimene kostüüm ballerina-a  (igal kostüümil on nimi). Seda tehakse igaks juhuks, arvestades et programmi eelneval katkestamisel võib Mari jääda suvalisse olekusse. Käsuga [mängi heli Triumph] käivitatakse heliklipp ning skripti töö jätkub muusika saatel. On olemas ka käsk [mängi heli nimi kuni valmis]. Selle käsu korral skripti töö peatatakse, mängitakse heliklipp lõpuni ning seejärel jätkatakse tööd.
Tantsu simuleerimiseks kasutatakse siin plokki [korda 8]. Igal kordamisel vahetatakse kostüümi ja tehakse väike paus. Kuna kordamisi on praegu 8, käiakse kostüümid kaks korda läbi. Kui jõutakse viimase kostüümini, alustatakse uuesti esimesest.
Skript tantsi, ilma kostüümi valimiseta ja heliklippi käivitamiseta, on ka Krapsul. Kui Mari skript alustame saadab teate tantsi, hakkab tööle ka Krapsu samanimeline skript.
Krapsu skript hei_hop paneb teda tegema saltot. Kraps liigub üles 30 pikselit, teeb ühe tiiru ja liigub tagasi alla. Paneme tähele, et 360-kraadine pööre ei ole määratud ühe käsuga: [pööra 360 kraadi], vaid 30 korda täidetava käsuga [pööra 12 kraadi] (30 * 12 = 360), et pööre oleks nähtav (jälgitav). Kui kasutada esimest varianti, siis pööret näha ei oleks. Realiseeritud variandi korral, kus igale pöördenurga muutusele (12 kraadi) järgneb ka väike paus, jaguneb liikumine kaadriteks. Taoline põhimõte on animatsioonides üldkasutatav. Liikumise kiirust ja sujuvust saab reguleerida vaadeldaval juhul nurga muutusega ja pausi pikkusega. Paneme tähele, et pause kasutatakse ka teistes animatsioonidega seotud skriptides: hüppa (Juku), tantsi (Mari ja Kraps), liigu (Robi).
Skriptides hüppa, liigu, tantsi ja hei_hop kasutatakse etteantud korduste arvuga kordust, mis on üks lihtsamaid ja sagedamini kasutatav korduse tüüp kõikides programmeerimiskeeltes. Palli skriptides demonstreeritakse tingimuslike korduste kasutamist. Lava skriptis esineb ka lõputu kordus.

Palli skriptid

Kaheks peamiseks palli skriptiks on löök ja lenda. Esimene viib palli pööreldes vasakule Krapsuni ja tagasi Juku juurde. Teine viib palli üles lava servani ja alla Juku juurde tagasi. Mõlemas skriptis kasutatakse kaks korda tingimuslikku kordust. Esimeses skriptis on tingimus määratud nö puutesündmustega – puudutab Kraps, puudutab Juku. Teises on tingimus esitatud lava serva puudutamisega (üles liikudes) ja jõudmisega antud kõrguseni (alla liikudes). Pallil on ka mõned klahvisündmustele reageerivad skriptid: [kui vajutatakse klahvi vasak nool], [kui vajutatakse klahvi ülesnool] ja [kui klõpsatakse pall], millest on näidatud ainult esimene.

pall

Saleduse leidmine

Käsk [teata saledus ja oota] käivitab rakenduse teise osa, kus põhitegelaseks on Juku. Skriptis saledus küsitakse, kas kasutaja soovib teada oma saledust. Kui kasutaja sisestab tähe e, peidetakse muutujate pikkus, kaal, indeks ja saledus monitorid ja skripti töö peatakse. See tähendab, et täitmisjärg läheb tagasi peaskriptile. Kui aga sisestatakse midagi muud, käivitakse järjest käsud [teata ...].

saledus
Käsk [teata löök] paneb tööle palli skripti, mis viib palli Juku juurest Krapsu juurde ja tagasi. See omakorda käivitab Krapsu skripti vaheta, mis lennutab vahepeal palli ülesse.  Juku skript pöörle paneb Juku tegema saltot. Põhimõtelist on tegemist sama asjaga nagu Krapsu skriptis hei_hop ning skripti pole siin näidatud.

Saleduse leidmisel on kasutusel neli põhimuutujat: pikkus, kaal, indeks ja saledus. Esimese kahe väärtused sisestab kasutaja, teised leiab skript hinnang.
Algandmete sisestamist korraldab skript loe_alg. Kuid muutujate (pikkus ja kaal) väärtusi saab muuta ka liugurite abil. Skriptis loe_alg on ette nähtud võimalus, et olemasolevaid muutujate väärtusi ei muudeta. Kui käsu küsi täitmisel väärtust ei sisestata, vaid vajutatakse kohe klahvile Enter, jääb muutuja väärtus endiseks. Väärtust muudetakse ainult siis, kui tegemist ei olnud tühja väärtusega.
Saleduse leidmisel leitakse kõigepealt kehamassi indeks (kaal/pikkus2) ja omistatakse see muutujale indeks. Kuna pikkus sisestatakse sentimeetrites, kehamassi indeksi leidmisel aga peab see olema meetrites, jagatakse muutuja pikkus väärtus 100-ga. Skriptis kasutatakse abimuutujat v, millele omistatakse pikkuse väärtus meetrites, et järgnev käsk oleks lühem.
Kehamassiindeks kind leiab sageli kasutamist inimese saleduse või täidluse hindamisel. Tavaliselt kasutatakse taolist skaalat:
valem
Siin kasutavas skriptis ei arvestata viimast kriteeriumi (kind > 30 – suur ülekaal). Lugeja võiks proovida see lisada.

Muutujate monitorid on sageli olulisteks kasutajaliidese elementideks. Antud rakenduses on ette nähtud monitoride peitmine ja kuvamine vastavalt olukorrale. Seda teevad spraidi abi skriptid: puhasta ja loe_alg, vastavate teadete saamisel.
Skript puhasta kustutab ka raami, mis on joonistatud monitoride ümber.

puhasta

Joonistamine

joon

Joonistada võib suvaline sprait. Iga spraidiga on alati seotud pliiats, mis võib olla üleval – spraidi liikumisel joont ei teki, või all – liikumisel tekib lavale joon. Joonistamisel kasutatakse peamiselt käske gruppidest Pliiats ja Liikumine.
Pliiatsi käskudega saab määrata joone värvi, varjundi ja paksuse ning muuta pliiatsi olekut, kas üleval või all. Praegu valitakse pliiatsi värv ja suurus juhuslikult.
Liikumise käskudega määratakse joonte asukoht laval. Käsk [mine x: … y: …] viib spraidi kohe antud punkti. Käsuga
[liigu t sek. x: … y: …] saab määrata spraidi sujuva liikumise. Ühikuks on piksel.

Hüvastijätt

Selles tegevuses osalevad kõik tegelased, kusjuures tegu on paralleelsete protsessidega. Siin demonstreeritakse ka lihtsamaid võimalusi loendite kasutamiseks.

loend

Loendis nimega T on tekstid, millest valitakse iga spraidi jaoks juhuslik väärtus, mis kuvatakse käsus ütle. Kõikide spraitide skriptides päisega [kui saabub teade hüvasti] on käsk
hyvasti
Loendi T elemendi indeksiks võetakse juhuslik arv vahemikust 1 kuni m, kus m on elementide arv loendis ning see leitakse spraidi abi skriptis.  

Lava skriptid

lava1

Laval on kaks skripti. Üks käivitub koos Krapsu põhiskriptiga, kui klõpsatakse rohelist lippu, muutes lava värvi.
Formaalselt on tegemist lõputu kordusega, praktiliselt aga lõpetab skripti töö Krapsu põhiskripti käsk [peata kõik]. Alati saab kogu rakenduse töö katkestada ka lava kohal asuva punase nupuga.
Värvi muudetakse sagedusega üks kord sekundis. Värvi kood valitakse juhuslikult.

Teine skript, mis käivitub hiireklõpsuga laval, koosneb ühest käsust: lava2

Andmed

Järgnevalt vaadeldakse objekte, põhimuutujaid ja rakenduse struktuuri.

Objektid (spraidid)

Kraps – juhib ja korraldab rakenduse tööd ja teeb igasuguseid trikke (kaks kostüümi, seitse skripti)
Mari – kultuuritöötaja: tantsib ja teeb muusikat (neli kostüümi, kolm skripti)
Juku – sportlane ja matemaatik, arvutab ja hindab saledusi (üks kostüüm, seitse skripti)
Robi – robot, tutvub inimestega, õpib arvutama faktoriaale (kaks kostüümi, kuus skripti)
pall – teda togivad ja pilluvad Juku ja Kraps (üks kostüüm, viis skripti)
abi (peidetud) – joonistab ja teeb muid abitöid (üks kostüüm, neli skripti)
Põhimuutujad: nimi, pikkus, indeks, saledus

Rakenduse struktuur

On näidatud üldvaade kolme spraidi skriptidest. Koostööd peegeldavad teavitamise korraldused ja vastuvõtvate skriptide päised. Vt Rakendused.

rak_struk

Algoritmid

Näiteks on toodud mõned algoritmid UML tegevusdiagrammidena ja pseudokoodis. Vt  Algoritmimine.

algod

Rakenduste disainist ja dokumenteerimisest

Suuremate rakenduste korral on otstarbekas enne skriptide koostamist täpsustada ülesande püstitust, viia läbi rakenduse analüüs ja disain (projekteerimine) ning koostada projekti dokumentatsioon:

  • määratleda andmed,
  • fikseerida spraitide funktsioonid,
  • seosed nende vahel ja tegevused,
  • koostada algoritmid,
  • kavandada kasutajaliides.

Rakenduse realiseerimise käigus dokumentatsioon enamasti täiustub ning viimasena vormis­tatakse selle lõplik variant, mida läheb vaja rakenduse kasutamisel ja arendamisel.
Lisamaterjal: Rakendused.