import java.awt.Color;
import sk.upjs.jpaz2.JPAZUtilities;
import sk.upjs.jpaz2.*;
public class ChytraKorytnacka extends Turtle {
public void retiazka(int pocetKoralov, double polomerKoralu) {
this.penUp();
this.setFillColor(Color.BLUE);
for (int i = 0; i < pocetKoralov; i++) {
this.dot(polomerKoralu);
this.step(2 * polomerKoralu);
}
}
public void nUholnik(int n, double dlzkaStrany) {
for (int i = 0; i < n; i++) {
this.turn(360.0 / n);
this.step(dlzkaStrany);
}
}
public void prerusovana(int n, double dlzkaUseku) {
for (int i = 0; i < n; i++) {
this.step(dlzkaUseku / 4);
this.penUp();
this.step(dlzkaUseku / 2);
this.penDown();
this.step(dlzkaUseku / 4);
}
}
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);
}
public void mlyn(int pocetLopatiek, double dlzkaRamena) {
for (int i = 0; i < pocetLopatiek; i++) {
this.rovnoramenny(dlzkaRamena, 360.0 / pocetLopatiek / 2);
this.turn(360 / pocetLopatiek);
}
}
public void retiazkaRGB(int pocetKoralov, double polomerKoralu) {
this.penUp();
this.setFillColor(Color.BLUE);
for (int i = 0; i < pocetKoralov; i++) {
if (i % 3 == 0) {
this.setFillColor(Color.RED);
}
if (i % 3 == 1) {
this.setFillColor(Color.GREEN);
}
if (i % 3 == 2) {
this.setFillColor(Color.BLUE);
}
this.dot(polomerKoralu);
this.step(2 * polomerKoralu);
}
}
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);
}
public void pochodzkaKruh(int pocetKrokov, double polomer) {
double startX = this.getX();
double startY = this.getY();
for (int i = 0; i < pocetKrokov; i++) {
this.turn(Math.random() * 360);
this.step(5);
if (this.distanceTo(startX, startY) > polomer)
this.step(-5);
}
}
public void pochodzkaTrojkruh(int pocetKrokov, double polomer) {
double startX = this.getX();
double startY = this.getY();
for (int i = 0; i < pocetKrokov; i++) {
this.turn(Math.random() * 360);
if (this.distanceTo(startX, startY) < polomer / 3) {
this.penUp();
} else {
this.penDown();
}
if (this.distanceTo(startX, startY) < polomer / 3 * 2)
this.setPenColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)));
else
this.setPenColor(Color.RED);
this.step(5);
if (this.distanceTo(startX, startY) > polomer)
this.step(-5);
}
this.setPosition(startX, startY);
}
public void pochodzkaStvorec(int pocetKrokov, double strana) {
double startX = this.getX();
double startY = this.getY();
for (int i = 0; i < pocetKrokov; i++) {
this.turn(Math.random() * 360);
this.step(5);
if ((Math.abs(this.getX() - startX) > strana / 2)
| (Math.abs(this.getY() - startY) > strana / 2)) {
this.step(-5);
}
}
}
}