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.