Cieľom cvičení je vyskúšať a zautomatizovať prácu s poľom (s poľom primitívnych i referečných hodnôt).
Grafický editor
Vytvorte triedu GrafickyEditor
rozširujúcu triedu WinPane
. Grafický editor funguje takto:
- v kresliacej ploche sa nachádza korytnačka (kresliace pero)
- kliknutím do plochy sa korytnačka presunie na miesto, kam sa kliklo
- pri pohybe myšou so zatlačeným klávesom
Alt
sa korytnačka natočí smerom k aktuálnej pozícii myši a nakreslí čiaru z jej aktuálnej pozície do pozície myši (korytnačka po nakreslení čiary ostáva tam, kde bola predtým)
- pri pohybe myšou so zatlačeným ľavým tlačidlom myši (
onMouseDragged
), korytnačka sa presunie na miesto, kde je aktuálne myš, pričom počas tohto pohybu kreslí čiaru
- poznámka pre špekulantov: iba ľavým tlačidlom myši, nie pri ťahaní inými tlačidlami
Korytnačkovo
- Vytvorte triedu
Korytnackovo
rozširujúcu triedu WinPane
. Po vytvorení objektu triedy Korytnackovo
(v „inicializačnej“ metóde) nech sa v kresliacej ploche automaticky vygeneruje 10 korytnačiek na náhodnej pozícii.
- Počas riešenia úlohy prediskutujte, čo je to pole, ako sa deklarujú premenné referencujúce polia určitého typu, ako sa vytvára pole („poľový objekt“), aké hodnoty sú v jednotlivých políčkach poľa po jeho vytvorení.
- Doplňte do triedy
Korytnackovo
metódy:
void posunITu(int idx, double dlzka)
– idx
-ta korytnačka spraví krok zadanej dĺžky
void nahodneFarby()
– každá korytnačka si nastaví náhodnú farbu kresliaceho pera
Color sFarbouVon(int index)
– vráti farbu i
-tej korytnačky
- Upravte triedu
Korytnackovo
tak, aby pri kliknutí do plochy sa náhodne zvolená korytnačka presunula na miesto kliknutia.
- Do triedy
Korytnackovo
pridajte metódu krok
, ktorá spraví následovné:
i
-ta korytnačka sa natočí smerom k (i+1)
-vej korytnačke (posledná smerom ku korytnačke s číslom 0) a spraví krok rovný 1/10 vzdialenosti k (i+1)
-vej korytnačke.
- Do triedy
Korytnackovo
pridajte metódu kroky
, ktorá zadaný počet krát zavolá metódu krok, pričom medzi jednotlivými krokmi bude nejaké vhodné spomalenie (napr. použitím JPAZUtilities.delay(1000)
, ktorý pozastaví vykonávanie programu na 1000ms, čiže 1 sekundu).
1
| public void kroky(int pocetKrokov) |
- Do triedy
Korytnackovo
pridajte metódu doKruhu
, ktorá všetky korytnačky v ploche rovnomerne rozmiestni do kruhu so zadaným polomerom, ktorého stredom je stred kresliacej plochy. Návod: na rozmiestnenie korytnačiek si vytvorte pomocnú korytnačku, ktorá bude korytnačky rozmiestňovať na správne miesta.
1
| public void doKruhu(double polomer) |
- Doplňte do triedy
Korytnackovo
metódu pocetTopKorytnaciek
, ktorá vráti počet korytnačiek, ktoré majú y
-ovú súradnicu menšiu ako je hodnota v parametri zhora
1
| public int pocetTopKorytnaciek(double zhora) |
- Do triedy
Korytnackovo
pridajte metódu bezpecnyKruh
, ktorá pre zadanú korytnačku (určenú jej indexom medzi korytnačkami) nakreslí najväčší možný kruh taký, že:
- jeho stred je na pozícii zadanej korytnačky
- žiadna iná korytnačka sa nenachádza v tomto kruhu
Poznámky:
- Zo zadania vyplýva, že tento kruh sa musí dotýkať aspoň jednej inej – najbližšej – korytnačky.
- Pri riešení úlohy sa vám môžu zísť konštanty:
Double.MAX_VALUE
(najväčšie číslo, ktoré možno uložiť v premennej typu double
) a Double.POSITIVE_INFINITY
(+nekonečno).
1
| public void bezpecnyKruh(int indexKorytnacky) |
- Doplňte do triedy
Korytnackovo
metódy:
int laviciarka()
– vráti index korytnačky, ktorá sa nachádza najviac vľavo
double najblizsie()
– vráti ako sú vzdialené 2 korytnačky, ktoré sú k sebe najbližšie
Kvetinová farma – príbeh pokračuje
Do projektu Farma
z prednášky pridajte metódy:
int pocetKvetin(int odZahonuIdx, int poZahonIdx)
– vráti celkový počet kvetiniek od záhonu na indexe odZahonuIdx
po záhon na indexe poZahonIdx
double priemernyPocetVZahone()
– vráti priemerný počet kvetiniek v záhone
boolean neklesajuciPocet()
– vráti, či počet kvetiniek v jednotlivých záhonoch tvorí neklesajúcu postupnosť
int pridatNaVyvazenie()
– vráti, aký minimálny počet kvetiniek musíme vysadiť, aby počet kvetín v záhonoch na párnej pozícii bol rovnaký ako počet záhonov na nepárnej pozícii
int prazdneZaSebou()
– vráti, aký maximálny počet prázdnych záhonov umiestnených v záhradke hneď za sebou sa nachádza v záhradke
Ďalšie úlohy
- Do triedy
Korytnackovo
doprogramujte drag&drop presúvanie korytnačiek.
- Upravte projekt Divný biliard z jedného z predošlých cvičení tak, aby sa nevygenerovala len jedna diera, ale 8 dier.
Pre fajnšmekrov
- Do triedy
Korytnackovo
pridajte metódu vsetkyVKruhu
, ktorá nakreslí najmenší možný kruh taký, že všetky korytnačky sa nachádzajú v tomto kruhu
- Úloha vyžaduje okrem základných poznatkov z programovania aj základoškolskú geometriu. Preto je vhodné si najprv vyriešiť geometrickú časť na papier.
- Do triedy
Korytnackovo
pridajte metódu vObmedzenomKruhu
, ktorá nakreslí taký kruh s polomerom obmedzenie
, v ktorom sa nachádza čo najviac korytnačiek. Pozn.: Využite poznatky z geometrie z metódy vsetkyVKruhu
.
1
| public void vObmedzenomKruhu(double obmedzenie) |