Stránka sa načítava, prosím čakajte…
© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 20. 4. 2024.
Dátum: 12. 9. 2018, pred niekoľkými rokmi, aktualizované: 20. 4. 2020, pred štyrmi rokmi
Tento projekt nadväzuje na dva staršie projekty: Hadík a Húsenica. (Rieši túto problematiku mierne odlišným spôsobom.)
|
~
import knižnica.Farba; import knižnica.GRobot; public class Jedlo extends GRobot { private double polomer1, polomer2, polomer3; public Jedlo(Farba farba) { this(farba, 10); } public Jedlo(Farba farba, double veľkosť) { farba(farba); náhodnáPoloha(); veľkosť(veľkosť); skry(); } @Override public void veľkosť(double nová) { super.veľkosť(nová); hrúbkaČiary(nová * 0.120); polomer1 = nová * 1.000; polomer2 = nová * 0.667; polomer3 = nová * 0.333; } @Override public void kresliTvar() { skoč(0.5, 0.5); kružnica(polomer1); kružnica(polomer2); kružnica(polomer3); } }
~
import knižnica.Farba; import knižnica.GRobot; public class ČlánokTela extends GRobot { private final static Farba farbaČlánku = tmavohnedá; private double pätina = 2.0; public ČlánokTela() { farba(farbaČlánku); hrúbkaČiary(pätina); } @Override public void kresliTvar() { kružnica(); odskoč(pätina); vpred(2 * pätina); } }
~
import knižnica.Farba; import knižnica.GRobot; public class Hlava extends GRobot { private final static Farba farbaHlavy = svetlohnedá; private double úsek1, úsek2, úsek3; private double dĺžka, polomer; public Hlava() { farba(farbaHlavy); zdvihniPero(); veľkosť(15); ohranič(); } @Override public void veľkosť(double nová) { super.veľkosť(nová); úsek1 = veľkosť() * 0.5; úsek2 = veľkosť() * 0.1; úsek3 = veľkosť() * 0.4; dĺžka = veľkosť() * 0.3; polomer = veľkosť() * 0.2; } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); vpravo(30); skoč(úsek1); vpred(úsek2); skoč(úsek3); vpred(dĺžka); kruh(polomer); domov(); vľavo(30); skoč(úsek1); vpred(úsek2); skoč(úsek3); vpred(dĺžka); kruh(polomer); } }
~
import knižnica.Farba; import knižnica.GRobot; import knižnica.Zoznam; import static knižnica.Kláves.*; import static knižnica.Svet.*; import static knižnica.ÚdajeUdalostí.kláves; public class Červík extends GRobot { private final static Farba farbaPozadia = svetláNebeská; private final static Farba farbaJedla = new Farba(68, 128, 122); private final static Farba farbaSpomaľovača = new Farba(8, 153, 34); private final static Farba farbaZrýchľovača = new Farba(245, 12, 24); private final static Farba farbaSkracovača = new Farba(24, 12, 245); private final static int SKÓRE_ZA_JEDLO = 5; private final static int SKÓRE_ZA_SPOMAĽOVAČ = -2; private final static int SKÓRE_ZA_ZRÝCHĽOVAČ = 10; private final static int SKÓRE_ZA_SKRACOVAČ = -1; private final Zoznam<GRobot> hadík = new Zoznam<>(); private final Hlava hlava; private final Jedlo jedlo; private final Jedlo spomaľovač; private final Jedlo zrýchľovač; private final Jedlo skracovač; private double intervalČasovača = 0.1; private int skóre = 0; private int počítadloObnovy = 0; private Červík() { farbaPozadia(farbaPozadia); zbaľ(); vystreď(); skry(); hlava = new Hlava(); hadík.pridaj(hlava); jedlo = new Jedlo(farbaJedla); jedlo.zobraz(); spomaľovač = new Jedlo(farbaSpomaľovača, 12); zrýchľovač = new Jedlo(farbaZrýchľovača, 8); skracovač = new Jedlo(farbaSkracovača, 15); for (int i = 0; i < 3; ++i) pridajČlánok(); spustiČasovač(intervalČasovača); } private void skráť() { if (hadík.veľkosť() > 13) { int skrátené = 0; for (int i = hadík.veľkosť() - 1; i > 3; --i) { GRobot r = hadík.daj(i); if (r.viditeľný()) { ++skrátené; r.skry(); if (skrátené >= 10) return; } } } } private void pridajČlánok() { if (hadík.prázdny()) return; int posledný = hadík.veľkosť() - 1; for (int i = 0; i <= posledný; ++i) { GRobot r = hadík.daj(i); if (!r.viditeľný()) { r.zobraz(); return; } } hadík.pridaj(new ČlánokTela()); if (++posledný > 1) { hadík.daj(posledný).skočNa(hadík.daj(posledný - 1)); hadík.daj(posledný).otoč(hadík.daj(posledný - 1)); } } @Override public void tik() { vymažGrafiku(); skočNa(pravýOkraj() - 80, hornýOkraj() - 20); text("Skóre: " + skóre); int náhodnéČíslo = (int)náhodnéCeléČíslo(100); for (int i = hadík.veľkosť() - 1; i > 0; --i) { hadík.daj(i).skočNa(hadík.daj(i - 1)); hadík.daj(i).otoč(hadík.daj(i - 1)); } hlava.dopredu(20); if (jedlo.koliduje(hlava)) { jedlo.náhodnáPoloha(); pridajČlánok(); skóre += SKÓRE_ZA_JEDLO; počítadloObnovy = 0; if (náhodnéČíslo >= 0 && náhodnéČíslo <= 40 && !spomaľovač.viditeľný()) { spomaľovač.zobraz(); spomaľovač.náhodnáPoloha(); } if (náhodnéČíslo >= 33 && náhodnéČíslo <= 66 && !zrýchľovač.viditeľný()) { zrýchľovač.zobraz(); zrýchľovač.náhodnáPoloha(); } if (náhodnéČíslo >= 60 && náhodnéČíslo <= 100 && !skracovač.viditeľný()) { skracovač.zobraz(); skracovač.náhodnáPoloha(); } } if (spomaľovač.viditeľný() && spomaľovač.koliduje(hlava)) { skóre += SKÓRE_ZA_SPOMAĽOVAČ; if (intervalČasovača < 0.1) intervalČasovača += 0.01; spomaľovač.skry(); spustiČasovač(intervalČasovača); } if (zrýchľovač.viditeľný() && zrýchľovač.koliduje(hlava)) { skóre += SKÓRE_ZA_ZRÝCHĽOVAČ; if (intervalČasovača > 0.04) intervalČasovača -= 0.01; zrýchľovač.skry(); spustiČasovač(intervalČasovača); } if (skracovač.viditeľný() && skracovač.koliduje(hlava)) { skóre += SKÓRE_ZA_SKRACOVAČ; skráť(); skracovač.skry(); } if (počítadloObnovy >= 200) { počítadloObnovy = 0; spomaľovač.skry(); zrýchľovač.skry(); skracovač.skry(); } else ++počítadloObnovy; } @Override public void stlačenieKlávesu() { switch (kláves()) { case VPRAVO: hlava.smer(0); break; case VĽAVO: hlava.smer(180); break; case HORE: hlava.smer(90); break; case DOLE: hlava.smer(270); break; } } @Override public void stlačenieTlačidlaMyši() { hlava.otočNaMyš(); } @Override public void ťahanieMyšou() { hlava.otočNaMyš(); } public static void main(String[] args) { nekresli(); new Červík(); kresli(); } }