Podcast o Základy programovania v Scratchi
Základy programovania v Scratchi: Kompletný Sprievodca
Podcast
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!