C9

import java.awt.Color;
import sk.upjs.jpaz2.Pane;

public class Tvar {
        protected double x, y;
        protected Color farba;

        public Tvar(double x, double y, Color farba) {
                super();
                this.x = x;
                this.y = y;
                this.farba = farba;
        }

        public void posun(double dx, double dy){
                x += dx;
                y += dy;
        }

        public void vykresliSa(Pane plocha){
                System.err.println("Tato metoda ma byt vhodne prekyta!");
        }

        public boolean jeVnutornyBod(double x, double y){
                return false;
        }
}
import java.awt.Color;

import sk.upjs.jpaz2.Pane;
import sk.upjs.jpaz2.Turtle;

public class Kruh extends Tvar {

        private double polomer;

        public Kruh(double x, double y, double polomer, Color farba) {
                super(x, y, farba);
                this.polomer = polomer;
        }

        @Override
        public void vykresliSa(Pane plocha) {

                Turtle korytnacka = new Turtle();
                plocha.add(korytnacka);
                korytnacka.setFillColor(farba);
                korytnacka.setPosition(x, y);
                korytnacka.dot(polomer);
                plocha.remove(korytnacka);
        }

        @Override
        public boolean jeVnutornyBod(double x, double y) {
                double dx = this.x - x;
                double dy = this.y - y;
                double vzdialenost = Math.sqrt(dx * dx + dy * dy);
                return (vzdialenost < polomer);
        }

}
import java.awt.Color;

import sk.upjs.jpaz2.Pane;
import sk.upjs.jpaz2.Turtle;

public class Obdlznik extends Tvar {
        private double sirka, vyska;

        public Obdlznik(double x, double y, double sirka, double vyska, Color farba) {
                super(x, y, farba);
                this.sirka = sirka;
                this.vyska = vyska;
        }

        @Override
        public void vykresliSa(Pane plocha) {
                Turtle korytnacka = new Turtle();
                plocha.add(korytnacka);
                korytnacka.penUp();
                korytnacka.setPosition(x - sirka / 2, y - vyska / 2);
                korytnacka.turn(90);
                korytnacka.setFillColor(farba);
                korytnacka.openPolygon();
                for (int i = 0; i < 2; i++) {
                        korytnacka.step(sirka);
                        korytnacka.turn(90);
                        korytnacka.step(vyska);
                        korytnacka.turn(90);                   
                }
                korytnacka.closePolygon();
                plocha.remove(korytnacka);
        }

        @Override
        public boolean jeVnutornyBod(double x, double y) {
                return (x > this.x-sirka/2) && (x < this.x+sirka/2) &&
                                (y > this.y-vyska/2) && (y < this.y+vyska/2);
        }
}
import sk.upjs.jpaz2.Pane;

public class ZoznamTvarov {
        private Tvar[] zoznam;

        public ZoznamTvarov() {
                zoznam = new Tvar[0];
        }

        public void pridajTvar(Tvar t) {
                Tvar[] novyZoznam = new Tvar[zoznam.length + 1];
                for (int i = 0; i < zoznam.length; i++) {
                        novyZoznam[i] = zoznam[i];
                }
                novyZoznam[zoznam.length] = t;
                zoznam = novyZoznam;
        }

        public void nakresliVsetky(Pane plocha) {
                for (int i = 0; i < zoznam.length; i++) {
                        zoznam[i].vykresliSa(plocha);
                }
        }

        public void posun(double dx, double dy) {
                for (int i = 0; i < zoznam.length; i++) {
                        zoznam[i].posun(dx, dy);
                }
        }

        public Tvar bodTvaru(double x, double y) {
                Tvar t = null;
                for (int i = 0; i < zoznam.length; i++) {
                        if(zoznam[i].jeVnutornyBod(x, y)){
                                t = zoznam[i];
                        }
                }
                return t;
        }

        public void odstranTvar(Tvar t) {
                int indexNajdeneho = -1;
                for (int i = 0; i < zoznam.length; i++) {
                        if(zoznam[i].equals(t)){
                                indexNajdeneho = i;
                        }
                }

                if(indexNajdeneho == -1){
                        return;
                }

                Tvar[] novyZoznam = new Tvar[zoznam.length - 1];
                for (int i = 0; i < indexNajdeneho; i++) {
                        novyZoznam[i] = zoznam[i];
                }
                for (int i = indexNajdeneho + 1; i < zoznam.length; i++) {
                        novyZoznam[i - 1] = zoznam[i];
                }
                zoznam = novyZoznam;
        }
}
import java.awt.Color;
import sk.upjs.jpaz2.WinPane;


public class Spustac {

        public static void main(String[] args) {
                WinPane plocha = new WinPane();
                ZoznamTvarov zt = new ZoznamTvarov();
                Kruh kruh = new Kruh(150, 150, 50, Color.blue);        
                Obdlznik ramcek = new Obdlznik(200, 200, 100, 50, Color.red);
                zt.pridajTvar(kruh);
                zt.pridajTvar(ramcek);

                zt.nakresliVsetky(plocha);
                //zt.posun(50, 0);
                //zt.odstranTvar(ramcek);
                //zt.nakresliVsetky(plocha);

                System.out.println(zt.bodTvaru(200, 200));
        }

}