Riešenia (skupina D, 5. týždeň)

Praktické cvičenie

import java.awt.event.MouseEvent;

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

public class GrafickyEditor extends WinPane {

        Turtle pero;

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

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

        @Override
        protected void onMouseMoved(int x, int y, MouseEvent detail) {
                double xSur = pero.getX();
                double ySur = pero.getY();
                if (detail.isAltDown()) {
                        pero.setDirection(pero.getDirectionTowards(x, y));
                        pero.moveTo(x, y);
                        pero.moveTo(xSur, ySur);
                }

        }

        @Override
        protected void onMouseDragged(int x, int y, MouseEvent detail) {
                pero.setDirection(pero.getDirectionTowards(x, y));
                pero.moveTo(x, y);
        }

}
import java.awt.Color;

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

public class Korytnackovo extends WinPane {
        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());

                }
        }

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

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

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

Teoretické cvičenie

Korytnackovo.java


import java.awt.Color;
import java.awt.event.MouseEvent;
import java.util.concurrent.Delayed;

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

public class Korytnackovo extends WinPane {
        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());

                }
        }

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

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

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

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                int kor = (int) (Math.random() * 10);
                korytnacky[kor].setPosition(x, y);
        }
        public void krok(){
                for (int i=0;i<korytnacky.length-1;i++){
                        korytnacky[i].setDirection(korytnacky[i].directionTowards(korytnacky[i+1].getX(), korytnacky[i+1].getY()));
                        korytnacky[i].step(korytnacky[i].distanceTo(korytnacky[i+1].getX(), korytnacky[i+1].getY())/10);


                        }
                korytnacky[korytnacky.length-1].setDirection(korytnacky[korytnacky.length-1].directionTowards(korytnacky[0].getX(), korytnacky[0].getY()));
                korytnacky[korytnacky.length-1].step(korytnacky[korytnacky.length-1].distanceTo(korytnacky[0].getX(), korytnacky[0].getY())/10);


        }
        public void kroky(int pocetKrokov) {
                for(int i=0; i<pocetKrokov; i++) {

                        this.krok();
                        JPAZUtilities.delay(100);
                }
        }

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

                for (int i = 0; i < korytnacky.length; i++){
                        pomocnik.penUp();
                        pomocnik.step(polomer);
                        korytnacky[i].setPosition(pomocnik.getX(), pomocnik.getY());
                        pomocnik.step(-polomer);
                        pomocnik.turn(360.0/korytnacky.length);
                }
                this.remove(pomocnik);
        }
        public int pocetTopKorytnaciek(double zhora){
                int pocitadlo=0;
                for (int i = 0; i < korytnacky.length; i++) {
                if(korytnacky[i].getY()<zhora)
                        pocitadlo= pocitadlo +1;

                }
                return pocitadlo;
        }

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

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


        }
}

Farma.java


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 pocitadlo = 0;
                        for (int i = odZahonuIdx; i < poZahonIdx+1; i++) {
                                                pocitadlo = pocitadlo +  this.vZahone(i);

                                        }

                        return pocitadlo;
                }

}