For-silmukka ja aliohjelmat
Palataan viime tunnilla esitettyyn ohjelmaan, jossa määrittelimme funktiot: eteen();, taakse();, oikealle(); ja vasemmalle();. Ohjelma on seuraava.
Katsotaan tarkemmin void draw()-lohkossa olevia komentoja, joilla kutsutaan aliohjelmia.
Void draw ()-lohkossa olevilla funktion kutsuilla liikutaan eteenpäin 200 askelta, jonka jälkeen palataan takaisin 200 askelta, jolloin olemme taas lähtöpisteessä. Käännytään oikealle eli myötäpäivään 45 astetta, jonka jälkeen liikutaan taas eteen ja taakse 200 askelta. Lopputulos näyttää nyt tältä.

Jos haluaisimme kiertää täyden ympyrän, niin tällöin funktioiden kutsuja: eteen, taakse ja oikealle, pitäisi tehdä kahdeksan kertaa. Voisiko tämän tehdä lyhyemmin? Muutetaan void draw ()-lohkossa olevaa koodia seuraavasti.
Eli lisäämme funktio-kutsujen ympärille for-silmukan, jossa toistetaan kaarisulkeiden välissä olevia komentoja 8-kertaa. Jolloin ohjelma tulostaa seuraavaa.

For-silmukan avulla saamme lyhennettyä koodia huomattavasti. Huomaa, että for-silmukkaa toistettiin eteen, taakse ja oikealle aliohjelmakutsuja kahdeksan kertaa. Koska 8 ∙ 45° = 360°, niin saimme kierrettyä täyden ympyrän for-silmukan avulla.
Entä jos haluaisit piirtää 60 kappaletta erivärisiä viivoja? Muutetaan void draw ()-lohkossa oleva for-silmukka muotoon.
Kun kasvatamme toistojen määrää for-silmukassa, niin viivojen välinen kulma pienenee. Koska 360 : 60 = 6, niin viivojen välinen kulma on nyt 6 astetta. Ohjelma tulostaa nyt seuraavaa.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int x = 0;
int y = 0;
int w = 10; // Kynän paksuus (voit muuttaa)
void setup () {
size(800,800); // Ikkunan koko
background(255); // Taustaväri valkoinen
fill(255,0,0); // Täyttöväri punainen ( voit muuttaa)
noStroke(); // Ei reunaviivaa
noLoop(); // Suoritetaan void draw () lohko kerran
}
void draw () {
translate(width/2,height/2); // Origo ikkunan keskelle
scale(1,-1); // xy-koordinaastio peilaamalla y-koordinaatit
eteen(200);
taakse(200);
oikealle(45);
eteen(200);
taakse(200);
}
void eteen(int askel) {
for (int a = 0; a < askel; a++) {
x = x + 1;
ellipse(x,y,w,w);
}
translate(askel,0);
x = 0;
}
void taakse(int askel) {
for (int a = 0; a < askel; a++) {
x = x - 1;
ellipse(x,y,w,w);
}
translate(-askel,0);
x = 0;
}
void vasemmalle(int kulma) {
rotate(radians(kulma));
}
void oikealle(int kulma) {
rotate(radians(-kulma));
}
Katsotaan tarkemmin void draw()-lohkossa olevia komentoja, joilla kutsutaan aliohjelmia.
void draw () {
translate(width/2,height/2); // Origo ikkunan keskelle
scale(1,-1); // xy-koordinaastio peilaamalla y-koordinaatit
eteen(200);
taakse(200);
oikealle(45);
eteen(200);
taakse(200);
}
Void draw ()-lohkossa olevilla funktion kutsuilla liikutaan eteenpäin 200 askelta, jonka jälkeen palataan takaisin 200 askelta, jolloin olemme taas lähtöpisteessä. Käännytään oikealle eli myötäpäivään 45 astetta, jonka jälkeen liikutaan taas eteen ja taakse 200 askelta. Lopputulos näyttää nyt tältä.

Jos haluaisimme kiertää täyden ympyrän, niin tällöin funktioiden kutsuja: eteen, taakse ja oikealle, pitäisi tehdä kahdeksan kertaa. Voisiko tämän tehdä lyhyemmin? Muutetaan void draw ()-lohkossa olevaa koodia seuraavasti.
void draw () {
translate(width/2,height/2); // Origo ikkunan keskelle
scale(1,-1); // xy-koordinaastio peilaamalla y-koordinaatit
for (int luku=1; luku <= 8; luku++) {
eteen(200);
taakse(200);
oikealle(45);
}
}
Eli lisäämme funktio-kutsujen ympärille for-silmukan, jossa toistetaan kaarisulkeiden välissä olevia komentoja 8-kertaa. Jolloin ohjelma tulostaa seuraavaa.

For-silmukan avulla saamme lyhennettyä koodia huomattavasti. Huomaa, että for-silmukkaa toistettiin eteen, taakse ja oikealle aliohjelmakutsuja kahdeksan kertaa. Koska 8 ∙ 45° = 360°, niin saimme kierrettyä täyden ympyrän for-silmukan avulla.
Entä jos haluaisit piirtää 60 kappaletta erivärisiä viivoja? Muutetaan void draw ()-lohkossa oleva for-silmukka muotoon.
void draw () {
translate(width/2,height/2); // Origo ikkunan keskelle
scale(1,-1); // xy-koordinaastio peilaamalla y-koordinaatit
for (int luku=1; luku <= 60; luku++) {
fill(round(random(255)),round(random(255)),round(random(255)));
eteen(200);
taakse(200);
oikealle(6);
}
}
Kun kasvatamme toistojen määrää for-silmukassa, niin viivojen välinen kulma pienenee. Koska 360 : 60 = 6, niin viivojen välinen kulma on nyt 6 astetta. Ohjelma tulostaa nyt seuraavaa.
