Podcast o Základy programovania v Scratchi

Základy programovania v Scratchi: Kompletný Sprievodca

Podcast

Scratch: Od herného bloku k profesionálnemu kódu0:00 / 8:47
0:001:00 zostáva
TerezaVäčšina študentov si myslí, že Scratch je len taká farebná hračka na klikanie pre deti. Že na skutočné programovanie to nestačí.
LukášPresne tak. Ale vieš čo je na tom najzaujímavejšie? Že práve v Scratchi sa skrývajú základné princípy, ktoré používajú aj profesionálni programátori v jazykoch ako Python alebo Java. Je to oveľa viac než len hračka.
Kapitoly

Scratch: Od herného bloku k profesionálnemu kódu

Délka: 8 minut

Kapitoly

Súbory a postavy

Klonovanie vs. Duplikovanie

Komunikácia a udalosti

Scratch a profesionálne programovanie

Dátové typy v kocke

Zhrnutie

Přepis

Tereza: Väčšina študentov si myslí, že Scratch je len taká farebná hračka na klikanie pre deti. Že na skutočné programovanie to nestačí.

Lukáš: Presne tak. Ale vieš čo je na tom najzaujímavejšie? Že práve v Scratchi sa skrývajú základné princípy, ktoré používajú aj profesionálni programátori v jazykoch ako Python alebo Java. Je to oveľa viac než len hračka.

Tereza: Takže sa vlastne hráme a zároveň učíme niečo, čo potom reálne využijeme? To znie super. Počúvate Studyfi Podcast.

Tereza: Dobre Lukáš, poďme na to. Spomínal si, že Scratch je mocnejší, než sa zdá. Začnime ukladaním dát. Môže program v Scratchi napríklad zapisovať skóre do súboru počas hry?

Lukáš: To je skvelá otázka, lebo odhaľuje prvý zaujímavý limit. Scratch nevie zapisovať do súboru priamo počas behu programu. Funguje to inak. Dáta, napríklad skóre, si počas hry ukladáš do takzvaného zoznamu.

Tereza: Čiže ako do nejakej dočasnej tabuľky priamo v hre?

Lukáš: Presne. A keď hra skončí, tento zoznam môžeš exportovať. Vtedy ti Scratch vytvorí textový súbor. Každý prvok zoznamu bude jeden riadok v súbore.

Tereza: Aha! A dá sa to využiť aj naopak? Načítanie dát do hry?

Lukáš: Určite. Predstav si, že chceš vytvoriť labyrint. Nemusíš ho stavať ručne z blokov. Môžeš si ho pripraviť v textovom súbore, kde napríklad jednotky znamenajú stenu a nuly voľnú cestu. Každý riadok súboru je potom jeden riadok mapy.

Tereza: A program si to len načíta a vykreslí. To je šikovné. A čo postavy, ktoré sa v tom labyrinte pohybujú? Ako ich vytvoríme?

Lukáš: Máš tri hlavné cesty. Buď si vyberieš hotovú postavu z knižnice Scratchu, ktorú si môžeš dokresliť a upraviť. Druhá možnosť je, že si nakreslíš úplne vlastnú postavu od nuly.

Tereza: A tá tretia?

Lukáš: Môžeš si postavu nahrať zo súboru, ak ti ju napríklad pošle kamarát. Tieto súbory majú koncovku .sprite3. Dôležité je, že každá postava môže mať viac kostýmov.

Tereza: Ako keby sa prezliekala! Takže keď rýchlo mením kostýmy, vyzerá to, že postava beží alebo máva?

Lukáš: Presne tak! A čo je kľúčové — každá postava má svoj vlastný scenár, svoje vlastné príkazy a dokonca môže mať aj vlastné premenné. Je to ako malý herec s vlastným scenárom.

Tereza: Dobre, takže môžem mať v hre viac postáv, každá robí niečo iné. Ale čo ak potrebujem veľa rovnakých postáv? Povedzme armádu nepriateľov alebo dážď kvapiek.

Lukáš: Tu sa dostávame k zásadnému rozdielu medzi duplikovaním a klonovaním. Duplikovanie je ručná práca. Klikneš pravým tlačidlom na postavu a dáš "duplikuj".

Tereza: A mám druhú, presne takú istú?

Lukáš: Áno, aj s rovnakým scenárom a kostýmami. Ale je to úplne nezávislá kópia. Ak zmeníš kód v jednej, druhej sa to nedotkne. Je to ako kopírovanie dokumentu.

Tereza: Rozumiem. A klonovanie?

Lukáš: Klonovanie je dynamické a programové. Pomocou príkazu "naklonuj seba" vieš vytvoriť desiatky alebo stovky kópií postavy priamo počas behu hry. Predstav si hru, kde z neba padajú jablká. Nevytvoríš dvesto postáv jabĺk ručne.

Tereza: To by som sa asi zbláznila.

Lukáš: Presne. Vytvoríš jedno jablko a potom mu povieš, aby každú sekundu vytvorilo svoj klon. Všetky tieto klony potom počúvajú na špeciálny blok "pri štarte klonu". Tam im určíš, čo majú robiť – napríklad padať dole.

Tereza: Takže klony sú ako také dočasné, programom vytvorené kópie originálu?

Lukáš: Presne. Sú ideálne na padajúce objekty, strely v hre alebo rôzne vizuálne efekty. A hlavne, môže ich byť naraz veľmi veľa.

Tereza: Keď mám na scéne toľko postáv a klonov, ako sa medzi sebou dohovoria? Nemôžu si predsa zavolať.

Lukáš: Skoro. Používajú na to systém správ, ako takú poštu. Jedna postava môže "poslať správu" s nejakým názvom, napríklad "ŠTART HRY" alebo "NEPRIATEĽ ZNIČENÝ".

