A5

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 zatlaceneLave;

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

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

                if (detail.getButton() == MouseEvent.BUTTON1) {
                        this.zatlaceneLave = true;
                }
        }

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


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

        @Override
        protected void onMouseDragged(int x, int y, MouseEvent detail) {
                if (this.zatlaceneLave) {
                        this.pero.moveTo(x, y);
                }
        }
}
import java.awt.Color;
import java.awt.event.MouseEvent;

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

public class Korytnackovo extends WinPane {

        private Turtle[] korytnacky;

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

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

        public void nahodneFarby() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int r = (int) (Math.random() * 256);
                        int g = (int) (Math.random() * 256);
                        int b = (int) (Math.random() * 256);
                        korytnacky[i].setPenColor(new Color(r, g, b));
                }
        }

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

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                int nahodnyIdx = (int) (Math.random() * korytnacky.length);
                korytnacky[nahodnyIdx].setPosition(x, y);
        }

        public void krok() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int dalsia = (i + 1) % korytnacky.length;

                        /*
                         * if (dalsia == korytnacky.length) { dalsia = 0; }
                         */


                        korytnacky[i].turnTowards(korytnacky[dalsia].getX(),
                                        korytnacky[dalsia].getY());

                        double vzd = korytnacky[i].distanceTo(korytnacky[dalsia].getX(),
                                        korytnacky[dalsia].getY());

                        korytnacky[i].step(vzd / 10);
                }
        }

        public void kroky(int pocetKrokov) {
                for (int i = 0; i < pocetKrokov; i++) {
                        this.krok();
                        JPAZUtilities.delay(50);
                }
        }
}
import sk.upjs.jpaz2.ObjectInspector;


public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                //GrafickyEditor malovanie = new GrafickyEditor();
                Korytnackovo upjs = new Korytnackovo();

                ObjectInspector oi = new ObjectInspector();
                oi.inspect(upjs);
        }

}
import java.awt.Color;
import java.awt.event.MouseEvent;

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

public class Korytnackovo extends WinPane {

        private Turtle[] korytnacky;

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

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

        public void nahodneFarby() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int r = (int) (Math.random() * 256);
                        int g = (int) (Math.random() * 256);
                        int b = (int) (Math.random() * 256);
                        korytnacky[i].setPenColor(new Color(r, g, b));
                }
        }

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

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                int nahodnyIdx = (int) (Math.random() * korytnacky.length);
                korytnacky[nahodnyIdx].setPosition(x, y);
        }

        public void krok() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int dalsia = (i + 1) % korytnacky.length;

                        /*
                         * if (dalsia == korytnacky.length) { dalsia = 0; }
                         */


                        korytnacky[i].turnTowards(korytnacky[dalsia].getX(),
                                        korytnacky[dalsia].getY());

                        double vzd = korytnacky[i].distanceTo(korytnacky[dalsia].getX(),
                                        korytnacky[dalsia].getY());

                        korytnacky[i].step(vzd / 10);
                }
        }

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

        public void doKruhu(double polomer) {
                for (int i = 0; i < korytnacky.length; i++) {
                        double smer = this.korytnacky[i].getDirection();
                        this.korytnacky[i].penUp();
                        this.korytnacky[i].center();
                        this.korytnacky[i].setDirection(360.0 / korytnacky.length * i);
                        this.korytnacky[i].step(polomer);
                        this.korytnacky[i].setDirection(smer);
                        this.korytnacky[i].penDown();
                }
        }

        public void doKruhu2(double polomer) {
                Turtle pomocnik = new Turtle();
                this.add(pomocnik);
                pomocnik.penUp();
                pomocnik.center();

                for (int i = 0; i < this.korytnacky.length; i++) {
                        pomocnik.step(polomer);
                        this.korytnacky[i].setPosition(pomocnik.getX(), pomocnik.getY());
                        pomocnik.step(-polomer);
                        pomocnik.turn(360.0 / this.korytnacky.length);
                }

                this.remove(pomocnik);
        }

        public int pocetTopKorytnaciek(double zhora) {
                int pocet = 0;
                for (int i = 0; i < korytnacky.length; i++) {
                        if (korytnacky[i].getY() < zhora) {
                                pocet++;
                        }
                }
                return pocet;
        }

        public void bezpecnyKruh(int indexKorytnacky) {
                double polomer = Double.POSITIVE_INFINITY;
                double xCenter = this.korytnacky[indexKorytnacky].getX();
                double yCenter = this.korytnacky[indexKorytnacky].getY();
                for (int i = 0; i < this.korytnacky.length; i++) {
                        if ((i != indexKorytnacky)
                                        && (this.korytnacky[i].distanceTo(xCenter, yCenter) < polomer)) {
                                polomer = this.korytnacky[i].distanceTo(xCenter, yCenter);
                        }
                }

                this.korytnacky[indexKorytnacky].dot(polomer);
        }

        public double najblizsie() {
                double vysledok = Double.POSITIVE_INFINITY;
                for (int i = 0; i < this.korytnacky.length - 1; i++) {
                        for (int j = i + 1; j < this.korytnacky.length; j++) {
                                double aktVzd = this.korytnacky[i]
                                                .distanceTo(this.korytnacky[j].getPosition());

                                if (aktVzd < vysledok) {
                                        vysledok = aktVzd;
                                }
                        }
                }

                return vysledok;
        }
}