Maž bodky a chytaj muchu
Čo budeme robiť
- pomocou myši budeme klikať na korytnačky, ukrývať ich a znovu ukazovať, pohybovať korytnačkami
Čo už musíme vedieť
- pracovať s udalosťami na korytnačke, pracovať s tlačidlami
Naučíme sa
- spúšťať procesy, pomenovávať procesy, zastavovať konkrétne procesy, meniť tvar myši na obrazovke
Tí, čo riešili súťaž Cologobežka si možno spomenú na jednoduchý projekt, v ktorom sme mazali bodky: na stránke sa nachádza niekoľko bodiek, úlohou hráča je klikať na bodky – vtedy bodka zmizne – a takto zmazať všetky bodky.
- Bodky budú zrejme korytnačky, ktoré budú mať tvar čiernej bodky.
- Budú reagovať na udalosť priĽavomDolu tým, že sa skryjú.
Naprogramujte samostatne takýto projekt!
Ak máte na nápad na podobný projekt, ktorý využíva kliknutia na statické objekty a pripravíte ho, ho nezabunite nám ho poslať, radi ho uverejníme na www stránke.
Ak potrebujete pomôcť, kliknite sem.
Veľmi podobnou hrou je projekt mucha – okrem toho, že sa na stránke nachádza korytnačka-mucha, ktorú budeme chytať mucholapkou, tak sa táto mucha aj nejakým spôsobom pohybuje.
Analyzujeme projekt Mucha
Zrejme potrebujeme obrázky muchy, "chytenej" muchy a samotnej mucholapky – nakreslite ich v LogoMotion alebo si ich stiahnite ako samorozbaľovací exe súbor (34 KB). Obrázok muchy nakreslime tak, aby mala mucha niekoľko natočení. Aby obrázok v Imagine reagoval na zmenu smeru pravoklikneme do dolnej časti a vyberme možnosť Podľa uhla. Všetky 3 obrázky zapíšme na disk napr. s názvami mucha.lgf, chytena.lgf a mucholapka.lgf. Korytnačka bude opäť reagovať na ľavé tlačidlo myši, teraz však tak, že zmení svoj tvar na obrázok chytenej muchy a zastaví svoj pohyb. |
![]() |
Programujeme projekt Mucha
Príkazmi v riadku: načítajme všetky pripravené obrázky do pamäte Imagine. Obrázky si do pamäte pripravujeme preto, že ich budeme neustále potrebovať – budeme meniť tvar korytnačky počas spustenia projektu. Nie je vhodné spoliehať sa na to, že s naším projektom si niekto prekopíruje aj súbory s obrázkami. Okrem toho, keď súbor zapíšeme pre web k súborom s obrázkami sa na webe nedá dostať – operácia s diskom sú v Imagine na webe zakázané. Presvedčme sa, že v pamäti vznikli tieto 3 premenné Korytnačke zmeňme tvar na muchu. Z riadku vyskúšajme spustenie 2 procesov – jeden bude muchu hýbať, druhý ju bude otáčať: |
![]() |
Mucha sa hýbe. Zastavme procesy – F12.
Definujme udalosť priĽavomDolu na muche: Opäť rozbehnime z riadku predchádzajúce procesy a vyskúšajme chytať muchu.
|
![]() |
Nakoniec vložme na stránku tlačidlo, ktoré priZapnutí zmení tvar myši – využijeme základný príkaz zmeňTvarMyši, zmení tvar muchy na pôvodnú (nechytenú muchu) a rozbehne procesy pohybu a otáčania muchy: zmeňTvarMyši :mucholapka nechTvar :mucha každých 60 [do 2] každých 800 [vp ?] Opäť si uvedomme, že hoci sme tu zapísali príkazy do viacerých riadkov, v udalosti priZapnutí budú v jednom riadku. |
![]() |
Zrejme každého napadne, že kopírovaním cez schránku si môžeme vytvoriť niekoľko múch.
Vložme na stránku muchu-kópiu našej k1. Po stlačení tlačidla sa nová mucha nehýbe – malo by nám napadnúť, že zrejme nie je oslovená – to napravíme ľahko, keď do riadku zapíšeme:
? odteraz všetky
Potom sa už po stlačení tlačidla rozhýbu obe muchy, ale pri chytení jednej z nich sa zastaví aj druhá mucha.
Prečo?
V udalosti priĽavomDolu sa zastavia všetky procesy, t.j. aj proces, ktorým sa hýbe druhá mucha.
To sa dá napraviť niekoľkými spôsobmi:
|
![]() |
viem nováHra zmeňTvarMyši :mucholapka nechTvar :mucha k1'každých 60 [do 2] k1'každých 800 [vp ?] k2'každých 60 [do 3] k2'každých 800 [vp 10+náhodne 100] koniec Tento krok navrhnutia nášho vlastného príkazu sme urobili hlavne kvôli prehľadnosti celého programu. Príkazy sme mohli dopísať aj do riadku priZapnutí, avšak celý riadok by bol príliš dlhý a nedalo by sa v ňom dobre orientovať. Keď napíšeme novú procedúru, môžeme príkazy zarovanávať a dávať do viacerých riadkov.
|
![]() |
Stlačme tlačidlo t1 a vyskúšajme v riadku: ? zo všetkyProcesy [@Riadok [do 2] [vp ?] [do 3] [vp 10 + náhodne 100]] Keď teraz klikneme na niektorú z múch, ešte stále sa zastavia všetky procesy, ale z výpisu vidíme, že každý z nich vyzerá inak a tak môžeme opraviť udalosť priĽavomDolu oboch múch tak, aby každá z nich zastavila nie všetkyProcesy ale iba tie, ktoré sme spustili pre ňu. Prejdime do dialógu Zmeň k1 a zmeňme jej udalosť tak, že zastaví iba procesy [do 2] a [vp ?] Podobne pre k2. |
![]() |
Vyskúšajme projekt – ak chytíme jednu muchu, zastaví sa iba ona a druhá sa hýbe ďalej.
Takto môžeme pridávať ďalšie muchy, vymýšľať im iné procesy a potom ich zastavovať v ich udalosti priĽavomDolu.
Druhá možnosť, ako zastaviť iba konkrétny proces je, že ho pri jeho spustení pomenujeme.
Opravme teda procedúru nováHra tlačidla t1: Spustime procesy stlačením tohto tlačidla a opäť si nechajme vypísať všetky idúce procesy Vidíme, že hoci sú procesy rovnaké t.j. [do 2] a [vp ?], keď sme ich pomenovali, sú navzájom odlišné. Teraz môžeme pre každú korytnačku zmeniť udalosť priĽavomDolu a zastaviť práve jej 2 procesy: Podobne pre k2. |
![]() |
Upravme teda procedúru nováHra tak, aby spustila toľko procesov, koľko je na stránke korytnačiek a vhodne ich pomenovala:
viem nováHra
zmeňTvarMyši :mucholapka
odteraz všetky
nechTvar :mucha
každá
[(každých 60 [do 2] slovo kto "h)
(každých 800 [vp ?] slovo kto "o)]
koniec
Vysvetlime si príkazy:
- tvar myši sme zmenili podľa premennej mucholapka
- oslovili všetky korytnačky pomocou základného príkazu odteraz
- všetky korytnačky si zmenili tvar na ten, ktorý je v premennej mucha
- príkaz každá prechádza postupne všetkými oslovenými korytnačkami (v našom prípade naozaj všetkými) a spúšťa pre ne procesy hýbania a otáčania, ktoré zároveň aj pomenuje a to zložením slova-mena korytnačky, ktoré výsledkom operácie kto a písmena "h a "o.
Zrušme korytnačku k2.
Pre k1 opravme udalosť priĽavomDolu:
nechTvar :chytena zastav slovo mojeMeno "h zastav slovo mojeMeno "o
Príkaz najprv zmení tvar korytnačke a potom zastaví oba procesy, ktoré boli pre ňu spustené – názvy procesov vytvorí opäť zložením jej mena a písmena "h a "o do jedného slova.
Teraz, keď nakopírujeme cez schránku korytnačku k1 a vytvoríme na stránke ľubovoľný počet korytnačiek tlačidlo t1 pre ne spustí a pomenuje procesy a každá z nich bude zastavovať iba dva svoje procesy, ktoré ju hýbali a otáčali.