12 - Premenné v podprogramoch
Last updated
Last updated
Zatiaľ sme premenné využívali hlavne v jednoduchých programoch bez podprogramov. V podprogramoch fungujú premenné trošku inak a pozrieme sa teraz na to ako.
Začneme ale rozcvičkou.
Vytvorte jednoduchý skeč, ešte bez setup
a draw
, ktorý na náhodné miesto na čiernej obrazovke vykreslí žltú tvár:
Rozdeľte kód svojho programu do podprogramov setup
a draw
, aby skeč kreslil tvár na náhodné miesto neustále:
Možno vám to nepôjde hneď. Prídte na to, čo patrí do jedného podprogramu a čo do druhého.
Vytvorte nový skeč, ktorý bude mať podprogramy setup
aj draw
aj mouseClicked
. Hneď v prvom riadku programu zadefinujte premennú x
a priraďte jej hodnotu 100
. Takto:
Doplňte program tak, aby pri kliknutí do okna vypísal program hodnotu premennej x
takto:
Presuňte vytvorenie premennej x
z prvého riadku programu dovnútra podprogramu setup
:
Processing nám hneď podčiarkne jedno aj druhé x
a niečo sa mu nepáči. Prejdite myšou na prvé x
a pozrite si chybovú hlášku:
V podprograme setup
nám počítač hlási, že premenná x
nie je nikde použitá.
Ale ako to, veď ju používame v mouseClicked
?
Pozrime sa na chybovú hlášku v mouseClicked
:
V podprograme mouseClicked
zase počítač hlási, že premenná x
neexistuje.
Ale ako to, veď ju definujeme v podprograme setup
?
Premenné, ktoré sú zadefinované v podprograme voláme lokálne. Existujú len v tom podprograme, v ktorom boli zadefinované.
Toto je lokálna premenná x
:
Je lokálna pre podprogram setup
, existuje len v ňom a iné podprogramy ju nemôžu používať. Preto nám podprogram mouseClicked
hlásil chybu, že premenná x
neexistuje.
A toto je globálna premenná x:
Je globálna v celom programe, vrátane podrogramov. Vie ju používať každý podprogram.
Vyrobíme si počítadlo kliknutí. Vytvorte nový skeč s globálnou premennou kliky
, ktorá má hodnotu 0
. V podprograme mouseClicked
ju dajte vypísať v takejto podobe:
Toto je samozrejme nezmysel, pretože aby počítadlo fungovalo, musíme ho pri každom kliknutí zvýšiť o 1
. To sme ešte nerobili a robí sa to takto. Pozrite si prvý riadok v podprograme:
Doplňte program o novú globálnu premennú tuky
. Napíšte podprogram keyPressed
tak, aby sa okrem hlásenia o klikoch vypisovala pri každom stlačení klávesy aj koľkokrát už bola stlačená nejaká klávesa:
Spustite tento nový program:
Vyskúšajte, čo takto doplnený program píše, keď stlačíme myš a čo napíše, keď stlačíme klávesnicu.
Čo sa to deje? Prečo má raz premenná x
hodnotu 33
a inokedy hodnotu 100
?
Je to preto, že to nie je tá istá premenná.
Podprogram mouseClicked
používa globálnu premennú x
, na obrázku podčiarknuté fialovou.
Podprogram keyPressed
si zadefinuje svoju vlastnú lokálnu premennú x
, na obrázku zelenou.
Sú to v pamäti počítača dve rôzne krabice. Na každej je nálepka s menom x
, ale sú to dve rôzne krabice. Tá fialová je na polici v spoločnom globálnom sklade, tá zelená je na polici v lokálnom sklade keyPressed
.
Vytvorte program s počítadlom interakcií, teda ťuknutí a kliknutí dohromady. Pri každom stlačení klávesy vypíše "Tuk"
a aktuálny stav, pri stlačení myši vypíše "Klik" a aktuálny stav:
Vytvorte nový skeč, ktorý má globálne premenné x
a y
s hodnotami 50
a 100
. Pri kliknutí myšou sa nakreslí čiara z x,y
do pozície myši:
Upravte program tak, aby sa pri stlačení klávesy nastavila hodnota premenných x
,y
na novú náhodnú pozíciu a farba čiar tiež náhodne:
Vytvorte nový skeč, ktorý na začiatku programu vygeneruje náhodnú pozíciu x
,y
a potom v podprograme draw
na túto pozíciu kreslí kružnice náhodnej veľkosti z rozsahu 100,200
:
Doplňte program tak, aby sa pri kliknutí myšou nastavila hodnota premenných x
,y
na aktuálnu pozíciu myši:
Vytvorte nový skeč, ktorý na klik myši kreslí nakreslí krúžok s veľkosťou d
. Po každom nakreslení sa d
zväčší o 1
:
Vytvorte nový skeč, ktorý vykreslí horizontálnu hranicu v náhodnej výške. Potom vykresľuje na náhodné miesta bodky a ofarbuje ich podľa toho, kde sa nachádzajú. Ak ich stred je nad hranicou, tak sú červené, inak sú žlté.
Doplňte program aby som mohol kliknúť myšou, aby sa hranica nastavila na pozíciu myši. Tiež sa pri kliknutí premaže aj obrazovka: