Vytvorte skeč, ktorý v poli obsahuje viacero pozdravov v rôznych jazykoch. V draw vykreslí vždy jeden náhodne vybratý pozdrav a vypíše ho na obrazovku.
Rýchlosť aplikácie znížite príkazom frameRate(). Napríklad frameRate(2) bude dávať 2 snímky za sekundu.
Pridajte do predošlej úlohy druhé pole, budú v ňom mená. Náhodne vyberte pozdrav z poľa pozdravov, náhodne vyberte meno z poľa mien a vypíšte ich spoločne:
Ľudská DNA pozostáva zo 4 nukleotidov, ktoré označujeme A,C,G a T. Napíšte skeč, ktorý vypíše na vedľa seba sekvenciu 20 znakov vygenerovanú náhodne z týchto 4 písmen:
Riešenie
size(600,200);
background(0);
textAlign(LEFT, CENTER);
textSize(30);
String[] nukleotidy = {"A","C","G","T"};
for (int i = 0; i < 20; i++)
{
int index = int(random(nukleotidy.length));
text(nukleotidy[index], i*30, height/2);
}
Úloha 4
Pomocou dvojitého cyklu vyplňte okno mriežkou zo štvorcov o rozmere d. Farba každého štvorca je náhodne vybratá z farieb: #FDFFAF, #AFFFD0, #AFD2FF, #FFAFD1.
Riešenie
size(600,400);
background(0);
noStroke();
int d = 20;
int riadkov = height/d;
int stlpcov = width/d;
int[] farby = {#FDFFAF, #AFFFD0, #AFD2FF, #FFAFD1};
for (int r = 0; r < riadkov; r++)
{
for (int s = 0; s < stlpcov; s++)
{
fill( farby[ int(random(farby.length)) ] );
square(s*d, r*d, d);
}
}
Úloha 5
Vytvorte skeč na generovanie náhodných "osemsmeroviek". Okno vyplňte písmenami náhodne vybratými z celej abecedy:
Riešenie
size(600,400);
background(0);
noStroke();
int d = 20;
int riadkov = height/d;
int stlpcov = width/d;
textSize(20);
textAlign(LEFT, TOP);
String[] abeceda = {"A","B","C","D","E","F","G","H","I","J","K",
"L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for (int r = 0; r < riadkov; r++)
{
for (int s = 0; s < stlpcov; s++)
{
int index = int(random(abeceda.length));
text(abeceda[index], s*d, r*d);
}
}
Alternatívne riešenie pomocou Stringu namiesto poľa
size(600,400);
background(0);
noStroke();
int d = 20;
int riadkov = height/d;
int stlpcov = width/d;
textSize(20);
textAlign(LEFT, TOP);
String abeceda = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int r = 0; r < riadkov; r++)
{
for (int s = 0; s < stlpcov; s++)
{
int index = int(random(abeceda.length()));
text(abeceda.charAt(index), s*d, r*d);
}
}
Úloha 6
Do poľa farby uložte 3 farby: #FF00FF, #00FFFF, #FFFFFF. Na širku okna vykreslite n pásov tak, aby sa v nich cyklicky opakovali tieto farby.
Vyskúšajte pridať do poľa čiernu farbu #000000, či váš program funguje univerzálne:
Riešenie
size(600,200);
noStroke();
int n = 10;
int[] farby = {#FF00FF, #00FFFF, #FFFFFF, #000000};
float sirka = width/n;
for (int i = 0; i < n; i++)
{
fill( farby[ i % farby.length ]);
rect(i*sirka, 0, sirka, height);
}
Úloha 7
Do poľa kapely si uložte niekoľko svojich obľúbených kapiel. V skeči s využitím setup() a draw() ich vypíšte na obrazovku, každú do jedného riadku. Výšky riadku resp. veľkosť písma vypočítajte tak, aby kapely vyplnili celú výšku okna.
Vyskúšajte pridať ešte dve kapely, aby ste si otestovali, že váš program funguje univerzálne.
Riešenie
String[] kapely = {"Underworld", "The Cure", "Orbital", "Archive",
"Unkle", "Dresden Dolls", "Röyksopp", "Yndi Halda"};
float vyska;
void setup()
{
size(400,400);
vyska = height/kapely.length;
textSize(vyska);
textAlign(CENTER, TOP);
}
void draw()
{
background(0);
for (int i = 0; i < kapely.length; i++)
{
text(kapely[i], width/2, i*vyska - vyska/6);
}
}
Pozn: Do súradníc textu som pridal -vyska/6, ale to je len estetický doplnok, aby bol text krajšie vertikálne zarovnaný.
Úloha 8
Upravte predošlú úlohu tak, aby bol každý riadok vypísaný náhodnou farbou vybratou z poľa 4 rôznych farieb: #FF0000, #FFFF00, #00FF00, #0000FF.
A znížte frame rate aplikácie na 5, aby nebolo blikanie také rýchle.
Riešenie
String[] kapely = {"Underworld", "The Cure", "Orbital", "Archive",
"Unkle", "Dresden Dolls", "Röyksopp", "Yndi Halda"};
int farby[] = {#FF0000, #FFFF00, #00FF00, #0000FF};
float vyska;
void setup()
{
size(400,400);
vyska = height/kapely.length;
textSize(vyska);
textAlign(CENTER, TOP);
frameRate(5);
}
void draw()
{
background(0);
for (int i = 0; i < kapely.length; i++)
{
int index = int(random(farby.length));
fill(farby[index]);
text(kapely[i], width/2, i*vyska - vyska/6);
}
}
Úloha 9
Upravte predošlú úlohu tak, farebne blikala iba prvá kapela a ostatné budú biele:
Riešenie
String[] kapely = {"Underworld", "The Cure", "Orbital", "Archive",
"Unkle", "Dresden Dolls", "Röyksopp", "Yndi Halda"};
int farby[] = {#FF0000, #FFFF00, #00FF00, #0000FF};
float vyska;
void setup()
{
size(400,400);
vyska = height/kapely.length;
textSize(vyska);
textAlign(CENTER, TOP);
frameRate(5);
}
void draw()
{
background(0);
for (int i = 0; i < kapely.length; i++)
{
if (i == 0)
{
int index = int(random(farby.length));
fill(farby[index]);
}
else
{
fill(255);
}
text(kapely[i], width/2, i*vyska - vyska/6);
}
}
Úloha 10
Upravte predošlú úlohu tak, aby nebol farebne zvýraznený prvý riadok, ale aby sa v každom frame náhodne určilo, ktorý riadok bude farebne zvýraznený:
Riešenie
String[] kapely = {"Underworld", "The Cure", "Orbital", "Archive",
"Unkle", "Dresden Dolls", "Röyksopp", "Yndi Halda"};
int farby[] = {#FF0000, #FFFF00, #00FF00, #0000FF};
float vyska;
void setup()
{
size(400,400);
vyska = height/kapely.length;
textSize(vyska);
textAlign(CENTER, TOP);
frameRate(5);
}
void draw()
{
background(0);
int zvyrazneny = int(random(kapely.length));
for (int i = 0; i < kapely.length; i++)
{
if (i == zvyrazneny)
{
int index = int(random(farby.length));
fill(farby[index]);
}
else
{
fill(255);
}
text(kapely[i], width/2, i*vyska - vyska/6);
}
}
Úloha 11
Vytvorte skeč, ktorý do poľa s názvom hodnoty vygeneruje n náhodných čísel a vykreslí potom na obrazovku stĺpce pre všetky hodnoty:
Riešenie
int[] hodnoty;
int n = 50;
int sirka;
void setup()
{
size(400, 400);
sirka = width/n;
hodnoty = new int[n];
for (int i = 0; i < n; i++)
{
hodnoty[i] = int(random(height));
}
}
void draw()
{
background(0);
for (int i = 0; i < n; i++)
{
rect(i*sirka, 0, sirka, hodnoty[i]);
}
}
Úloha 12
Upravte predošlý skeč tak, aby sa v každom draw() vykreslil červenou farbou niektorý náhodne vybratý stĺpec:e
Riešenie
int[] hodnoty;
int n = 50;
int sirka;
void setup()
{
size(400, 400);
frameRate(5);
sirka = width/n;
hodnoty = new int[n];
for (int i = 0; i < n; i++)
{
hodnoty[i] = int(random(height));
}
}
void draw()
{
background(0);
int vybraty = int(random(n));
for (int i = 0; i < n; i++)
{
if (i == vybraty)
{
fill(255,0,0);
}
else
{
fill(255);
}
rect(i*sirka, 0, sirka, hodnoty[i]);
}
}
Úloha 13
Do poľa hodnoty vygeneruje n náhodných čísel v rozsahu 10 až 40. Vykreslite do riadku vedľa seba štvorce. Každý štvorec je taký veľký ako príslušná hodnota z poľa:
Riešenie
int[] hodnoty;
int n = 10;
void setup()
{
size(400, 400);
hodnoty = new int[n];
for (int i = 0; i < n; i++)
{
hodnoty[i] = int(random(10,40));
}
}
void draw()
{
background(0);
int x = 0;
for (int i = 0; i < n; i++)
{
square(x, height/2 - hodnoty[i]/2, hodnoty[i]);
x = x + hodnoty[i];
}
}
Úloha 14
V animácii vyfarbujte štvorce postupne za sebou:
Riešenie
int[] hodnoty;
int n = 10;
void setup()
{
size(400, 400);
frameRate(5);
hodnoty = new int[n];
for (int i = 0; i < n; i++)
{
hodnoty[i] = int(random(10,40));
}
}
void draw()
{
background(0);
int x = 0;
int vybraty = frameCount % n;
for (int i = 0; i < n; i++)
{
if (i == vybraty)
{
fill(255,0,0);
}
else
{
fill(255);
}
square(x, height/2 - hodnoty[i]/2, hodnoty[i]);
x = x + hodnoty[i];
}
}
Úloha 15
Vytvorte skeč, ktorý vygeneruje n náhodných hodnôt a nakreslí pre ne stĺpcový graf. Nad každým stĺpcom je vypísaná aj príslušná číselná hodnota:
Rozanimujte graf tak, že v rámci draw() sa každá hodnota v poli zmení o náhodné číslo v rozsahu -5 až 5:
Riešenie
int[] hodnoty;
int n = 10;
int sirka;
void setup()
{
size(400, 400);
sirka = width / n;
textAlign(CENTER, BOTTOM);
textSize(sirka/3);
hodnoty = new int[n];
for (int i = 0; i < n; i++)
{
hodnoty[i] = int(random(height));
}
}
void draw()
{
background(0);
for (int i = 0; i < n; i++)
{
rect(i*sirka, height - hodnoty[i], sirka, hodnoty[i]);
text(hodnoty[i], i*sirka + sirka/2, height - hodnoty[i]);
hodnoty[i] = hodnoty[i] + int(random(-3,3));
}
}