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) |