Zdrojový kód z 2. prednášky

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