public class Častica extends Object implements Poloha, Smer, Rozmer
Toto je pomocná trieda určená na tvorbu časticových simulácií.
Implementuje dve základné rozhrania Poloha
a Smer, čiže táto trieda obsahuje iba metódy na zistenie
polohy a smeru častice, ostatnú funkcionalitu je potrebné
doprogramovať.
Výhodou takejto implementácie je jej odľahčenosť a široké možnosti použitia. Častica rezervuje omnoho menej prostriedkov ako robot, ale dá sa použiť na mnohých miestach v programovacom rámci GRobot namiesto robota alebo iného objektu implementujúceho rozhranie polohy alebo smeru.
Príklad:
Tento príklad ukazuje využitie triedy Častica pri
implementácii simulácie ohňostroja.
importknižnica.*;publicclassOhňostrojextendsGRobot{// Vnorená súkromná trieda reprezentujúca raketu ohňostroja. Je// odvodená od triedy Častica a rozširuje ju len mierne. Definuje// novú metódu (reakciu) aktivita, ktorá sa stará o fungovanie aktívnej// rakety (spúšťa rovnomennú reakciu aktívnych čiastočiek – pozri// nižšie).privateclassRaketaextendsČastica{// Ďalšia vnorená tried (druhá úroveň), ktorá reprezentuje čiastočku// vybuchnutej rakety. Tiež je odvodená od triedy Častica, no// rozširuje ju o málo viac než trieda Raketa. Čiastočka totiž musí// mať okrem aktivity definovanú ešte rýchlosť a zrýchlenie// (vlastnosti, ktoré má robot definované predvolene, ale použitie// robota by nebolo efektívne – bolo by to ako použiť Ferrari na// jazdu do obchodu, ktorý je krížom cez ulicu). Metóda reset slúži// na opätovné nastavenie počiatočných hodnôt vlastností čiastočky.privateclassČiastočkaextendsČastica{// Atribút rýchlosti posunu v smere osi x.publicdoublevx =0;// Atribút rýchlosti posunu v smere osi y.publicdoublevy =0;// Atribút zrýchlenia posunu v smere osi x.publicdoubleax =0;// Atribút zrýchlenia posunu v smere osi y.publicdoubleay =0;// Atribút životnosti čiastočky v tikoch.publicintživot =0;// Definovanie vlastnej reakcie na časovač – má za úlohu// zabezpečiť činnosť aktívnych čiastočiek a tiež postupné// ubúdanie života čiastočky.publicvoidaktivita() {if(život >0) {x+= vx;y+= vy; vx += ax; vy += ay; --život; } }// Táto metóda slúži na nastavenie počiatočných hodnôt// vlastností čiastočky.publicvoidreset() {// Nastavenie súradníc podľa nadradenej triedy rakety:x= Raketa.this.x;y= Raketa.this.y;// Voľba nových parametrov (využíva sa aktuálna inštancia// najvyššej hierarchicky, nie dedične, nadradenej triedy):Ohňostroj.this.domov(); Ohňostroj.this.náhodnýSmer();doublea =Svet.náhodnéReálneČíslo(-0.25, -0.8);doublev =Svet.náhodnéReálneČíslo(8,10);// Nastavenie nového zrýchlenia:Ohňostroj.this.dopredu(a); ax = Ohňostroj.this.polohaX(); ay = Ohňostroj.this.polohaY();// Nastavenie novej (počiatočnej) rýchlosti:Ohňostroj.this.dopredu(v - a); vx = Ohňostroj.this.polohaX(); vy = Ohňostroj.this.polohaY();// Gravitácia:ay -=0.1;// Náhodná dĺžka života:život = (int)Svet.náhodnéCeléČíslo(8,16); } }// Vnútorný zoznam čiastočiek každej rakety. (V konštruktore nižšie// je určené, že každá raketa bude obsahovať presne 50 čiastočiek.)privatefinalZoznam<Čiastočka> čiastočky =newZoznam<Čiastočka>();// Konštruktor rakety.publicRaketa() {// Vytvorenie 50 čiastočiek:for(inti =0; i <50; ++i) čiastočky.pridaj(newČiastočka()); }// Táto metóda sa stará o „štart“ rakety. V tejto implementácii je to// iba odpálenie rakety na náhodnej pozícii (raketa nevyletuje).publicvoidštart() {náhodnáPoloha();for(Čiastočka čiastočka : čiastočky) čiastočka.reset(); }// Definovanie vlastnej reakcie na časovač – má za úlohu// zabezpečiť činnosť a kreslenie aktívnych rakiet.publicvoidaktivita() {for(Čiastočka čiastočka : čiastočky)if(čiastočka.život >0) { čiastočka.aktivita();skočNa(čiastočka);krúžok(); } } }// Vnútorný zoznam rakiet ohňostroja. (V konštruktore je ich vytvorených// desať.)privatefinalZoznam<Raketa> rakety =newZoznam<Raketa>();// Konštruktor ohňostroja.privateOhňostroj() {// Nastavenie parametrov jedinej inštancie robota, ktorá bude použitá// na kreslenie čiastočiek rakiet:zdvihniPero();veľkosť(3);skry();// Pridanie desiatich rakiet do vnútorného zoznamu:for(inti =0; i <10; ++i) rakety.pridaj(newRaketa());// Spustenie časovača (inak by ohňostroj nefungoval):Svet.spustiČasovač(); }// Po každom kliknutí sa odpáli ďalšia raketa (po odpálení poslednej// sa pokračuje opäť prvou).@Overridepublicvoidklik() { rakety.ďalší().štart(); }// Pri každom tiku sa prekreslí obrazovka a zabezpečí sa fungovanie// aktívnych rakiet.@Overridepublicvoidtik() {Svet.vymažGrafiku();for(Raketa raketa : rakety) raketa.aktivita(); }// Hlavná metóda.publicstaticvoidmain(String... args) {Svet.použiKonfiguráciu("ohnostroj.cfg");newOhňostroj(); } }
Výsledok:

Ukážka
náhodného výsledku po niekoľkých klikoch.
Ďalší príklad, ktorý používa triedu Častica je v opise
metódy vnorMennýPriestorVlastností
| Modifikátor a typ | Atribút a opis |
|---|---|
double |
h
Atribút výšky častice.
|
double |
uhol
Atribút smeru častice.
|
double |
w
Atribút šírky častice.
|
double |
x
Atribút súradnice x polohy častice.
|
double |
y
Atribút súradnice y polohy častice.
|
juh, JUH, juhovychod, JUHOVYCHOD, juhovýchod, JUHOVÝCHOD, juhozapad, JUHOZAPAD, juhozápad, JUHOZÁPAD, sever, SEVER, severovychod, SEVEROVYCHOD, severovýchod, SEVEROVÝCHOD, severozapad, SEVEROZAPAD, severozápad, SEVEROZÁPAD, vychod, VYCHOD, východ, VÝCHOD, zapad, ZAPAD, západ, ZÁPAD| Konštruktor a opis |
|---|
Častica() |
| Modifikátor a typ | Metóda a opis |
|---|---|
void |
aktivita()
Táto metóda je predvolene prázdna.
|
boolean |
jeNa(double x,
double y)
Overí, či sa poloha tejto častice dokonale zhoduje so zadanými
súradnicami.
|
boolean |
jeNa(Poloha poloha)
Overí, či sa poloha tejto častice a poloha zadaného objektu dokonale
zhodujú.
|
boolean |
maRozmer(double šírka,
double výška)
Alias pre máRozmer. |
boolean |
máRozmer(double šírka,
double výška)
Overí, či sa rozmery častice dokonale zhodujú so zadanými
rozmermi.
|
boolean |
maRozmer(Rozmer rozmer)
Alias pre máRozmer. |
boolean |
máRozmer(Rozmer rozmer)
Overí, či sa rozmery častice a rozmery zadaného objektu
dokonale zhodujú.
|
boolean |
maSirku(double šírka)
Alias pre máŠírku. |
boolean |
máŠírku(double šírka)
Zistí, či má častica zadanú šírku.
|
boolean |
maVysku(double výška)
Alias pre máVýšku. |
boolean |
máVýšku(double výška)
Zistí, či má častica zadanú výšku.
|
void |
náhodnáPoloha()
Vygeneruje pre časticu náhodné súradnice x a y, ktoré budú
v rozsahu hraničných hodnôt plochy plátien sveta grafického
robota.
|
void |
náhodnýSmer()
Vygeneruje pre časticu náhodnú hodnotu smeru.
|
void |
pasivita()
Táto metóda je predvolene prázdna.
|
Bod |
poloha()
|
void |
poloha(double novéX,
double novéY)
|
void |
poloha(Poloha bod)
|
double |
polohaX()
|
double |
polohaY()
|
Rozmery |
rozmery()
Zistí aktuálne rozmery častice.
|
void |
rozmery(double šírka,
double výška)
Nastaví nové rozmery častice.
|
void |
rozmery(Rozmer rozmer)
Nastaví nové rozmery častice podľa zadanej implementácie
rozmeru.
|
double |
sirka()
Alias pre šírka. |
void |
sirka(double šírka)
Alias pre šírka. |
double |
smer()
|
void |
smer(double uhol)
|
void |
smer(Smer objekt)
|
double |
suradnicaX()
Alias pre súradnicaX. |
double |
súradnicaX()
|
double |
suradnicaY()
Alias pre súradnicaY. |
double |
súradnicaY()
|
double |
šírka()
|
void |
šírka(double šírka)
|
double |
uhol()
|
void |
uhol(double uhol)
|
void |
uhol(Smer objekt)
|
double |
vyska()
Alias pre výška. |
void |
vyska(double výška)
Alias pre výška. |
double |
výška()
|
void |
výška(double výška)
|
public double x
Atribút súradnice x polohy častice.
public double y
Atribút súradnice y polohy častice.
public double uhol
Atribút smeru častice.
public double w
Atribút šírky častice. (Anglicky: width.)
public double h
Atribút výšky častice. (Anglicky: height.)
public double polohaX()
Metóda vráti súradnicu x polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha, inak je prístup k atribútom x, y verejný.
public double polohaY()
Metóda vráti súradnicu y polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha, inak je prístup k atribútom x, y verejný.
public double súradnicaX()
Metóda vráti súradnicu x polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha, inak je prístup k atribútom x, y verejný.
súradnicaX v rozhraní Polohapublic double suradnicaX()
Alias pre súradnicaX.
suradnicaX v rozhraní Polohapublic double súradnicaY()
Metóda vráti súradnicu y polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha, inak je prístup k atribútom x, y verejný.
súradnicaY v rozhraní Polohapublic double suradnicaY()
Alias pre súradnicaY.
suradnicaY v rozhraní Polohapublic Bod poloha()
Metóda vráti objekt spájajúce obidve
súradnice polohy častice.
Metóda je povinnou súčasťou implementácie rozhrania Poloha, inak je prístup k atribútom x, y verejný.
public void poloha(Poloha bod)
bod – bod určujúci novú polohu časticepublic void poloha(double novéX,
double novéY)
novéX – nová x-ová súradnica časticenovéY – nová y-ová súradnica časticepublic boolean jeNa(double x,
double y)
Overí, či sa poloha tejto častice dokonale zhoduje so zadanými
súradnicami. Ak je zistená zhoda, tak metóda vráti hodnotu true, v opačnom prípade hodnotu false.
public boolean jeNa(Poloha poloha)
Overí, či sa poloha tejto častice a poloha zadaného objektu dokonale
zhodujú. Ak je zistená zhoda, tak metóda vráti hodnotu true,
v opačnom prípade hodnotu false.
public double uhol()
Metóda vráti smer častice.
Metóda je povinnou súčasťou implementácie rozhrania Smer, inak je prístup k atribútu uhol verejný.
public double smer()
Metóda vráti smer častice.
Metóda je povinnou súčasťou implementácie rozhrania Smer, inak je prístup k atribútu uhol verejný.
public void uhol(double uhol)
uhol – hodnota určujúca nový uhol časticepublic void smer(double uhol)
uhol – hodnota určujúca nový uhol časticepublic void uhol(Smer objekt)
uhol – objekt určujúci nový uhol časticepublic void smer(Smer objekt)
uhol – objekt určujúci nový uhol časticepublic double šírka()
Vráti aktuálnu šírku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer, inak je prístup k atribútom w, h verejný.
public double výška()
Vráti aktuálnu výšku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer, inak je prístup k atribútom w, h verejný.
public void šírka(double šírka)
Nastaví novú šírku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer, inak je prístup k atribútom w, h verejný.
public void výška(double výška)
Nastaví novú výšku častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer, inak je prístup k atribútom w, h verejný.
public Rozmery rozmery()
Zistí aktuálne rozmery častice.
public void rozmery(double šírka,
double výška)
Nastaví nové rozmery častice.
Metóda je povinnou súčasťou implementácie rozhrania Rozmer, inak je prístup k atribútom w, h verejný.
šírka – nová šírka časticevýška – nová výška časticepublic void rozmery(Rozmer rozmer)
Nastaví nové rozmery častice podľa zadanej implementácie rozmeru.
public boolean máŠírku(double šírka)
Zistí, či má častica zadanú šírku.
public boolean maSirku(double šírka)
Alias pre máŠírku.
public boolean máVýšku(double výška)
Zistí, či má častica zadanú výšku.
public boolean maVysku(double výška)
Alias pre máVýšku.
public boolean máRozmer(Rozmer rozmer)
Overí, či sa rozmery častice a rozmery zadaného objektu
dokonale zhodujú. Ak je zistená zhoda, tak je výsledkom
true, v opačnom prípade hodnota false.
public boolean máRozmer(double šírka,
double výška)
Overí, či sa rozmery častice dokonale zhodujú so zadanými
rozmermi. Ak je zistená zhoda, tak je výsledkom
true, v opačnom prípade hodnota false.
public boolean maRozmer(double šírka,
double výška)
Alias pre máRozmer.
public void náhodnáPoloha()
Vygeneruje pre časticu náhodné súradnice x a y, ktoré budú v rozsahu hraničných hodnôt plochy plátien sveta grafického robota.
public void náhodnýSmer()
Vygeneruje pre časticu náhodnú hodnotu smeru.
public void aktivita()
Táto metóda je predvolene prázdna. Je určená na prekrytie v triedach odvodených od častice. Častica môže byť chápaná ako odľahčená verzia robota. O celú jej funkčnosť (vrátane aktivity alebo pasivity) sa musí postarať programátor, ktorý sa ju rozhodne rozšíriť a využiť na svoje účely. Aktivita (rovnako ako pasivita) častice nie je v programovacom rámci GRobot nikde vnútorne použitá, ale jej definícia v tejto triede poskytuje spoločný bod použitia všetkých odvodených tried.
public void pasivita()
Táto metóda je predvolene prázdna. Je určená na prekrytie v triedach odvodených od častice. Častica môže byť chápaná ako odľahčená verzia robota. O celú jej funkčnosť (vrátane aktivity alebo pasivity) sa musí postarať programátor, ktorý sa ju rozhodne rozšíriť a využiť na svoje účely. Pasivita (rovnako ako aktivita) častice nie je v programovacom rámci GRobot nikde vnútorne použitá, ale jej definícia v tejto triede poskytuje spoločný bod použitia všetkých odvodených tried.