Doplňte do projektu metody pro východ a západ slunce za předpokladu, že Země je placka.
Cvičení 2 - úkol 4
V tomto úkolu budeme do třídy Obrazek přidávat metody pro východ a západ slunce. Při řešení tohoto úkolu můžeme problematiku pochopit dvěma různými způsoby:
- Země je placka - každé ráno vznikne nové slunce a po západu zanikne.
- Slunce obíhá kolem země, takže se slunce vytvoří pouze jednou a pak je zobrazené, nebo skryté.
V této části budeme uvažovat, že je země placka.
Při této variantě vzniká při každém volání metody vychodSlunce()
nová instance objektu Kruh
, který slunce představuje. Instance vzniká i v metodě kresli()
, protože při prvním vykreslení obrázku je den.
- Začneme tedy editací zdrojového kódu třídy
Obrazek
. Budeme vytvářet nové metody, které vepíšeme na konec těla třídy. Vytvoříme metodu pro východ slunce s názvem
vychodSlunce()
- Jako první napíšeme komentář k metodě, abychom v budoucnu věděli, co metoda dělá.
- Dále budeme pokračovat hlavičkou metody:
- metoda bude veřejná, použijeme tedy klíčové slovo
public
- nebude vracet žádný parametr, návratový typ bude tedy typu
void
- nebude ke svému běhu potřebovat žádné parametry, v závorkách tedy nebude nic
- Nejdříve v metodě otestujeme, zda je noc, protože tělo této metody budeme samozřejme chtít vykonávat pouze za předpokadu, že je noc, a tudíž slunce není na obloze. To, že je noc zjistíme tak, že instanční proměnná slunce obsahuje hodnotu
null
- tedy není referencí na žádný objekt. - V těle metody tedy nejdříve vytvoříme novou instanci třídy
Kruh
, a referenci na tento objekt si uložíme do instanční proměnné slunce. - Vytvořenému kruhu pomocí volání na jeho referenci nastavíme počáteční hodnoty tak, aby kruh vypadal jako slunce:
- změníme mu velikost pomocí volání
zmenVelikost(60)
- barvu voláním
zmenBarvu("zluta")
- posuneme ho do správné výšky
posunVertikalne(-10)
- pro začátek jej posuneme mimo plátno pomocí
posunHorizontalne(-60)
- změníme mu velikost pomocí volání
- Když máme slunce připravené, můžeme ho posunout kousek na oblohu. To zajistíme voláním
pomaluPosunHorizontalne(60)
- Protože je slunce již na obloze, můžeme obrázek obarvit - zavoláme tedy metodu
setBarevny()
. - Nyní již můžeme dokončit posun slunce po obloze opětovným voláním metody
posunHorizontalne(180)
.
Metodu pro východ slunce máme hotovou, můžeme tedy vytvořit tělo metody
zapadSlunce()
- Opět nejprve začneme jejím komentářem.
- Hlavička metody je až na její název shodná s předchozí metodou.
- Tělo metody budeme provádět pouze za předpokladu, že je slunce na obloze - to poznáme podle toho, že instanční proměnná slunce obsahuje referenci na objekt - neobsahuje tedy hodnotu
null
. - V těle metody nejdříve posuneme slunce na okraj plátna pomocí
posunHorizontalne(90)
- Slunce je již skoro zapadlé, takže obrázek obarvíme na černo-bílo tak, jako když je noc voláním
setCernoBily()
. - Pak dokončíme pohyb slunce z plátna opětovným voláním metody
posunHorizontalne(30)
- Nakonec zrušíme referenci na objekt typu
Kruh
tak, že do proměnné slunce přiřadíme hodnotunull
. O fyzickou likvidaci objektu Kruh se postará již automaticky Garbage Collector bez našeho vědomí. - Nyní již stačí třídu
Obrazek
zkompilovat, vytvořit její instanci, na referenci zavolat nejdříve metodukresli()
a pak pro kontrolu obě nově vytvořené metody.
Ukázka
Nahoru