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