02. Práca s poliami
Niekoľko praktických trikov a postupov pre polia
Jednoduché prechádzanie položiek v poli
Ak nepotrebujeme vedieť, na ktorej položke sme, ak nepotrebujeme žiadne i
, tak môžeme for
cyklus napísať aj takto:
size(400,400);
background(0);
String[] kapely = {"The Cure", "Depeche Mode", "Underworld", "Orbital"};
for (String k : kapely)
{
text(k, random(width), random(height));
}
Tento program tiež na náhodné miesto na obrazovke vypíše každú položku z poľa kapely
. To sme už robili.
Ale namiesto zápisu cez for i
a potom kapely[i]
sa na konkrétnu položku v poli dostaneme tak, že takto zapísaný for
cyklus prechádza pole kapely
a položku po položke nám každú uloží do premennej k
a potom s tou položkou vykoná samotné telo cyklu. V tomto prípade výpis text(k, random(width), random(height))
.

Prechádzanie poľom v draw()
draw()
Niekedy chceme prechádzať poľom nie celým naraz, ale postupne v animácii cez podprogram draw()
. Napríklad chceme, aby sa v každom frame zobrazilo iné slovo zo zoznamu:

Vtedy namiesto for
cyklu s indexom i
využijeme skutočnosť, že draw()
je vlastne tiež niečo ako cyklus. Tiež sa opakuje. A ako index použijeme počítadlo vykreslených snímkov, ktoré nám poskytuje Processing. Toto počítadlo sa volá frameCount
:
String[] words = {"EAT", "PRAY", "LOVE", "CONSUME", "OBEY"};
void setup()
{
size(400, 400);
background(0);
textSize(50);
textAlign(CENTER, CENTER);
frameRate(5);
}
void draw()
{
background(0);
text(words[frameCount], width/2, height/2);
}
Ale po pár snímkoch program zhavaruje, lebo frameCount
vyrástol nad limit dĺžky poľa. Tomu pomôžeme fintou, že pomocou matematickej operácie %
"zacyklíme" hodnoty v rozsahu 0 až dĺžka poľa:
void draw()
{
background(0);
text(words[frameCount % words.length], width/2, height/2);
}
Náhodný výber z poľa
Povedzme, že máme paletu farieb uloženú v poli a chceme pri kliknutí myšou nakresliť krúžok náhodnou farbou vybratou z tejto palety:
int[] paleta = {#FF00FF, #00FFFF, #FFFF00};
void setup()
{
size(400,400);
background(0);
}
void mousePressed()
{
// Nastav farbu nahodnym vyberom z pola
// Vykresli kruzok na poziciu mysi
}
void draw()
{
}
Aby sme vybrali farbu z poľa potrebujeme vedieť index položky. A tento index má byť náhodný.
Vieme vygenerovať náhodné celé číslo z rozsahu 0 (vrátane) až dĺžka poľa (bez)?
void mousePressed()
{
// Nastav farbu nahodnym vyberom z pola
int i = int(random(paleta.length));
fill(paleta[i]);
// Vykresli kruzok na poziciu mysi
circle(mouseX, mouseY, 50);
}
Prípadne v tomto prípade, keď už nepotrebujeme tento náhodný index na nič iné, iba na vybratie farby z poľa, tak môžeme napísať aj skrátene. Teda ak sa nebojíte zátvoriek:
void mousePressed()
{
// Nastav farbu nahodnym vyberom z pola
fill(paleta[int(random(paleta.length))]);
// Vykresli kruzok na poziciu mysi
circle(mouseX, mouseY, 50);
}

Zapisovanie do poľa
Pole nie je určené len na čítanie položiek, ale môžeme do neho aj zapisovať. To sa hodí vtedy, keď nevieme dopredu, čo bude v poli uložené. Kapely na festivale sme vedeli dopredu. Ale ak by sme chceli zobraziť náhodne vyžrebované čísla lotérie, tak tie dopredu nepoznáme. Ako na to?
Vytvoríme si prázdne pole s 5 položkami a uložíme do neho náhodne vygenerované čísla lotérie od 1 do 40. A potom ich už môžeme vypísať Takto:
size(400, 200);
background(0);
int d = 40; // Rozostupy medzi cislami na obrazovke
textSize(d/2);
textAlign(LEFT, CENTER);
// Vytvorime nove prazdne pole s velkostou 5
int[] loteria = new int[5];
// Tu generujeme nahodne cisla a ukladame ich do pola
for (int i = 0; i < loteria.length; i++)
{
loteria[i] = int(random(1, 40));
}
// Tu vypisujeme cisla z pola
for (int i = 0; i < loteria.length; i++)
{
text(loteria[i], i*d + d/2, height/2);
}

Last updated