Stránka sa načítava, prosím čakajte…
© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 27. 4. 2024.
Dátum: 21. 3. 2016, pred niekoľkými rokmi, aktualizované: 20. 4. 2020, pred štyrmi rokmi
Tento projekt neobsahuje žiadne komentáre. (Komentáre sú vynikajúcou pomôckou pri analýze zdrojového kódu a v materiáli na vzdelávacie účely by určite nemali chýbať, avšak problémom bol nedostatok času. – Tento projekt má ambíciu stať sa súčasťou učebnice. V takom prípade bude doplnený o všetko potrebné, vrátane komentárov.)
Projekt bol premenovaný z nového hadíka na húsenicu. Najviac zmien bolo vykonaných v hlavnej triede.
|
~
import knižnica.GRobot; import static knižnica.Svet.*; public class NáhodnýPrvok extends GRobot { @Override public void náhodnáPoloha() { skočNa( náhodnéReálneČíslo(ľavýOkraj(), pravýOkraj()), náhodnéReálneČíslo(spodnýOkraj(), hornýOkraj())); } }
~
import static knižnica.Svet.*; public class ŽivýPrvok extends NáhodnýPrvok { public void smrť() { náhodnáPoloha(); náhodnýSmer(); } @Override public void aktivita() { // Namiesto tejto metódy nemôže byť použité ohraničenie, pretože // to funguje s pevne stanovenými hranicami, naproti tomu okraje // okna sa môžu dynamicky meniť. if (polohaX() > pravýOkraj() || polohaX() < ľavýOkraj() || polohaY() > hornýOkraj() || polohaY() < spodnýOkraj()) smrť(); } }
~
import knižnica.Farba; public class Jedlo extends ŽivýPrvok { private final static Farba farbaJedla = svetlozelená; public Jedlo() { farba(farbaJedla); zdvihniPero(); rýchlosť(1, false); maximálnaUhlováRýchlosť(5); smrť(); } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); kružnica(veľkosť() / 3.0); } }
~
import knižnica.Farba; public class ČlánokTela extends ŽivýPrvok { private final static Farba farbaČlánku = zelená; public ČlánokTela() { farba(farbaČlánku); zdvihniPero(); náhodnáPoloha(); } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); } @Override public void smrť() { aktivuj(); } @Override public void aktivita() { if (veľkosť() > 1) veľkosť(veľkosť() - 1); else { skry(); deaktivuj(); } } }
~
import knižnica.Farba; public class Hlava extends ŽivýPrvok { private final static Farba farbaHlavy = zelená; public Hlava() { farba(farbaHlavy); zdvihniPero(); veľkosť(15); rýchlosť(20, false); maximálnaUhlováRýchlosť(30); } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); vpravo(30); skoč(); vpred(veľkosť() * 0.3); domov(); vľavo(30); skoč(); vpred(veľkosť() * 0.3); } }
~
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 HlavnáTrieda extends GRobot { private class ZlepšenáHlava extends Hlava { @Override public void smrť() { --skóre; super.smrť(); if (odoberČlánok()) { if (vyrovnajPoSmrti) { GRobot riadiaci = HlavnáTrieda.this; riadiaci.smer(hlava.smer()); riadiaci.poloha(hlava.poloha()); int dĺžka = húsenica.dĺžka(); for (int i = 1; i < dĺžka; ++i) { riadiaci.dozadu(30); húsenica.daj(i).poloha(riadiaci.poloha()); } presuňSkóre(); riadiaci.smer(90); } upravHúsenicu(true); } } } private final static Farba farbaPozadia = new Farba(110, 245, 135); private final Zoznam<ŽivýPrvok> húsenica = new Zoznam<>(); private final Zoznam<ŽivýPrvok> zásoba = new Zoznam<>(); private final Zoznam<Jedlo> jedlá = new Zoznam<>(); private final Hlava hlava; private int skóre = 0; private boolean automaticky = true; private boolean pohyblivéJedlo = true; private boolean citlivéJedlo = true; private boolean odhryzniSeba = true; private boolean citlivéCeléTelo = true; private boolean smrťPoUhryznutí = false; private boolean vyrovnajPoSmrti = false; private boolean zobrazSkóre = true; private boolean zobrazInformácie = false; private boolean zobrazPomocníka = false; private boolean celáObrazovka = false; private HlavnáTrieda() { super(šírkaZariadenia(0), výškaZariadenia(0)); farbaPozadia(farbaPozadia); farba(tmavozelená); zdvihniPero(); presuňSkóre(); nekresli(); húsenica.pridaj(hlava = new ZlepšenáHlava()); for (int i = 0; i < 3; ++i) pridajČlánok(); for (int i = 0; i < 150; ++i) jedlá.pridaj(new Jedlo()); upravHúsenicu(true); reaktivujJedlá(); hlava.aktivuj(); kresli(); spustiČasovač(0.100); } private void presuňSkóre() { skočNa(ľavýOkraj() + 10, hornýOkraj() - 25); } private boolean odoberČlánok() { if (húsenica.dĺžka() > 1) { ŽivýPrvok presuň = húsenica.posledný(); presuň.smrť(); húsenica.odober(presuň); zásoba.pridaj(presuň); return true; } return false; } private void pridajČlánok() { boolean nenájdené = true; if (zásoba.počet() > 0) { for (ŽivýPrvok presuň : zásoba) { if (presuň.skrytý()) { presuň.zobraz(); zásoba.odober(presuň); húsenica.pridaj(presuň); nenájdené = false; break; } } } if (nenájdené) húsenica.pridaj(new ČlánokTela()); if (húsenica.počet() > 2) { ŽivýPrvok telo1 = húsenica.daj(húsenica.dĺžka() - 3); ŽivýPrvok telo2 = húsenica.daj(húsenica.dĺžka() - 2); ŽivýPrvok telo3 = húsenica.daj(húsenica.dĺžka() - 1); telo3.skočNa(telo2); telo3.otočNa(telo1); telo3.dozadu(30); } } private void smerNaJedlo() { int početJedál = jedlá.počet(); Jedlo najbližšie = jedlá.daj(0); double vzdialenosť = hlava.vzdialenosťK(najbližšie); for (int i = 1; i < početJedál; ++i) { Jedlo jedlo = jedlá.daj(i); double porovnaj = hlava.vzdialenosťK(jedlo); if (porovnaj < vzdialenosť) { najbližšie = jedlo; vzdialenosť = porovnaj; } } hlava.cieľ(najbližšie, true, false); } private void upravHúsenicu(boolean ajVeľkosti) { int dĺžka = húsenica.dĺžka(); if (ajVeľkosti) { double veľkosťHlavy = hlava.veľkosť(); double veľkosťChvosta = veľkosťHlavy / 2.0; double t = 0.0, Δt = 1.0 / (double)(dĺžka - 1); for (int i = 1; i < dĺžka; ++i) { húsenica.daj(i).veľkosť(lineárnaInterpolácia( veľkosťHlavy, veľkosťChvosta, t)); t += Δt; } naVrch(); if (automaticky) smerNaJedlo(); else hlava.zrušCieľ(false); } for (int i = 1; i < dĺžka; ++i) { ŽivýPrvok článok0 = húsenica.daj(i - 1); ŽivýPrvok článok1 = húsenica.daj(i); článok1.otočNa(článok0); článok1.skočNa(článok0); článok1.dozadu(článok0.veľkosť() + článok1.veľkosť()); } } private void presuňKolidujúceJedlá() { for (Jedlo jedlo : jedlá) for (ŽivýPrvok článok : húsenica) if (jedlo.koliduje(článok)) jedlo.smrť(); } private void reaktivujJedlá() { if (pohyblivéJedlo) for (Jedlo jedlo : jedlá) jedlo.aktivuj(); else for (Jedlo jedlo : jedlá) jedlo.deaktivuj(); } private boolean overKolízieTela() { int dĺžka2 = húsenica.dĺžka(); int dĺžka1 = citlivéCeléTelo ? dĺžka2 : 1; boolean zomrel = false; koniec: for (int i = 0; i < dĺžka1; ++i) { for (int j = i + 2; j < dĺžka2; ++j) { ŽivýPrvok článok1 = húsenica.daj(i); ŽivýPrvok článok2 = húsenica.daj(j); if (článok1.koliduje(článok2)) { if (odhryzniSeba) { skóre -= dĺžka2 - j - 2; for (int k = j + 1; k < dĺžka2; ++k) odoberČlánok(); } zomrel = true; if (smrťPoUhryznutí) hlava.smrť(); break koniec; } } } return zomrel; } @Override public void tik() { boolean zožralaNiečo = false; for (Jedlo jedlo : jedlá) { if (jedlo.koliduje(hlava)) { zožralaNiečo = true; pridajČlánok(); jedlo.smrť(); ++skóre; } } if (overKolízieTela()) zožralaNiečo = true; if (citlivéJedlo) presuňKolidujúceJedlá(); upravHúsenicu(zožralaNiečo); } @Override public void stlačenieKlávesu() { switch (kláves()) { case VPRAVO: hlava.uhlováRýchlosť(-30); break; case VĽAVO: hlava.uhlováRýchlosť(30); break; case MEDZERA: if (časovačAktívny()) zastavČasovač(); else spustiČasovač(); break; case VK_A: automaticky = !automaticky; if (automaticky) smerNaJedlo(); else hlava.zrušCieľ(false); if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_J: citlivéJedlo = !citlivéJedlo; if (citlivéJedlo) presuňKolidujúceJedlá(); if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_I: zobrazInformácie = !zobrazInformácie; if (!časovačAktívny()) prekresli(); break; case VK_P: pohyblivéJedlo = !pohyblivéJedlo; reaktivujJedlá(); if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_S: zobrazSkóre = !zobrazSkóre; if (!časovačAktívny()) prekresli(); break; case VK_C: citlivéCeléTelo = !citlivéCeléTelo; overKolízieTela(); if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_H: odhryzniSeba = !odhryzniSeba; if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_U: smrťPoUhryznutí = !smrťPoUhryznutí; if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_V: vyrovnajPoSmrti = !vyrovnajPoSmrti; if (zobrazInformácie && !časovačAktívny()) prekresli(); break; case VK_F1: zobrazPomocníka = !zobrazPomocníka; if (!časovačAktívny()) prekresli(); break; case VK_F11: if (celáObrazovka) { if (celáObrazovka(false)) celáObrazovka = false; } else { if (celáObrazovka(true)) celáObrazovka = true; } break; } } @Override public void uvoľnenieKlávesu() { switch (kláves()) { case VPRAVO: case VĽAVO: hlava.uhlováRýchlosť(0); break; } } @Override public void stlačenieTlačidlaMyši() { hlava.aktivuj(); hlava.cieľNaMyš(true, false); } @Override public void ťahanieMyšou() { hlava.aktivuj(); hlava.cieľNaMyš(true, false); } @Override public void zmenaVeľkostiOkna() { presuňSkóre(); } @Override public void kresliTvar() { spôsobKreslenia(KRESLI_PRIAMO); if (zobrazSkóre) { text("Skóre: " + skóre); odskoč(25); } if (zobrazInformácie) { String príznaky = ""; if (automaticky) príznaky += "A"; if (pohyblivéJedlo) príznaky += "P"; if (citlivéJedlo) príznaky += "J"; if (odhryzniSeba) príznaky += "H"; if (citlivéCeléTelo) príznaky += "C"; if (smrťPoUhryznutí) príznaky += "U"; if (vyrovnajPoSmrti) príznaky += "V"; if (!príznaky.isEmpty()) príznaky = "; " + príznaky; text("(Dĺžka: " + húsenica.dĺžka() + príznaky + ")"); odskoč(25); } if (zobrazPomocníka) { riadokPomocníka("Húsenica sa dá ovládať kurzorovými šípkami " + "vľavo a vpravo alebo myšou."); riadokPomocníka("Najlepšie po vypnutí automatického režimu " + "(inak sa ovláda klávesnicou"); riadokPomocníka("veľmi ťažko a myšou o málo ťažšie)."); odskoč(8); riadokPomocníka("Na úpravu konfigurácie použite nasledujúce " + "klávesové skratky"); riadokPomocníka("(v zátvorkách pri jednotlivých príznakoch sú " + "uvedené ich aktuálne stavy"); riadokPomocníka("vo forme: +/−):"); odskoč(8); riadokPomocníka(" A (" + (automaticky ? "+" : "−") + ") – " + "prepnutie automatického režimu"); riadokPomocníka(" P (" + (pohyblivéJedlo ? "+" : "−") + ") – " + "prepnutie režimu pohyblivého jedla"); riadokPomocníka(" J (" + (citlivéJedlo ? "+" : "−") + ") – " + "prepnutie režimu odumretia jedla, ktoré sa dostane do " + "kontaktu s telom"); riadokPomocníka(" H (" + (odhryzniSeba ? "+" : "−") + ") – " + "prepnutie režimu odhryznutia vlastného tela"); riadokPomocníka(" C (" + (citlivéCeléTelo ? "+" : "−") + ") – " + "prepnutie režimu citlivosti celého tela na kontakt so sebou"); riadokPomocníka(" U (" + (smrťPoUhryznutí ? "+" : "−") + ") – " + "prepnutie režimu smrti po odhryznutí vlastného tela"); riadokPomocníka(" V (" + (vyrovnajPoSmrti ? "+" : "−") + ") – " + "prepnutie režimu vyrovnania tela po smrti"); odskoč(8); riadokPomocníka(" I – zobrazenie/skrytie informácií"); riadokPomocníka(" S – zobrazenie/skrytie skóre"); riadokPomocníka(" F1 – zobrazenie/skrytie pomocníka"); riadokPomocníka(" F11 – prepnutie režimu celej obrazovky"); } } private void riadokPomocníka(String text) { text(text); odskoč(20); } public static void main(String[] args) { použiKonfiguráciu("HlavnáTrieda.cfg"); if (new HlavnáTrieda().celáObrazovka) celáObrazovka(true); } }
|
~
public class NáhodnýPrvok extends GRobot { @Override public void náhodnáPoloha() { skočNa( Svet.náhodnéReálneČíslo( Svet.ľavýOkraj(), Svet.pravýOkraj()), Svet.náhodnéReálneČíslo( Svet.spodnýOkraj(), Svet.hornýOkraj())); } }
~
public class ŽivýPrvok extends NáhodnýPrvok { public void smrť() { náhodnáPoloha(); náhodnýSmer(); } @Override public void aktivita() { if (polohaX() > Svet.pravýOkraj() || polohaX() < Svet.ľavýOkraj() || polohaY() > Svet.hornýOkraj() || polohaY() < Svet.spodnýOkraj()) smrť(); } }
~
public class Jedlo extends ŽivýPrvok { private final static Farba farbaJedla = svetlozelená; public Jedlo() { farba(farbaJedla); zdvihniPero(); rýchlosť(1, false); maximálnaUhlováRýchlosť(5); smrť(); } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); kružnica(veľkosť() / 3.0); } }
~
public class ČlánokTela extends ŽivýPrvok { private final static Farba farbaČlánku = zelená; public ČlánokTela() { farba(farbaČlánku); zdvihniPero(); náhodnáPoloha(); } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); } @Override public void smrť() { aktivuj(); } @Override public void aktivita() { if (veľkosť() > 1) veľkosť(veľkosť() - 1); else { skry(); deaktivuj(); } } }
~
public class Hlava extends ŽivýPrvok { private final static Farba farbaHlavy = zelená; public Hlava() { farba(farbaHlavy); zdvihniPero(); veľkosť(15); rýchlosť(20, false); maximálnaUhlováRýchlosť(30); } @Override public void kresliTvar() { hrúbkaČiary(veľkosť() / 5.0); kružnica(); vpravo(30); zdvihniPero(); dopredu(veľkosť()); položPero(); dopredu(veľkosť() * 0.3); domov(); vľavo(30); zdvihniPero(); dopredu(veľkosť()); položPero(); dopredu(veľkosť() * 0.3); } }
~
public class HlavnáTrieda extends GRobot { private class TrúchliváHlava extends Hlava { @Override public void smrť() { --skóre; super.smrť(); if (odoberČlánok()) { if (plošnáSmrť) { GRobot hlavný = HlavnáTrieda.this; hlavný.smer(hlava.smer()); hlavný.poloha(hlava.poloha()); int dĺžka = hadík.dĺžka(); for (int i = 1; i < dĺžka; ++i) { hlavný.dozadu(30); hadík.daj(i).poloha(hlavný.poloha()); } presuňSkóre(); hlavný.smer(90); } upravHadíka(true); } } } private final static Farba farbaPozadia = new Farba(110, 245, 135); private final Zoznam<ŽivýPrvok> hadík = new Zoznam<ŽivýPrvok>(); private final Zoznam<ŽivýPrvok> zásoba = new Zoznam<ŽivýPrvok>(); private final Zoznam<Jedlo> jedlá = new Zoznam<Jedlo>(); private final Hlava hlava; private int skóre = 0; private boolean plošnáSmrť = false; private boolean automaticky = true; private boolean živéJedlo = true; private boolean svárlivéJedlo = true; private boolean reaktívneTelo = true; private boolean agresívnePožieranie = true; private boolean smrťHlave = false; private boolean zobrazSkóre = true; private boolean zobrazInformácie = false; private boolean celáObrazovka = false; private HlavnáTrieda() { super(Svet.šírkaZariadenia(0), Svet.výškaZariadenia(0)); Svet.farbaPozadia(farbaPozadia); farba(tmavozelená); zdvihniPero(); presuňSkóre(); Svet.nekresli(); hadík.pridaj(hlava = new TrúchliváHlava()); for (int i = 0; i < 3; ++i) pridajČlánok(); for (int i = 0; i < 150; ++i) jedlá.pridaj(new Jedlo()); upravHadíka(true); reaktivujJedlá(); hlava.aktivuj(); Svet.kresli(); new ObsluhaUdalostí() { @Override public void tik() { boolean zožralNiečo = false; for (Jedlo jedlo : jedlá) { if (jedlo.koliduje(hlava)) { zožralNiečo = true; pridajČlánok(); jedlo.smrť(); ++skóre; } } if (overKolízieTela()) zožralNiečo = true; if (svárlivéJedlo) presuňKolidujúceJedlá(); upravHadíka(zožralNiečo); } @Override public void stlačenieKlávesu() { switch (ÚdajeUdalostí.kláves()) { case Kláves.VPRAVO: hlava.uhlováRýchlosť(-30); break; case Kláves.VĽAVO: hlava.uhlováRýchlosť(30); break; case Kláves.MEDZERA: if (Svet.časovačAktívny()) Svet.zastavČasovač(); else Svet.spustiČasovač(); break; case Kláves.VK_A: automaticky = !automaticky; if (automaticky) smerNaJedlo(); else hlava.zrušCieľ(false); if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_S: svárlivéJedlo = !svárlivéJedlo; if (svárlivéJedlo) presuňKolidujúceJedlá(); if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_D: zobrazInformácie = !zobrazInformácie; Svet.prekresli(); break; case Kláves.VK_F: živéJedlo = !živéJedlo; reaktivujJedlá(); if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_G: reaktívneTelo = !reaktívneTelo; overKolízieTela(); if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_H: zobrazSkóre = !zobrazSkóre; Svet.prekresli(); break; case Kláves.VK_J: agresívnePožieranie = !agresívnePožieranie; if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_K: plošnáSmrť = !plošnáSmrť; if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_L: smrťHlave = !smrťHlave; if (zobrazInformácie && !Svet.časovačAktívny()) Svet.prekresli(); break; case Kláves.VK_F11: if (celáObrazovka) { if (Svet.celáObrazovka(false)) celáObrazovka = false; } else { if (Svet.celáObrazovka(true)) celáObrazovka = true; } break; } } @Override public void uvoľnenieKlávesu() { switch (ÚdajeUdalostí.kláves()) { case Kláves.VPRAVO: case Kláves.VĽAVO: hlava.uhlováRýchlosť(0); break; } } @Override public void stlačenieTlačidlaMyši() { hlava.aktivuj(); hlava.cieľNaMyš(true, false); } @Override public void ťahanieMyšou() { hlava.aktivuj(); hlava.cieľNaMyš(true, false); } @Override public void zmenaVeľkostiOkna() { presuňSkóre(); } }; Svet.spustiČasovač(0.100); } private void presuňSkóre() { skočNa(Svet.ľavýOkraj() + 50, Svet.hornýOkraj() - 20); } private boolean odoberČlánok() { if (hadík.dĺžka() > 1) { ŽivýPrvok presuň = hadík.posledný(); presuň.smrť(); hadík.odober(presuň); zásoba.pridaj(presuň); return true; } return false; } private void pridajČlánok() { boolean nenájdené = true; if (zásoba.počet() > 0) { for (ŽivýPrvok presuň : zásoba) { if (presuň.skrytý()) { presuň.zobraz(); zásoba.odober(presuň); hadík.pridaj(presuň); nenájdené = false; break; } } } if (nenájdené) hadík.pridaj(new ČlánokTela()); if (hadík.počet() > 2) { ŽivýPrvok telo1 = hadík.daj(hadík.dĺžka() - 3); ŽivýPrvok telo2 = hadík.daj(hadík.dĺžka() - 2); ŽivýPrvok telo3 = hadík.daj(hadík.dĺžka() - 1); telo3.skočNa(telo2); telo3.otočNa(telo1); telo3.dozadu(30); } } private void smerNaJedlo() { int početJedál = jedlá.počet(); Jedlo najbližšie = jedlá.daj(0); double vzdialenosť = hlava.vzdialenosťK(najbližšie); for (int i = 1; i < početJedál; ++i) { Jedlo jedlo = jedlá.daj(i); double porovnaj = hlava.vzdialenosťK(jedlo); if (porovnaj < vzdialenosť) { najbližšie = jedlo; vzdialenosť = porovnaj; } } hlava.cieľ(najbližšie, true, false); } private void upravHadíka(boolean ajVeľkosti) { int dĺžka = hadík.dĺžka(); if (ajVeľkosti) { double veľkosťHlavy = hlava.veľkosť(); double veľkosťChvosta = veľkosťHlavy / 2.0; double t = 0.0, Δt = 1.0 / (double)(dĺžka - 1); for (int i = 1; i < dĺžka; ++i) { hadík.daj(i).veľkosť(Svet.lineárnaInterpolácia( veľkosťHlavy, veľkosťChvosta, t)); t += Δt; } naVrch(); if (automaticky) smerNaJedlo(); else hlava.zrušCieľ(false); } for (int i = 1; i < dĺžka; ++i) { ŽivýPrvok článok0 = hadík.daj(i - 1); ŽivýPrvok článok1 = hadík.daj(i); článok1.otočNa(článok0); článok1.skočNa(článok0); článok1.dozadu(článok0.veľkosť() + článok1.veľkosť()); } } private void presuňKolidujúceJedlá() { for (Jedlo jedlo : jedlá) for (ŽivýPrvok článok : hadík) if (jedlo.koliduje(článok)) jedlo.smrť(); } private void reaktivujJedlá() { if (živéJedlo) for (Jedlo jedlo : jedlá) jedlo.aktivuj(); else for (Jedlo jedlo : jedlá) jedlo.deaktivuj(); } private boolean overKolízieTela() { int dĺžka2 = hadík.dĺžka(); int dĺžka1 = reaktívneTelo ? dĺžka2 : 1; boolean zomrel = false; koniec: for (int i = 0; i < dĺžka1; ++i) { for (int j = i + 2; j < dĺžka2; ++j) { ŽivýPrvok článok1 = hadík.daj(i); ŽivýPrvok článok2 = hadík.daj(j); if (článok1.koliduje(článok2)) { if (agresívnePožieranie) { skóre -= dĺžka2 - j - 2; for (int k = j + 1; k < dĺžka2; ++k) odoberČlánok(); } zomrel = true; if (smrťHlave) hlava.smrť(); break koniec; } } } return zomrel; } @Override public void kresliTvar() { if (zobrazSkóre) { text("Skóre: " + skóre); zdvihniPero(); dozadu(20); } if (zobrazInformácie) { String príznaky = ""; if (automaticky) príznaky += "Au"; if (živéJedlo) príznaky += "Ž"; if (svárlivéJedlo) príznaky += "S"; if (reaktívneTelo) príznaky += "R"; if (agresívnePožieranie) príznaky += "Ag"; if (plošnáSmrť) príznaky += "P"; if (smrťHlave) príznaky += "H"; if (!príznaky.isEmpty()) { príznaky = "; " + príznaky; zdvihniPero(); posuňVpravo(5 * príznaky.length()); } text("(Dĺžka: " + hadík.dĺžka() + príznaky + ")"); } } public static void main(String[] args) { Svet.použiKonfiguráciu(); new HlavnáTrieda(); } }