B5

package sk.paz1a.practicals.task5;

import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.Turtle;
import sk.upjs.jpaz2.WinPane;

public class GrafickyEditor extends WinPane {

        private Turtle pero;
        private boolean laveJeZatlacene;

        public GrafickyEditor() {
                this.pero = new Turtle();
                this.add(pero);
        }

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                this.pero.setPosition(x, y);
        }

        @Override
        protected void onMouseMoved(int x, int y, MouseEvent detail) {
                if (detail.isAltDown()) {
                        this.pero.setDirectionTowards(x, y);
                        double startX = this.pero.getX();
                        double startY = this.pero.getY();
                        this.pero.moveTo(x, y);
                        this.pero.setPosition(startX, startY);
                }
        }

        @Override
        protected void onMousePressed(int x, int y, MouseEvent detail) {
                if (detail.getButton() == MouseEvent.BUTTON1) {
                        this.laveJeZatlacene = true;
                }
        }

        @Override
        protected void onMouseReleased(int x, int y, MouseEvent detail) {
                if (detail.getButton() == MouseEvent.BUTTON1) {
                        this.laveJeZatlacene = false;
                }
        }

        @Override
        protected void onMouseDragged(int x, int y, MouseEvent detail) {
                if (this.laveJeZatlacene) {
                        this.pero.moveTo(x, y);
                }
        }

}
 
package sk.paz1a.practicals.task5;

import java.awt.Color;
import java.awt.geom.Point2D;

import sk.upjs.jpaz2.JPAZUtilities;
import sk.upjs.jpaz2.Turtle;
import sk.upjs.jpaz2.WinPane;

public class Korytnackovo extends WinPane {

        private Turtle[] turtles;

        public Korytnackovo() {
                this.turtles = new Turtle[10];
                for (int i = 0; i < this.turtles.length; i++) {
                        this.turtles[i] = new Turtle();
                        this.add(this.turtles[i]);
                        this.turtles[i].setPosition(Math.random() * this.getWidth(), Math.random() * this.getHeight());
                }
        }

        public void posunITu(int idx, double dlzka) {
                this.turtles[idx].step(dlzka);
        }

        public void nahodneFarby() {
                for (int i = 0; i < this.turtles.length; i++) {
                        int rZlozka = (int) (Math.random() * 256);
                        int gZlozka = (int) (Math.random() * 256);
                        int bZlozka = (int) (Math.random() * 256);
                        this.turtles[i].setPenColor(new Color(rZlozka, gZlozka, bZlozka));
                }
        }

        public Color sFarbouVon(int index) {
                return this.turtles[index].getPenColor();
        }

        public void krok() {
                for (int i = 0; i < turtles.length - 1; i++) {
                        double xDalsej = this.turtles[i + 1].getX();
                        double yDalsej = this.turtles[i + 1].getY();
                        this.turtles[i].setDirectionTowards(xDalsej, yDalsej);
                        this.turtles[i].step(this.turtles[i].distanceTo(xDalsej, yDalsej) / 10);
                }
                Point2D poz0 = this.turtles[0].getPosition();
                this.turtles[this.turtles.length - 1].setDirectionTowards(poz0);
                double dlzkaKrokuPoslednejKorytnacky = this.turtles[this.turtles.length - 1].distanceTo(poz0) / 10;
                this.turtles[this.turtles.length - 1].step(dlzkaKrokuPoslednejKorytnacky);
        }

        public void kroky(int pocetKrokov) {
                for (int i = 0; i < pocetKrokov; i++) {
                        this.krok();
                        JPAZUtilities.delay(250);
                }
        }

        public void doKruhu(double polomer) {
                Turtle pomocnaKorytnacka = new Turtle();
                this.add(pomocnaKorytnacka);
                pomocnaKorytnacka.penUp();
                pomocnaKorytnacka.center();
                for (int i = 0; i < this.turtles.length; i++) {
                        pomocnaKorytnacka.step(polomer);
                        this.turtles[i].setPosition(pomocnaKorytnacka.getPosition());
                        pomocnaKorytnacka.step(-polomer);
                        pomocnaKorytnacka.turn(360.0 / this.turtles.length);
                }
                this.remove(pomocnaKorytnacka);
        }

        public int pocetTopKorytnaciek(double zhora) {
                int vysledok = 0;
                for (int i = 0; i < this.turtles.length; i++) {
                        if (this.turtles[i].getY() < zhora) {
                                vysledok++;
                        }
                }

                return vysledok;
        }

        public void bezpecnyKruh(int indexKorytnacky) {
                double minVzdialenost = Double.POSITIVE_INFINITY;
                for (int i = 0; i < this.turtles.length; i++) {
                        if (i != indexKorytnacky) {
                                double vzdialenost = this.turtles[indexKorytnacky].distanceTo(this.turtles[i].getPosition());
                                minVzdialenost = Math.min(minVzdialenost, vzdialenost);
                        }
                }

                this.turtles[indexKorytnacky].dot(minVzdialenost);
        }

}
 
package sk.paz1a.practicals.task5;

import sk.upjs.jpaz2.ObjectInspector;

public class Launcher {

        public static void main(String[] args) {
                GrafickyEditor ge = new GrafickyEditor();
                Korytnackovo ke = new Korytnackovo();
                ObjectInspector oi = new ObjectInspector();
                oi.inspect(ke);
                ke.nahodneFarby();

        }

}