Riešenie 3. úlohy 1. ročníka celoštátneho kola súťaže COLOGOBEŽKA

Začiatok riešenia úlohy je jednoduchý: do Plochy si načítame pripravený súbor automat.bmp a vytvoríme dve korytnačky "pohar a "tec s ich príslušnými obrázkami. Vytvoríme ich animačné, neaktívne. Kvôli počiatočnému ladeniu korytnačku "tec vytvorme radšej viditeľnú (pri behu programu ju však zviditeľníme až po výbere nápoja). Keďže pohár aj tečenie nápoja majú v obrázku navrhnutú sivú farbu, ale pri tečení nápoja musia mať farbu vybraného nápoja, zmeníme obom aktívne farby.
? pre [pohar tec] [zmen.aktivnu.farbu 7]
A môžeme hneď vyskúšať, či to funguje:
? pre [pohar tec] [zmen.fp 14]
Keďže je pohár prázdny, musíme mu ešte zmeniť fázu, aby sme videli farbu džúsu:
? pre "pohar [zmen.fazu 3]

Teraz napíšeme príkaz, ktorý umožní používateľovi kliknúť niekde do plochy. Príkaz najprv čaká na stlačenie nejakého klávesu (základná operácia klaves). Ak bolo stlačené ľavé tlačidlo myši (výsledkom operácie je 0), presunie korytnačku 0 (iba tá je aktívna, nezabudnite jej však dať hore pero) na miesto to miesto do Plochy, kde sa kliklo. Potom zavolá príkaz nalej.iha, ktorý vykoná animáciu liatia nápoja do pohára. Ak používateľ stlačil niečo iné, príkaz rekurzívnym volaním opäť čaká kliknutie.
Môže vyzerať:
viem cakaj.klik 
  urob "k klaves 
  ak :k = 0 [zmen.poz poz.mysi nalej.iha ukonci] 
  cakaj.klik 
koniec 
Nalievanie džúsu je iba vymieňanie fáz pohára – pohár je prázdny, trochu plný, viac plný, úplne plný. Príkaz nalej.iha teda najprv zmení farbu pera poháru a tečeniu na takú farbu na akú klikol používateľ (na toto miesto sa presunula korytnačka 0 a teda pod ňou je tá správna farba), obrázok korytnačky "tec sa aj ukáže a potom 3x zmení fázu korytnačke pohár:
viem nalej.iha 
  pre [pohar tec][zmen.fp pre 0 [farba.bodu] ukaz] 
  opakuj 3 [pre "pohar [zmen.fazu faza + 1] cakaj 200] 
koniec 

Oba príkazy ešte spojíme do príkazu start:
viem start 
  pre "pohar [zmen.fazu 1] 
  pre "tec [skry] 
  cakaj.klik 
koniec 
Týmto sme najjednoduchším spôsobom splnili zadanie úlohy.

Riešenie časti a) je tiež veľmi jednoduché: na vhodnom mieste vytvoríme korytnačku, ktorá bude vypisovať cenu nápoja. Korytnačka nech sa volá "pis.cenu, je neaktívna a neviditeľná. Nastavíme jej nejaké písmo:
? pre "pis.cenu [zmen.pismo [Arial] [9 700 0 0 0]
prípadne zmeníme farbu pera
? pre "pis.cenu [zmen.fp 15]
a vyskúšame
? pre "pis.cenu [text 12]
Ak sa nám zdá, že nie je na správnom mieste posunieme ju (či už príkazmi dopredu, vzad alebo priamym posúvaním korytnačky, keď si ju najprv zviditeľníme).

Do príkazu start dopíšeme generovanie ceny a jej vypísanie do Plochy. Keď projekt vyskúšame vidíme, že po jeho novom spustení programu sa nová cena napísala na tú z predošlého behu. Preto pred výpisom najprv načítame pôvodný súbor automat.bmp:
viem start 
  citaj.p "automat.bmp 
  urob "cena.iha 10 + nahodne 11 
  pre "pis.cenu [text :cena.iha] 
  ... ; pôvodné príkazy 
koniec
Riešenie časti b) je zložitejšie. Najprv si musíme vytvoriť 8 mincí príslušných hodnôt. Pri ich vytváraní nesieme zabudnúť, že meno korytnačky musí nejako vyjadrovať aj hodnotu mince, ktorú korytnačka znázorňuje. Napr. korytnačky s menami 11, 12, budú tie s hodnami 1, mená 21, 22 budú mať tie, ktoré zobrazujú hodnoty 2Pem, 51 a 52, ktoré sú pre 5Pem a 101 a 102, ktoré budú pre hodnoty mincí 10Pem. Na zistenie hodnoty mince použijeme potom základnú operáciu bez.posledneho so vstupom -- menom korytnačky, na ktorú sa kliklo.

Potom si musíme označiť miesto, kam budeme mince vhadzovať. Najprv mincu začneme myšou ťahať k otvoru. Keď ju pri ňom pustíme, minca sa do otvoru vhodí. Mohli by sme kontrolovať súradnice mince, jednoduchšie však je keď použijeme základnú operáciu vnutri. Jeho vstup -- obdĺžnik, v ktorom sa má nachádzať korytnačka môžeme tistiť napr. tak, že ho napíšeme v priamom režime a po stlačení klávesu F9 vyznačíme obdĺžnik okolo vhadzovacieho otvoru. Na zistenie, či bola minca pustená v blízkosti otvoru a pripočítanie jej hodnoty k doterajšiemu súčtu vhodených mincí navrhneme príkaz kontrola:
viem kontrola 
 ak vnutri? [47 163 35 32][pre :z [skry] urob "sucet.pem ( bez.po :z ) + :sucet.pem] 
koniec 

Nakoniec navrhnime príkaz tahaj.pem na ťahanie mincí k otvoru
viem tahaj.pem 
 urob "k klaves 
 ak :k = 0 [ak zvolena <> [][urob "z zvolena oslov :z]] 
 ak :k = - 1 [ak :z <> [][zmen.poz poz.mysi]] 
 ak :k = - 2 [ak :z <> [][zmen.poz poz.mysi kontrola]] 
 ak :sucet.pem < :cena.iha [tahaj.pem] 
koniec 

a do príkazu start doplňme niekoľko vyvolaní pripravených príkazov, takže môže vyzerať napr.:
viem start 
 citaj.p "automat.bmp 
 urob "cena.iha 10 + nahodne 11 
 pre "pis.cenu [text :cena.iha] 
 pre [11 12 21 22 51 52 101 102][domov ukaz] 
 pre [tec][skry] 
 pre [pohar][zmen.fazu 1] 
 urob "z [] 
 urob "sucet.pem 0 
 tahaj.pem 
 oslov 0 
 cakaj.klik 
koniec 
Tým je hotové aj riešenie b).