Rešenie
1. príkladu 1. ročníka celoštátneho kola súťaže COLOGOBEŽKA
Najprv si v Obrázkovom editore nakreslíme
obrázok čiernej bodky, napr. do obrázkovej premennej "cierna.bodka.
Na začiatku vytvoríme 10 korytnačiek s týmto obrázkom. Vytvorme ich neaktívne,
skryté, s perom hore, všetky napr. v bode (0,0). Korytnačke s menom 0 zmeňme
v Obrázkovom editore tvar na štetec.
Ďalej navrhnime niekoľko príkazov.
V základnom z nich najprv všetky bodky skryjeme, ukážeme iba štetec a celé
riešenie prevedieme na riešenie dvoch častí: príkaz daj.bodky rozmiestni
niekoľko bodiek na Plochu, príkaz maz.bodky dovolí používateľovi
myšou mazať bodky, keď sa všetky zmažú, príkaz skončí.
 
| viem start pre vsetky [skry]
; skryjeme všetky bodky
 pre 0 [ukaz] ; ukážeme
štetec
 daj.bodky
 maz.bodky
 koniec
 | 
Príkaz daj.bodky vytvorí premennú
"pocet.b, do ktorej vygeneruje náhodný počet bodiek medzi, t.j.
číslo od 1 do 10. Potom pre prvých toľko korytnačiek, koľko je v tejto
premennej, rozmiestni náhodne na Plochu a ukáže ich.
 
| viem
daj.bodky pocet.b
1 + nahodne 10 ; vygenerujeme náhodný počet bodiek
 opakuj
:pocet.b ~
 [pre poc [zmen.xy -310 + nahodne 620 -200 + nahodne 400 ukaz]]
 ;
bodky s menami 1, 2, :pocet.b ukážme na náhodných miestach
 koniec
 | 
Hlavný cyklus až po zmazanie všetkých
bodiek zabezpečuje príkaz maz.bodky. Končí, ak sú už všetky bodky
zmazané, t.j. v premennej "pocet.b je 0, samozrejme hodnotu premennej
budeme znižovať vždy pri zmazaní bodky. Potom nasleduje štandardné čítanie
klávesov a kontrolovanie jednotlivých možností práce s myšou. Pri kliknutí
na korytnačku 0, t.j. štetec, oslovíme túto korytnačku. Pri ťahaní myšou
zisťujeme, či ťaháme štetec (výsledkom operácie kto je neprázdny
zoznam). Ak áno, zavoláme príkaz zmaz.bodku. Pri pustení ľavého
tlačidla myši odoslovíme štetec a až do nasledujúceho stlačenia jej ľavého
tlačidla sa iba rekurzívne volá príkaz maz.bodky.
| viem maz.bodky ak :pocet.b = 0
[ukonci] ; všetky bodky sme zmazali
 urob "k klaves
 ak :k = 0 [ak zvolena
= 0 [oslov 0]]
 ak :k = - 1 [ak
kto <> [][zmaz.bodku]]
 ak :k = - 2 [oslov
[]]
 maz.bodky
 koniec
 | 
Posledný príkaz maz.bodku najprv
zmení pozíciu štetca tam, kde sa nachádza kurzor myši a potom zisťuje,
či sa na tomto mieste nachádzajú aj iné korytnačky - bodky, t.j. pomocou
základnej operácie prekryvajuce zisťuje, či korytnačka 0, ktorá
je v tejto chvíli aktívna, prekrýva niektoré iné korytnačky. Ak áno, odpočíta
počet prekrývajúcich od hodnoty premennej "pocet.b a korytnačky-bodky
skryje.
| viem zmaz.bodku zmen.poz poz.mysi
 ak nie.je prazdne?
prekryvajuce~
 [urob "pocet.b
:pocet.b - pocet prekryvajuce pre prekryvajuce [skry]]
 koniec
 |