import java.awt.Color;
import sk.upjs.jpaz2.JPAZUtilities;
import sk.upjs.jpaz2.Turtle;
public class MojaTurtle extends Turtle {
/**
* Metoda na nakreslenie n-cipej hviezdy
*
* @param n
* pocet cipov hviezdy
* @param dlzkaLuca
* dlzka luca hviezdy
*/
public void nHviezda(int n, double dlzkaLuca) {
for (int i = 0; i < n; i++) {
this.step(dlzkaLuca);
this.step(-dlzkaLuca);
// Pozor, nie 360/n. Vtedy je totiz hodnota 360 typu int,
// n je int a preto vysledkom int/int operacie je int,
// t.j. cele cislo a realizuje sa celociselne delenie.
this.turn(360.0 / n);
}
}
/**
* Nakresli rovnoramenny trojuholnik
*
* @param rameno
* dlzka ramena
* @param uhol
* uhol, ktory zvieraju ramena
*/
public void rovnoramenny(double rameno, double uhol) {
// Do premennych startX a startY si ulozime
// poziciu korytnacky pri zavolani tejto metody
double startX = this.getX();
double startY = this.getY();
// Do premennej natocenie si ulozime natocenie (smer)
// korytnacky pri zavolani tejto metody
double natocenie = this.getDirection();
// Kreslenie
this.turn(-uhol / 2);
this.step(rameno);
// Sme v bode A, ulozime si teda x-ovu a y-ovu suradnicu
// tohto bodu (pouzijeme ich neskor)
// Vytvorime premennu xPoziciaA na hodnoty typu double
double xPoziciaA;
// Do premennej xPoziciaA ulozime aktualnu x-ovu suradnicu
// pozicie korytnacky - ziskame ju tak, ze sa "sami seba" spytame
// na x-ovu suradnicu
xPoziciaA = this.getX();
// Ako predosle, ale s y-ovou suradnicou. Kombinujeme vytvorenie
// premennej aj inicializaciu hodnoty do jedneho prikazu
double yPoziciaA = this.getY();
// Dalsie kreslenie
this.step(-rameno);
this.turn(uhol);
this.step(rameno);
// Na zaver sa presunieme na ulozenu poziciu bodu A
this.moveTo(xPoziciaA, yPoziciaA);
// Korytnacku presunieme tam, kde bola na zaciatku, a natocime smerom,
// akym bola natocena na zaciatku (pri volani tejto metody)
this.setPosition(startX, startY);
this.setDirection(natocenie);
}
/**
* Nakresli usecku spajajucu body [x1, y1] a [x2, y2]
*/
public void ciara(double x1, double y1, double x2, double y2) {
double startX = this.getX();
double startY = this.getY();
this.setPosition(x1, y1);
this.moveTo(x2, y2);
this.setPosition(startX, startY);
}
/**
* Nakresli stvorcovu spiralu so zadanym poctom stran
*
* @param pocetStran
* pocet stran stvorcovej spiraly
*/
public void stvorcovaSpirala(int pocetStran) {
// V premennej krok si budeme pamatat, akej dlzky ma byt krok,
// ktory sa chystame najblizsie vykonat. Na zaciatku je to 150
double krok = 150;
// Realizujeme pozadovany pocet krokov
for (int i = 0; i < pocetStran; i++) {
this.step(krok);
JPAZUtilities.delay(50);
this.turn(90);
// Po kazdom kroku znizime hodnotu ulozenu v premennej krok o 2
krok = krok - 2;
}
}
/**
* Realizuje nahodnu pochodzku s kruhovym ohranicenim
*
* @param pocetKrokov
* pocet krokov nahodnej pochodzky
*/
public void nahodnaPochodzkaKruh(int pocetKrokov) {
// Ulozime si pociatocnu poziciu korytnacky
double startX = this.getX();
double startY = this.getY();
// Realizujeme potrebny pocet krokov
for (int i = 0; i < pocetKrokov; i++) {
// Nahodne sa natocime
this.setDirection(Math.random() * 360);
// Na zaklade x-ovej pozicie nastavime vhodnu farbu
if (this.getX() < 150) {
this.setPenColor(Color.green);
} else {
this.setPenColor(Color.red);
}
// Spravime krok
this.step(10);
// Ak je korytnacka viac ako 100 od miesta, kde zacala,
// spravime krok spat
if (this.distanceTo(startX, startY) > 100) {
this.step(-10);
}
JPAZUtilities.delay(30);
}
// Vratime korytnacku tam, kde zacala
this.setPosition(startX, startY);
}
/**
* Realizuje nahodnu pochodzku so stvorcovym oznacenim
*
* @param pocetKrokov
* pocet krokov nahodnej pochodzky
*/
public void nahodnaPochodzkaStvorec(int pocetKrokov) {
double startX = this.getX();
double startY = this.getY();
for (int i = 0; i < pocetKrokov; i++) {
this.setDirection(Math.random() * 360);
if (this.getX() < 150) {
// Namiesame si nahodnu farbu pomocou RGB
int r = (int) (Math.random() * 256);
int g = (int) (Math.random() * 256);
int b = (int) (Math.random() * 256);
this.setPenColor(new Color(r, g, b));
} else {
this.setPenColor(Color.red);
}
this.step(10);
// Pomienka pre kruh
// boolean jeDaleko = this.distanceTo(startX, startY) > 100;
// jeDalekoX je splnena, ak je narusena podmienka
// startX - 50 <= this.getX() <= startX + 50
boolean jeDalekoX = (this.getX() > startX + 50)
|| (this.getX() < startX - 50);
// jeDalekoX je splnena, ak je narusena podmienka
// startY - 50 <= this.getY() <= startY + 50
boolean jeDalekoY = (this.getY() > startY + 50)
|| (this.getY() < startY - 50);
// Korytnacka ma spravit krok spat, ak narusi
// aspon jednu z vyssie uvedenych podmienok
if (jeDalekoX || jeDalekoY) {
this.step(-10);
}
JPAZUtilities.delay(30);
}
}
}