Cvičenia: 2. týždeň - riešenia úloh

import java.awt.Color;
import sk.upjs.jpaz2.*;

public class MojaKorytnacka extends Turtle {

        public void pochodzkaKruh(int pocetKrokov, double polomer) {
                double sx = getX(), sy = getY();

                int pocitadlo = 0;
                for (int i = 0; i < pocetKrokov; i++) {
                        // podmienky na zmenu farby pera
                        if (pocitadlo == 100) {
                                setPenColor(Color.red);
                        } else if (pocitadlo == 182) {
                                setPenColor(Color.green);
                        } else if (pocitadlo == 304) {
                                setPenColor(Color.blue);
                                pocitadlo = 0;
                        }

                        this.turn(Math.random() * 360);
                        this.step(5);

                        if (distanceTo(sx, sy) > polomer) {
                                this.step(-5);
                        }

                        pocitadlo++;
                }
        }

        public void pochodzkaTrojkruh(int pocetKrokov, double polomer) {
                double sx = getX(), sy = getY();
                double polomer1 = polomer / 3;
                double polomer2 = 2 * polomer / 3;

                for (int i = 0; i < pocetKrokov; i++) {
                        double vzdialenostOdStredu = distanceTo(sx, sy);

                        if (vzdialenostOdStredu <= polomer1) {
                                penUp();
                        } else if (vzdialenostOdStredu <= polomer2) {
                                setPenColor(Color.blue);
                        } else {
                                setPenColor(Color.red);
                        }

                        this.turn(Math.random() * 360);
                        this.step(5);

                        if (distanceTo(sx, sy) > polomer) {
                                this.step(-5);
                        }

                        penDown();
                }
        }

        public void pochodzkaStvorec(int pocetKrokov, double strana) {
                double lavyX = getX() - strana / 2;
                double lavyY = getY() - strana / 2;

                for (int i = 0; i < pocetKrokov; i++) {

                        this.turn(Math.random() * 360);
                        this.step(5);

                        double x = getX(), y = getY();
                        boolean vyhovujeX = x >= lavyX && x <= lavyX + strana;
                        boolean vyhovujeY = y >= lavyY && y <= lavyY + strana;

                        if (!(vyhovujeX && vyhovujeY)) {
                                this.step(-5);
                        }
                }
        }

        public void pochodzkaObdlznik(int pocetKrokov, double vyska, double sirka) {
                double lavyX = getX() - sirka / 2;
                double lavyY = getY() - vyska / 2;

                for (int i = 0; i < pocetKrokov; i++) {

                        this.turn(Math.random() * 360);
                        this.step(5);

                        double x = getX(), y = getY();
                        boolean vyhovujeX = x >= lavyX && x <= lavyX + sirka;
                        boolean vyhovujeY = y >= lavyY && y <= lavyY + vyska;

                        if (!(vyhovujeX && vyhovujeY)) {
                                this.step(-5);
                        }
                }
        }

        public void moderneUmenie(int pocetBodiek, double sirka, double vyska) {
                double lavyX = getX(), lavyY = getY();
                double natocenie = getDirection();

                // kreslime obdlznik - ram
                setDirection(90);
                obdlznik(sirka, vyska);

                // kreslime bodky
                for (int i = 0; i < pocetBodiek; i++) {
                        // generujem nahodny polomer od 2 po 7 (otvoreny)
                        double polomer = 2 + Math.random() * 5;
                        // generujem nahodne suradnice stredu bodky tak, aby cela
                        // ostala v rame
                        double x = lavyX + polomer + Math.random() * (sirka - 2 * polomer);
                        double y = lavyY + polomer + Math.random() * (vyska - 2 * polomer);
                        // generujem nahodnu farbu pera (bud modra alebo cervena)
                        if (Math.random() < 0.5) {
                                setFillColor(Color.red);
                        } else {
                                setFillColor(Color.blue);
                        }

                        setPosition(x, y);
                        dot(polomer);
                }

                setPosition(lavyX, lavyY);
                setDirection(natocenie);
        }

        public void obdlznik(double sirka, double vyska) {
                for (int i = 0; i < 4; i++) {
                        if (i % 2 == 0)
                                step(sirka);
                        else
                                step(vyska);
                        turn(90);
                }
        }

        public void nahodnaFarbaPera() {
                int r = (int) (Math.random() * 256);
                int g = (int) (Math.random() * 256);
                int b = (int) (Math.random() * 256);
                // int rgb = (int)(Math.random() * 256*256*256);

                Color farba = new Color(r, g, b);
                // Color farba = new Color(rgb);
                setPenColor(farba);
        }
}