A5

import java.awt.event.MouseEvent;

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


public class GrafickyEditor extends WinPane {
        private Turtle kresliacePero;
        private boolean jeStlaceneLaveTlacidlo;

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

                jeStlaceneLaveTlacidlo = false;
        }

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

        @Override
        protected void onMouseMoved(int x, int y, MouseEvent detail) {
                if(detail.isAltDown()){
                        kresliacePero.setDirection(kresliacePero.directionTowards(x, y));
                        double vzdialenost = kresliacePero.distanceTo(x, y);
                        kresliacePero.step(vzdialenost);
                        kresliacePero.step(-vzdialenost);
                }
        }

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

                        kresliacePero.setPosition(x, y);
                }
        }

        @Override
        protected void onMouseDragged(int x, int y, MouseEvent detail) {
                if(jeStlaceneLaveTlacidlo){
                        kresliacePero.moveTo(x, y);
                }
        }

        @Override
        protected void onMouseReleased(int x, int y, MouseEvent detail) {
                if(detail.getButton() == MouseEvent.BUTTON1){
                        jeStlaceneLaveTlacidlo = false;
                }
        }
}
 
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]);

                        int xPozicia = (int) (Math.random() * this.getWidth());
                        int yPozicia = (int) (Math.random() * this.getHeight());

                        korytnacky[i].setPosition(xPozicia, yPozicia);
                }
        }

        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 void posunITu(int idx, double dlzka) {
                korytnacky[idx].step(dlzka);
        }

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

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

        public void krok() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int index = (i + 1) % korytnacky.length;
                        korytnacky[i].turnTowards(korytnacky[index].getPosition());
                        double vzdialenost = korytnacky[i].distanceTo(korytnacky[index]
                                        .getPosition());
                        korytnacky[i].step(vzdialenost / 10);
                }
        }

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

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

                for (int i = 0; i < korytnacky.length; i++) {
                        rozmiestnovac.step(polomer);
                        korytnacky[i].setPosition(rozmiestnovac.getPosition());
                        rozmiestnovac.step(-polomer);
                        rozmiestnovac.turn(360.0 / korytnacky.length);
                }

                this.remove(rozmiestnovac);
        }

        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.MAX_VALUE;

                for (int i = 0; i < korytnacky.length; i++) {
                        if (indexKorytnacky != i) {
                                polomer = Math.min(polomer, korytnacky[i]
                                                .distanceTo(korytnacky[indexKorytnacky].getPosition()));
                        }
                }

                korytnacky[indexKorytnacky].dot(polomer);
        }
}
import java.awt.Color;
import java.awt.event.MouseEvent;

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

public class Farma extends WinPane {

        /**
         * Instancna premenna refercujuca pole (polovy objekt) int-ov. I-ty prvok
         * pola uchovava informaciu o tom, kolko kvetin mame vysadenych v i-tom
         * zahone.
         */

        private int[] zahony;

        /**
         * Nakresli deliace hranice pre zahony
         *
         * @param pocetZahonov
         *            pocet zahonov, pre ktore kreslime hranicu
         */

        public void kresliZahony(int pocetZahonov) {
                // Korytnacka kreslic
                Turtle kreslic = new Turtle();
                this.add(kreslic);

                // Nakreslime vertikalne ciary
                int sirkaZahonu = this.getWidth() / pocetZahonov;
                for (int i = 0; i < pocetZahonov - 1; i++) {
                        kreslic.setPosition((i + 1) * sirkaZahonu, 0);
                        kreslic.moveTo((i + 1) * sirkaZahonu, this.getHeight());
                }

                // Kreslica odstranime z farmy (kresliacej plochy)
                this.remove(kreslic);
        }

        /**
         * Zasadi kvietok na zadane suradnice
         *
         * @param x
         *            x-ova suradnica pre sadeny kvietok
         * @param y
         *            y-ova suradnica pre sadeny kvietok
         */

        public void zasadKvietok(int x, int y) {
                // Kreslic ...
                Turtle kreslic = new Turtle();
                // Zmenime tvar korynacky podla obrazku v grafickom subore
                kreslic.setShape(new ImageTurtleShape("kvietok.png"));
                // Kreslica pridame do plochy a nechame ho otlacit svoj tvar do
                // kresliacej plochy
                this.add(kreslic);
                kreslic.setPosition(x, y);
                kreslic.stamp();
                // No a nakoniec kreslica odstranime z farmy
                this.remove(kreslic);

                // Vypocitame si sirku jedneho zahonu
                int sirkaZahonu = this.getWidth() / this.pocetZahonov();
                // Vypocitame si index zahonu, do ktoreho sme klikli
                int kliknutyZahon = x / sirkaZahonu;
                // V poli si poznacime, ze v danom zahone sme posadili novy kvietok
                this.zahony[kliknutyZahon]++;
        }

