Ako sa pečú koláče
Čo budeme robiť
- vytvárať jednuchú hru, v ktorej je úlohou hráča správne usporiadať postupnosť obrázkov
Čo už musíme vedieť
Na stránke sa v dolnej časti nachádza niekoľko obrázkov, ktoré vyjadrujú v časovej postupnosti nejaký dej – v našom prípade postup pri pečení koláčov. Úlohou hráča je ťahať tieto obrázky a umiestniť ich do predpripravených rámčekov v takom poradí, v akom nastali.Ak je obrázok správne umiestnený "doskočí" na svoje miesto do rámčeka. Ak ho chce hráč umiestniť na iný rámček, vráti sa na svoju pôvodnú pozíciu – takto vlastne dieťaťu oznamuje, že urobilo chybu a že obrázok patrí na iné miesto.
Naučíme sa
Analyzujeme projekt
Aby boli korytnačky–obrázky v pomiešanom poradí, zrejme každej z nich určíme nejaký iný záber.
Korytnačkám–rámčekom zase navrhujeme mená r1, r2, r3 a r4 a to v poradí v akom sa nachádzajú na stránke. Keď bude chcieť hráč umiestniť obrázok do niektorého rámčeka zrejme budeme kontrolovať, či slovo, ktoré vznikne zložením písmena "r a jeho fázy je práve meno toho rámčeka, na ktorý ho chceme položiť.
Korytnačky–obrázky budú mať zrejme tvar, ktorý sme pripravili, zdvihnuté pero, zapnuté Automatické ťahanie, aby sme ich mohli ľahko ťahať po stránke a zapnutú voľbu Určovanie záberu.
Čo musí udalosť priĽavomHore zistiť?
- či sa korytnačka s niekým prekrýva, najlepšie priamo z niektorým z rámčekov a to s tým na koho miesto patrí – napr. korytnačka, ktorá sa zobrazuje tretím záberom patrí zrejme do rámčeka r3, lebo zábery v obrázku boli v dobrej časovej postupnosti,
- ak áno, "doskočí" na jeho miesto – pri vytváraní obrázkov rámika a tých, ktoré určujú časovú postupnosť musíme dávať pozor, aby mali Základný bod na rovnakom mieste napr. v strede kresby
- ak nie, korytnačka sa vráti na svoje pôvodné miesto, teda domov – po vytvorení a umiestnení všetkých korytnačiek–obrázkov a rámčekov tak, ako sa nám to ako dizajnérom páči, vyberme pre každú korytnačku v jej pravoklikom menu položku Zmeň prejdime do záložky Pozícia a každej korytnačke a stlačme tlačidlo Prevezmi, aby za svoju domácu pozíciu považovala tú, na ktorej sa nachádza.
Z predchádzajúceho programovania vidíme, že všetky 4 korytnačky–obrázky sú rovnaké. Zrejme ste ich získali navrhnutím iba jednej korytnačky a potom jej kopírovaním cez Schránku. Takýmto spôsobom sme vlastne navrhli spoločné vlastnosti všetkých korytnačiek–obrázkov. Ak chceme môžeme teraz prejsť k definovaniu triedy, ktorá bude mať tieto vlastnosti – pero hore, automatické ťahanie, tvar a udalosť priĽavomHore. (Ak nechceme, môžeme zostať aj na tejto úrovni programovania, ale prečo nevyužiť vlastnosti objektovo-orientovaného programovania, ktoré Imagine ponúka).
Začnime nový projekt, ktorý budeme od začiatku celý budovať objektovo. Hneď na začiatku definujme novú triedu obrázokDoHry. Dá sa to urobiť niekoľkými spôsobmi napr. aj v riadku:
? nováTrieda "korytnačka "obrázokDoHry
[autoŤahanie áno pero ph určovanieZáberu áno tvar (obrázokZoSúboru "kolace)]
Poznámka: umiestnenie príkazov do niekoľkých riadkov je iba kvôli lepšej čitateľnosti v našom vysvetľovaní, pri definovaní udalosti musíme všetky príkazy zapísať do jedného riadku.
Triede dodefinujme udalosť priĽavomHore – vojdime do Pamäte, dvojkliknime na triedu. Otvorí sa nám podobný dialóg ako pre Zmeň hociktorého objektu, ale tento dialóg má iba tri záložky: Udalosti, Premenné a Procedúry. Pridajme udalosť priĽavomHore, ktorá skontroluje, či sme obrázok položili na správny rámik:
ak2 prekrývajúMa <> []
[ak2 (prvý prekrývajúMa) = (slovo "r záber)
[nechPoz pre prvý prekrývajúMa [poz]][domov]]
[domov]
Vysvetlime si príkazy:
korytnačku, na ktorej sme pustili ľavé tlačidlo myši niekto prekrýva?
ak nie: vráti sa domov
V riadku teraz vytvorme novú korytnačku–obrázok, ktorá bude objektom (inštanciou) našej novej triedy obrázokDoHry. Pri jeho vytváraní určíme, čo je pre túto konkrétnu inštanciu iné ako bude pre ostatné inštancie tejto triedy. V našom prípade je to zrejme meno tejto korytnačky a jej pozícia:
? nový "obrázokDoHry [meno 1 poz [-160 -90]]
Skúšajme ťahať tento obrázok a umiestňovať ho na niektorý rámček. Keďže tvar korytnačky má záber 1, tak doskočí iba na prvý rámček. Ak sa obrázok pokúšame umiestniť na iný rámček alebo hocikam inam, vráti sa do svojej domovskej pozície.
Skúsme tejto korytnačke zmeniť záber:
? 1'nechZáber 2
a opäť ju ťahajme a umiestňujme do rámikov. Do ktorého teraz dosadne?
Podobne v riadku vytvorme ďalšie 3 korytnačky–obrázky do hry:
? nový "obrázokDoHry [meno 2 poz [-20 -90]]
? nový "obrázokDoHry [meno 3 poz [120 -90]]
? nový "obrázokDoHry [meno 4 poz [260 -90]]
Nakoniec vložme na stránku tlačidlo, ktorým každej korytnačke-obrázku vyberieme iný záber a umiestnime ju do domovskej pozície:
urobTu "pZábery pomiešaj [1 2 3 4]
opakuj 4 [pre poč [nechZáber prvok poč :pZábery domov]]
Určite ste si všimli, že niekoré korytnačky sa kreslia pod inými korytnačkami – zrejme preto, že vznikli skôr ako tie, pod ktorými sa vykresľujú. Pri ťahaní korytnačiek to ruší celkový dojem. Preto navrhnime udalosť priĽavomDolu, ktorá pri kliknutí na korytnačku–obrázok zabezpečí jej presunutie nad všetky ostatné.
Rozmyslime si najprv, či patrí táto udalosť celej triede obrázokDoHry alebo jednotlivým korytnačkám–obrázkom (t.j. či je pre všetky korytnačky–obrázky "rovnaká" alebo či musí byť pre každú z nich iná).
Zrejme všetci vidíme, že je to spoločná udalosť pre celú triedu – prejdime teda do Pamäte a doplňme do triedy obrázokDoHry udalosť priĽavomDolu:
Kvôli úplnosti sa ešte môžeme pozrieť do Pamäte a dať si zobraziť rodičov všetkých objektov. Tam najlepšie vidíme, čo máme na stránke:
Toto bolo naše prvé stretnutie s triedami, terminológiou a ich používaním v Imagine. V našom tutoriály nie je miesto na to, aby sme vysvetľovali objektovo-orientované programovanie, preto vám odporúčame prečítať si niečo o OOP v literatúre.
- Doplňte do projektu ďalšie obrázky – napr. postup pri kreslení domčeka. Vytvorte premennú, v ktorej budú tieto obrázky uložené v Pamäti. Porozmýšľajte nad tým, komu patrí táto premenná a či niečo nezmeniť v triede obrázokDoHry. (Teraz, keď má každá inštancia niekoľko možností pre svoj tvar nedá sa vlastnosť "tvar" chápať pre celú triedu a tak v triede zrejme zrušíme premennú tvar. Po jej zrušení vyskúšajte iba v riadku vytvoriť novú inštanciu triedy obrázokDoHry. Aký bude mať tvar?) Upravte projekt tak, že tlačidlo Nová hra vyberie niektorú sadu obrázkov – buď koláče alebo kreslenie domčeka.
- Doplňte do hry ďalšie sady obrázkov a upravte tlačidlo Nová hra tak, aby vyberalo jednu z nich.
Pomôcka: ak máme globálne premenné "koláče, "domček, "obraz a"značky s obrázkami v udalosti priZapnutí tlačidla t1 využijeme príkazy:
urobTu "k ?prvok [koláče domček obraz značky]
opakuj 4 [pre poč [nechTvar obsah :k]]