Ibe5

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() {
                this.korytnacky = new Turtle[10];

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

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

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

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

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

        public void krok() {
                for (int i = 0; i < this.korytnacky.length; i++) {
                        int dalsia = (i + 1) % this.korytnacky.length;
                        this.korytnacky[i].turnTowards(this.korytnacky[dalsia].getX(),
                                        this.korytnacky[dalsia].getY());

                        double vzd = this.korytnacky[i].distanceTo(
                                        this.korytnacky[dalsia].getX(),
                                        this.korytnacky[dalsia].getY());
                        this.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 < this.korytnacky.length; i++) {
                        this.korytnacky[i].center();
                        this.korytnacky[i].setDirection(i * 360.0 / this.korytnacky.length);
                        this.korytnacky[i].penUp();
                        this.korytnacky[i].step(polomer);
                        this.korytnacky[i].penDown();
                }
        }

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

                return pocet;
        }

        public void bezpecnyKruh(int idx) {
                double najVzd = Double.POSITIVE_INFINITY;
                for (int i = 0; i < this.korytnacky.length; i++) {
                        double aktualnaVzd = this.korytnacky[idx]
                                        .distanceTo(this.korytnacky[i].getPosition());

                        if ((i != idx) && (aktualnaVzd < najVzd)) {
                                najVzd = aktualnaVzd;
                        }
                }

                this.korytnacky[idx].dot(najVzd);
        }
}