5. sada domácich zadaní

Najneskorší termín odovzdania: 2.11.2015 (pondelok) o 21:00
Odovzdávané súbory: KorytnaciSvet.java

Doplňujúce požiadavky:

  • riešenia, ktoré nebude možné skompilovať (t.j. riešenia so syntaktickými chybami) nebudú hodnotené,
  • zdrojový kód správne naformátujte (CTRL+SHIFT+F),
  • očakáva sa vhodne okomentovaný zdrojový kód

Korytnačí svet

Uvažujme triedu KorytnaciSvet, ktorá rozširuje triedu WinPane:

import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.*;

public class KorytnaciSvet extends WinPane {
        /**
         * Referencia na pole korytnaciek
         */

        private Turtle[] korytnacky = null;

        /**
         * Inicializacna metoda
         */

        public KorytnaciSvet() {
                this.korytnacky = new Turtle[0];
        }

        /**
         * Metoda na pridanie korytnacky na zadanych suradniciach
         */

        public void pridajKorytnacku(int x, int y) {
                Turtle novaKorytnacka = new Turtle();
                this.add(novaKorytnacka);
                novaKorytnacka.setPosition(x, y);

                Turtle[] noveKorytnacky = new Turtle[this.korytnacky.length + 1];
                System.arraycopy(this.korytnacky, 0, noveKorytnacky, 0, this.korytnacky.length);
                noveKorytnacky[noveKorytnacky.length-1] = novaKorytnacka;

                this.korytnacky = noveKorytnacky;
        }

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                if (!(detail.isAltDown() || detail.isControlDown() || detail.isShiftDown())) {
                        this.pridajKorytnacku(x, y);
                }
        }
}

Monitoring korytnačiek (2 body)

Biológovia z ÚBEV UPJŠ sa rozhodli, že budú skúmať správanie sa korytnačiek Trachemys coding scripta (korytnačky z JPAZu). Tieto korytnačky sú lenivé a tak takmer celý svoj život prežijú na jednom mieste. Biológovia na korytnačky chcú umiestniť monitorovacie zariadenie s rádiovým transcieverom. Anténa monitorovacieho systému je umiestnená na mieste so súradnicami [x, y] (na budove UPJŠ). Aký musí byť minimálny vysielací rozsah zakúpených transcieverov, aby bolo možné získavať údaje zo všetkých korytnačiek?

Do triedy KorytnaciSvet pridajte metódu minimalnyDosah, ktorá pre zadané umiestnenie antény na súradniciach [x, y] vráti minimálny vysielací rozsah transceiverov zaručujúci, že každá signál z každej korytnačky dosiahne anténu. Môžete predpokladať, že v ploche je aspoň jedna korytnačka.

public double minimalnyDosah(double x, double y);

Bombastické korytnačky (2 body)

Keďže korytnačky v JPAZe sú nezničiteľné, ministerstvo obrany za rozhodlo využiť korytnačky v kresliacej ploche na testovanie účinkov explózií. Do kresliacej plochy umiestnili nálož so zadanou silou (parameter sila) na pozíciu [x, y]. Pri explózii nálože vznikne tlaková vlna, ktorá odhodí korytnačky v smere od miesta explózie. Ak uvážime zjednodušený fyzikálny model, korytnačka vzdialená d od miesta explózie so silou S je odhodená na vzdialenosť S2/d4. Budeme predpokladať, že žiadna korytnačka sa nenachádza v mieste explózie. Do triedy KorytnaciSvet pridajte metódu explozia, ktorá odsimuluje účinky explózie nálože so zadanou silou a umiestnenej na zadanej pozícii. T.j. všetky korytnačky v ploche sa presunú (bez kreslenia trajektórie pohybu) na miesto, kam ich odhodí tlaková vlna, a budú nasmerované v smere od miesta explózie. Metóda vráti najväčšiu vzdialenosť, na akú bola odhodená nejaká z korytnačiek v ploche.

public double explozia(double x, double y, double sila)

Prestrelka (5 bodov)

A je to tu. Zločin zavítal aj do korytnačieho sveta. Máme tu prvú prestrelku. Vo svete korytnačiek však aj prestrelky majú svoje pravidlá:

  • ako prvá začína strieľať zvolená korytnačka (určená indexom - indexy korytnačiek rastú od 0 v poradí pridania korytnačiek do korytnačieho sveta),
  • strieľajúca korytnačka strieľa vždy na najbližšiu doposiaľ nezasiahnutú korytnačku (výstrel znázorňujeme tak, že strieľajúca korytnačka sa natočím smerom k cieľu a dráha strely je vyznačená čiarou od strelca k cieľu),
  • každá korytnačka strieľa na cieľ ihneď po svojom zasiahnutí.

Do triedy KorytnaciSvet pridajte metódu prestrelka, ktorá zadanou farbou znázorní strely vypálené pri prestrelke, ktorú začne korytnačka s indexom určeným parametrom metódy.

public void prestrelka(int idxPrvehoStrelca, Color farbaStriel);

Rada: Na uloženie toho, ktorá korytnačka už bola zasiahnutá, môžete využiť lokálne referencované pole.