Riešenie 3. úlohy školského kola 2. ročníka súťaže COLOGOBEŽKA

 3. Ježko zbiera jablká
Najprv si v Obrázkovom editore nakreslíme obrázok jablka – premenná "jablko a ježka – zmeníme základný obrázok korytnačke 0 na obrázok ježka s dvoma fázami (jedna otočená pravo, druhá vľavo). V Painte nakreslíme obrázok stromu do veľkosti kresliacej plochy 640x402 bodov (v hlavnom menu voľba Image –> Atributes).
Korytnačku 0 presunieme pod pravý okraj stromu, dáme jej pero hore a zmeníme jej natočenie na 270 stupňov.
Teraz vytvoríme 10 jabĺk – korytnačky 1, 2, ..., 10. Buď pomocou pravého klikania do Plochy (na strome), výberom natočenia, pera hore a obrázka z premennej "jablko.Šikovnejší môžu všetky korytnačky vytvoriť pomocou základného príkazu urob.kor na jednom mieste. Zápis tohto príkazu môže byť napr.

Potom je potrebné korytnačky poprenášať na nejaké miesta na strome a ich a vytvoriť ich znovu pomocou pravého kliku do Plochy a Pomôcky Urob korytnačku na tomto mieste.
Deti, ktoré poznajú príkaz nahodne a zmen.xy môžu vymyslieť prenášanie korytnačiek na náhodné miesto na strome napr. ? opakuj 10 [pre poc [zmen.xy -150 + nahodne 132 -25 + nahodne 140]]
Pozn.: toto sú súradnice vymyslené pre umiestenie môjho stromu na Ploche, Váš strom je zrejme nakreslený inde
Nakoniec navrhneme príkaz, ktorý vygeneruje koľko jabĺk ostalo na strome a toľko korytnačiek–jabĺk ukáže. viem daj.jablka
 urob "p.jablk 1 + nahodne 10
 opakuj :p.jablk [pre poc [zmen.xy -150 + nahodne 132 -25 + nahodne 140 ukaz]]
koniec
Ďalej vytvorme dva hlavné príkazy – jeden bude zabezpečovať chodenie ježka – zbieraj.jablka a v ňom volanie druhého – vyries.klik, ktorý vyrieši situáciu, keď sa kliklo na jablko a následné padnutie príslušného jablka.
Volanie oboch príkazov dajme do príkazu start. viem start
 daj.jablka
 zbieraj.jablka
koniec
 Príkaz zbieraj.jablka skontroluje, či sú ešte na strome nejaké jablká – doplňme vytvorenie a inicializovanie na nulu premennej "p.pozbieranych do príkazu start. Ak áno, pokračuje ďalej, ak nie, príkaz končí – všetky jablká sú pozbierané (buď si ich odniesol ježko alebo sa stratili). Potom príkaz zistí, či bolo niečo stlačené – operácia klaves? V prípade, že sa niečo stlačilo, zavolá príkaz vyries.klik. Ak nebolo stlačené nič, v príkaze sa kontroluje ježkova x-ovú súradnica (ak je ježko mimo oblasti pod stromom otočí ho o 180), ježko prejde dopredu a rekurzívnym volaním dosiahneme opakovanie popisovaných činností až kým nie sú pozbierané všetky jablká. viem zbieraj.jablka
 ak :p.jablk = :p.pozbieranych [ukonci]
 ak klaves? [vyries.klik]
 ak x.sur < - 180 [vl 180]
 ak x.sur > 10 [vl 180]
 do 5
 cakaj 10
 zbieraj.jablka
