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 |