Tereza: A ostatné postavy môžu na tú správu čakať?

Lukáš: Áno. Majú blok "po prijatí správy". Takže keď hlavná postava pošle správu "NEPRIATEĽ ZNIČENÝ", postava, ktorá počíta skóre, ju prijme a vykoná príkaz "zmeň skóre o 10". Je to základ komunikácie.

Tereza: A čo priamy kontakt? Napríklad keď sa moja postava dotkne mince?

Lukáš: Aj to sa dá zistiť. Sú na to bloky ako "dotýkaš sa postava...?" alebo dokonca "dotýkaš sa farby?". Postavy teda vedia, či do seba narazili, alebo ako ďaleko sú od seba.

Tereza: To znie, akoby celý Scratch fungoval na princípe "keď sa niečo stane, urob toto".

Lukáš: To je presná definícia! Scratch je udalosťami riadené prostredie. Program nebeží od riadku jedna do konca. Čaká na udalosť — kliknutie na zelenú vlajku, stlačenie klávesu, kliknutie na postavu, alebo prijatie správy. A až potom spustí príslušný kúsok kódu.

Tereza: Takže pre pohyb doprava mám jeden blok, ktorý čaká na stlačenie šípky doprava, a pre skok ďalší, ktorý čaká na medzerník?

Lukáš: Presne tak. Každá interakcia je udalosť, ktorá spúšťa nejakú reakciu. To platí pre postavy aj pre scénu, teda pozadie.

Tereza: Na začiatku si spomínal prepojenie s profesionálnym programovaním. Stále mi to vŕta v hlave. Ako môže byť klikanie blokov podobné písaniu kódu v Pythone?

Lukáš: Je to v tých konceptoch, ktoré sa učíš bez toho, aby si si to uvedomovala. Hovorí sa tomu objektovo orientované programovanie, alebo OOP.

Tereza: Znie to zložito.

Lukáš: Ale princíp je jednoduchý. V OOP máš "objekty", ktoré majú svoje vlastnosti a schopnosti. V Scratchi je každá postava takým objektom. Má vlastnosti ako pozícia a veľkosť, a schopnosti definované jej skriptami.

Tereza: Takže skripty sú ako metódy v Pythone a premenné postavy sú ako jej atribúty?

Lukáš: Perfektne si to vystihla! Keď vytvoríš premennú a zaškrtneš "len pre túto postavu", vytvorila si vlastne súkromný atribút objektu. A posielanie správ je veľmi podobné volaniu metód medzi objektmi.

Tereza: A klony sú potom inštancie triedy?

Lukáš: Presne! Originálna postava je ako trieda – šablóna. A každý klon je jej konkrétna inštancia. Scratch síce nemá všetko, napríklad dedičnosť, ale učí ťa premýšľať v objektoch, čo je absolútny základ moderného programovania.

Tereza: Dobre, poďme ešte na chvíľu k tým premenným. Spomínal si, že môžu byť pre jednu postavu alebo pre všetky. Aké typy údajov do nich môžem ukladať?

Lukáš: Scratch je v tomto veľmi priateľský. Nemusíš dopredu hovoriť, či to bude číslo alebo text. Jednoducho vytvoríš premennú a vložíš do nej, čo potrebuješ.

Tereza: Takže môžem mať premennú "skóre", kde budú čísla, a premennú "meno_hráča", kde bude text?

Lukáš: Áno. S číslami môžeš robiť všetky bežné matematické operácie – sčítanie, násobenie, porovnávanie. S textom, alebo reťazcami, ich môžeš spájať, zisťovať ich dĺžku, alebo či obsahujú nejaké písmeno.

Tereza: A čo keď potrebujem uložiť viac hodnôt? Ako napríklad zoznam všetkých uhádnutých slov.

Lukáš: Na to slúžia zoznamy, ktoré sú v podstate ekvivalentom zoznamov v Pythone. Môžeš do nich pridávať prvky, mazať ich, nahrádzať, alebo zisťovať, či sa v nich nejaký prvok nachádza. Je to ideálne na inventár v hre, zoznam otázok v kvíze alebo ukladanie najvyšších skóre.

Tereza: A posledná vec – logické hodnoty. To sú tie pravda/nepravda?

Lukáš: Presne tak. V Scratchi ich priamo nevidíš ako slová "pravda" a "nepravda", ale používaš ich neustále. Každá podmienka, napríklad "ak skóre > 10", alebo senzor "dotýkaš sa myši?", vráti presne takúto logickú hodnotu. A na základe nej sa program rozhoduje, čo urobí ďalej.

Tereza: Páni, tak toho bolo celkom dosť. Skúsme to zhrnúť. Scratch je teda oveľa viac než len hra. Čo je podľa teba ten najdôležitejší odkaz pre študentov?

Lukáš: Kľúčové je pochopiť, že Scratch je vizuálny, udalosťami riadený jazyk, ktorý vás hravou formou učí základné, ale extrémne dôležité koncepty programovania. Od premenných a zoznamov, cez riadenie programu pomocou udalostí, až po základy objektového myslenia s postavami a klonmi.

Tereza: Takže keď sa nabudúce budem hrať so Scratchom, môžem si povedať, že sa vlastne pripravujem na Python?

Lukáš: Presne tak. Učíš sa logicky premýšľať a rozdeľovať problém na menšie časti. A to je zručnosť, ktorá je na nezaplatenie v akomkoľvek programovacom jazyku.

Tereza: Super. Ďakujem ti veľmi pekne za všetky tieto informácie, Lukáš.

Lukáš: Rado sa stalo. Bavte sa programovaním!