        /**
         * Vrati pocet zahonov
         */

        public int pocetZahonov() {
                return this.zahony.length;
        }

        /**
         * Vrati pocet kvietkov v zadanom zahone
         *
         * @param indexZahonu
         *            index zahonu na farme
         */

        public int vZahone(int indexZahonu) {
                return this.zahony[indexZahonu];
        }

        /**
         * Vrati pocet zahonov, kde je viac ako hranica kvetiniek
         */

        public int sViacAko(int hranica) {
                int pocitadlo = 0;

                // Prechadzame vsetky zahony
                for (int i = 0; i < this.zahony.length; i++) {
                        // Ak ma i-ty zahon viac ako hranica kvetiniek, tak zvysime
                        // pocitadlo o 1
                        if (this.zahony[i] > hranica) {
                                pocitadlo++;
                        }
                }

                return pocitadlo;
        }

        /**
         * Overime, ci v kazdom zahone je aspon jeden kvietok
         */

        public boolean vsadeNieco() {
                // Prechadzame vsetky zahony
                for (int i = 0; i < this.zahony.length; i++) {
                        // Ak v i-tom zahone niet kvetiniek, tak koncime s false
                        if (this.zahony[i] == 0) {
                                return false;
                        }
                }

                // Ak sme sa dostali sem, tak v kazdom zahone musel byt aspon jeden
                // kvietok
                return true;
        }

        /**
         * Vrati index zahonu, v ktorom je najvacsi pocet kvetiniek
         */

        public int najZahon() {
                // Index zahonu, ktory je kandidatom na najkvietkovanejsi zahon
                int najIndex = 0;
                // Prechadzame vsetky zahony
                for (int i = 1; i < this.zahony.length; i++) {
                        // Ak v i-tom zahone je viac kvetin, ako ma kandidat, tak mame
                        // lepsieho kandidata
                        if (this.zahony[i] > this.zahony[najIndex]) {
                                najIndex = i;
                        }
                }

                return najIndex;
        }

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

        /**
         * "Inicializacna metoda", ktora zabezpeci vykonanie prikazov hned po
         * vytvoreni objektu triedy Farma
         */

        public Farma() {
                // Zmenime rozmery kresliacej plochy
                this.resize(500, 300);
                // Nastavime farbu pozadia
                this.setBackgroundColor(new Color(255, 211, 155));
                // Vytvorime pole s poctom prvkom 7 (dokaze uchovat 7 int-ov).
                // Referenciu na vytvorene pole ulozime do instancnej premennej zahony
                this.zahony = new int[7];
                // Nechame nakreslit hranice zahonov podla velkosti pola
                this.kresliZahony(this.zahony.length);
        }

        public int pocetKvetin(int odZahonuIdx, int poZahonIdx) {
                int pocet = 0;

                for (int i = odZahonuIdx; i <= poZahonIdx; i++) {
                        pocet = this.zahony[i] + pocet;
                }

                return pocet;
        }
}
import sk.upjs.jpaz2.ObjectInspector;




public class Spustac {

        public static void main(String[] args) {
                //GrafickyEditor editor = new GrafickyEditor();
                //Korytnackovo korytnackovo = new Korytnackovo();
                //korytnackovo.nahodneFarby();
                //korytnackovo.krok();
                //korytnackovo.doKruhu(89);
                //korytnackovo.kroky(50);

                //System.out.println("Pocet korytnaciek v hornej polovici: " + korytnackovo.pocetTopKorytnaciek(korytnackovo.getHeight()/2));

                //korytnackovo.bezpecnyKruh(2);

                Farma farma = new Farma();
                ObjectInspector oi=new ObjectInspector();
                oi.inspect(farma);

        }

}
 

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

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 < 10; i++) {
                        Turtle k = new Turtle();
                        this.add(k);
                        k.setPosition(Math.random() * this.getWidth(),
                                        Math.random() * this.getHeight());

                        this.korytnacky[i] = k;
                }
        }

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

        @Override
        protected void onMouseClicked(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();
                }
        }

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

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

                this.remove(pomocnicka);
        }

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

                return vysledok;
        }
}