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.