E2

import sk.upjs.jpaz2.ObjectInspector;
import sk.upjs.jpaz2.WinPane;

public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                WinPane plocha = new WinPane();
                ObjectInspector oi = new ObjectInspector();
                oi.inspect(plocha);
                ChytraKorytnacka majka = new ChytraKorytnacka();
                plocha.add(majka);
                oi.inspect(majka);
                majka.center();
                // majka.retiazka(5, 5.6);
                // majka.nUholnik(97, 2);
                //majka.prerusovana(7, 20);
                //majka.mlyn(10, 50);
                //majka.retiazkaRGB(10, 3);
                //majka.nahodnaPochodzkaKruh(1000);
                //majka.pochodzkaKruh(10000, 30);
                majka.pochodzkaTrojkruh(10000, 60);
//              majka.pochodzkaStvorec(100000, 50);

//              double realne = 3.14;
//              System.out.println(realne);
//              int cele = (int)realne;
//              System.out.println(cele);
//              int cele2 = (int)(realne * 8.3);
//              System.out.println(cele2);
//              int cele3 = 3 + (int)(realne / 8.3);
//              System.out.println(cele3);
//              System.out.println(Math.random());

        }

}
 

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);
                        }
                }

        }
}