5. sada domácich zadaní

Najneskorší termín odovzdania: 27.10.2013 (nedeľa) 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);
                }
        }
}

Výstrel na ťažisko (2 body)

Do triedy KorytnaciSvet pridajte metódu vystrelNaTazisko, ktorej výsledkom bude to, že každá korytnačka nakreslí čiaru zo svojej pozície do ťažiska všetkých korytnačiek. Súradnice ťažiska korytnačiek možno vypočítať ako priemer pozícii jednotlivých korytnačiek (napr. x-ová súradnica ťažiska je priemerom x-ových súradníc korytnačiek): http://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points

public void vystrelNaTazisko();

Plot (2 body)

V korytnačom svete sa rozhodli vybudovať segregačný plot, ktorý je rovnobežný s y-ovou osou a jeho x-ová súradnica je určená parametrom metódy.

Do triedy KorytnaciSvet pridajte metódu plot, ktorá vráti, ako je vzdialená najbližšia korytnačka od plota.

public double plot(double xSuradnicaPlota);

Do štvorca (4 body)

Do triedy KorytnaciSvet pridajte metódu doStvorca, ktorá pravidelne umiestni korytnačky v kresliacej ploche na strany štvorca so stredom v strede kresliacej plochy a so zadanou dĺžkou strany. Môžete predpokladať, že počet korytnačiek v ploche je deliteľný číslom 4. Do rohov štvorca korytnačky neumiestňujeme.

public void doStvorca(double dlzkaStrany)

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.