koniec
Ostáva zapísať príkaz vyries.klik. Vieme, že bolo niečo stlačené, najprv príkaz zistí, či to bolo ľavé tlačidlo myši – výsledkom operácie klaves je 0. Ak bolo, ešte je potrebné zistiť, či sa kliklo na niektoré z jabĺk – výsledok operácie zvolena nie je prázdny. V takom prípade oslovíme zvolenú korytnačku – jablko a zavoláme príkaz jablko.padaj, ktorý dorieši padnutie jablka a jeho zmiznutie alebo objavenie sa v ježkovom brlôžku. Malým nedostatkom tohto riešenia je kliknutie na korytnačku 0 – ježko, to sa dá vyriešiť doplnením otázky ak zvolena<>0 do predchádzajúceho príkazu.
Príkaz jablko.padaj skontroluje prekrývanie jablka s ježkom a y-ovú súradnicu padaného jablka. V prípade, že jablko spadlo na ježka, objaví sa v pravej časti obrazovky. Ak je pod úrovňou na ktorej chodí ježko, zmizne. V inom prípade pokračuje vo svojom padaní.
    viem jablko.padaj
     ak nie.je prazdne? prekryvajuce ~
      [ak prvy prekryvajuce = 0 ~
         [zmen.xy 150 + nahodne 30 -150 + nahodne 30 oslov 0 ukonci]]
     ak y.sur < -170 [skry oslov 0 ukonci]
     do 5
     jablko.padaj
    koniec
Týmto je ľahší variant vyriešený.
Pre riešenie ťažšieho variantu najprv vytvoríme brloh s pripravenými miestami na jablká. V Obrázkovom editore navrhneme sivé jablko - premenná "sive.jablko. V príkaze vytvor.brloh najprv vytvoríme ďalšiu korytnačku navrhnutého tvaru. Táto korytnačka pomocou otláčania svojho tvaru pripraví v brlohu toľko sivých jabĺk koľko ich je na strome – premenná "p.jablk.
 
viem vytvor.brloh 
 urob.kor 11 [25 -150 90 ph skry :sive.jablko] 
 oslov 11 
 opakuj :p.jablk [zmen.xy x.sur + 25 -150 otlac] 
 zrus.kor 11 
koniec
Volanie príkazu vytvor.brloh doplníme do príkazu start. Kvôli tomu, aby mohol byť v nasledujúcej hre iný počet jabĺk, musíme Plochu so stromom v príkaze načítavať. Okrem toho musíme ukrývať všetky korytnačky, aby príkaz daj.jablka ukázal len počet jabĺk v tejto hre (to bolo potrebné robiť aj v jednoduchšom variante). Okrem toho je potrebné pred začatím zbierania jabĺk osloviť iba ježka – korytnačka 0. 
    viem start 
     pre vsetky [skry] oslov 0 ukaz 
     citaj.p "strom.bmp 
     daj.jablka 
     vytvor.brloh 
     oslov 0 
     urob "p.pozbieranych 0 
     zbieraj.jablka 
    koniec
Teraz už iba zmeníme časť príkazu jablko.padaj. Namiesto náhodného umiestnenia jablka, vytvoríme ďalší príkaz – k.brlohu. V ňomsa sa ježko a jabloko otočia do smeru k pravej časti obrazovky, prejdú k brlohu – príkaz chod.k.brlohu. Po uložení jablka na prvé voľné miesto sa ježko otočí a vráti pod strom – príkaz pod.strom. viem k.brlohu
 pre 0 [zmen.smer 90]
 zmen.smer 90
 chod.k.brlohu
 oslov 0
 zmen.smer 270
 pod.strom
koniec
Príkaz chod.k.brlohu je opäť rekurzívny. Kontroluje sa x-ová súradnica práve oslovenej korytnačky – jablka. Ak je už pri brlohu, jablko sa umiestni – podľa toho, kde sme v príkaze vytvor.brloh začali prípravu miest pre jablká. Ak sú od brlohu ešte ďaleko, posúvajú sa ježko s jablkom bližšie k brlohu. Aby sme vedeli, ktoré je prvé voľné miesto, budeme počítať počet jabĺk v brlohu – vytvorme a inicializujem premennú "p.v.brlohu v starte, jej zvyšovanie doplníme do príkazu k.brlohu, ale až za samotné volanie príkazu chod.k.brlohu (urob "p.v.brlohu :p.v.brlohu+1). viem chod.k.brlohu
 ak x.sur > 40 [zmen.xy 50 + :p.v.brlohu * 25 -150 zmen.smer 180 ukonci]
 pre 0 [do 3]
 do 3
 chod.k.brlohu
koniec
Posledný príkaz pod.strom presunie ježka na miesto pod stromom – pre náš strom je vhodná napr. x-ová súradnica menšia ako 10. Takto sme vyriešili aj ťažší variant úlohy.