Pokračujeme s programem kreslícím
Winstona.
Přidala jsem k němu nějaký text.
Bude potřeba umístit každého
Winstona pod jeden štítek.
Daný štítek ho zobrazí
v určitém bodě života.
Teď máme Winstony rozházené všude.
To proto, že faceX a faceY jsou nastavena
jako náhodná čísla.
Chceme tedy říci: „Toto je přesná pozice,
kde chceme, abys nakreslil Winstona."
Chceme mít možnost určit tuto pozici,
když zavoláme funkci.
Přesně tak jako u funkcí elipse() a rect().
Chceme dát Winstona sem, tady,
jednoho sem a jednoho sem.
Nechceme náhodnou pozici,
když zavoláme funkci.
Abychom to mohli udělat, musíme určit
"parametry" funkce.
Musí být přímo v definici
naší funkce, tedy zde úplně nahoře.
A pak se použijí, když voláme naší funkci,
tady dole.
Pro funkci drawWinston (),
tedy určíme parametry faceX a faceY.
Použijeme tyto hodnoty,
místo náhodného generování.
Co bychom přidali do volání těchto funkcí,
když chceme umístit Winstony pod text?
Chceme, aby x a y každého Winstona byly
podobné číslům, které jsou ve funkci text.
Možná tak o 10 pixelů níž u parametru y.
První dáme na 10 a 30.
Pak třeba 200 a 30 ...
10 a 230 ... a 200 a 230.
Je to stejné jako textové souřadnice,
jen přidáváme 10 ke každému y.
Chceme Winstona trošku níž než text.
Winston se ale stále nepohnul.
Neřekli jsme totiž naší funkci,
že chceme používat parametry.
Funkce stále tedy používá náhodné hodnoty
místo parametrů.
Naší funkci ale chceme říct,
že místo náhodných čísel má použít zadané parametry.
Názvy parametrů proto musíme dát
do těchto závorek.
Nazveme je faceX a faceY
a oddělíme je čárkou.
Na tyto parametry už odkazujeme uvnitř funkce
a díky tomu nemusíme
přepisovat zbytek našeho kódu.
Pořád se ale nic nestalo.
Winstonové se nepohnuli.
Podívejte se na začátek naší funkce.
Tady totiž přepisujeme faceX a faceY
náhodnými hodnotami.
Takže teď nám stačí akorát
smazat tyto řádky.
Nyní se už faceX a faceY dostávají
správně do funkce.
Používají se hodnoty,
které voláme.
Ale nepodařilo se nám trefit
pozice úplně správně.
Zapomněli jsme, že text získá pozici podle
levého horního rohu a obličej podle středu.
Musíme si teď trošku pohrát s čísly.
Měli bychom asi dost posunout x souřadnici.
Takže teď měním hodnoty, které
vkládáme do funkce.
Nemusím už měnit
celou definici funkce.
Vždycky se použijí tato čísla
jako hodnoty do naší funkce.
Přesně tak jako u funkcí
ellipse() a rect().
Pozice jsem už spravila, ale
všimněte si, že Winston je příliš velký.
Obličeje se překrývají a
nevejdou se vedle sebe.
Kód k nakreslení obličeje je vložený
přímo do funkce.
Můžeme tedy změnit velikost
u všech najednou.
Stačí změnit řádek
kódu, který kreslí elipsu.
Pokud sem napíšu třeba 190,
tak bude Winston moc hubený.
Ještě sem 190, teď už se vejdou lépe.
Dál bychom ho mohli upravit tak,
aby se vešel hezky mezi texty.
Zopakujme si teď, co tento kód dělá.
Definuje funkci
nazvanou drawWinston().
Říká také, že tato funkce má dvě hodnoty
označené jako faceX a faceY.
Tyto hodnoty jsou proměnné.
Můžeme je tak použít kdekoli uvnitř funkce.
Třeba tady jsme je použili jako proměnné.
Poté, co máme funkci hotovou,
ji můžeme zavolat, kdykoli chceme.
Můžeme jí předávat různé hodnoty,
takže použije vždy nové hodnoty.
Ukázali jsme si tedy,
jaká je výhoda funkcí.
Můžeme je použít na kód,
který potřebujeme použít opakovaně.
Můžeme také pomocí parametrů říct:
„V kódu je něco, co můžeš změnit.“
Je to jako recept.
Zapíšete si obecný postup.
A pak si uvědomíte, že potřebujete
uvařit pro 4 Winstony, ne pro 1.
Nemusíte začínat znovu.
Stačí upravit původní postup
a třeba to celé 4 krát vynásobit.
A teď je čas na vymýšlení
receptů ve vašem kódu.