Arpominen void draw ( ) -lohkossa.

Tehdään ensin ohjelma, joka arpoo yhden kokonaisluvun väliltä -100...100.

Sanallinen algoritmi
  1. Määrittele kokonaislukumuuttuja nimeltään: luku, ja anna sille arvoksi kokonaisluku väliltä -100...100.
  2. Aseta ikkunan kooksi 400 px vaakaan ja 200 px pystyyn.
  3. Aseta ikkunan taustaväriksi valkoinen.
  4. Aseta tekstin väriksi musta.
  5. Aseta tekstin kooksi 20 px.
  6. Tulosta muuttujan luku arvo paikkaan (10,100).

// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
int luku = -100+round(random(200)); 
// Arvotaan kokonaisluku väliltä [-100,100] void setup() { size(400,200); // Asetetaan ikkunan koko background(255); // Asetetaan taustaväri valkoiseksi fill(0); // Asetetaan tekstin väri mustaksi textSize(20); // Asetetaan tekstin kooksi 20 }
void draw() { text(luku,10,100);// Tulostetaan arvottu luku }

Koska arpominen tehdään heti ohjelman alussa, niin arpominen tehdään vain kerran. Entä jos haluamme arpoa lukuja jatkuvasti. Siirretään arpomiskomento void draw () -lohkoon, niin arpominen tapahtuu jatkuvasti.

Sanallinen algoritmi
  1. Aseta ikkunan kooksi 400 px vaakaan ja 200 px pystyyn.
  2. Aseta tekstin väriksi musta.
  3. Aseta tekstin kooksi 20 px.
  4. Aseta ikkunan päivitysnopeus taajuuteen 1 Hz.
  5. Määrittele kokonaislukumuuttuja nimeltään: luku, ja anna sille arvoksi kokonaisluku väliltä -100...100.
  6. Tyhejennä tausta ja aseta sen väriksi valkoinen.
  7. Kirjoita muuttujan luku arvo paikkaan (10,100).

// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() { 
      size(400,200); // Asetetaan ikkunan koko
      fill(0); // Asetetaan tekstin väri mustaksi 
      textSize(20); // Asetetaan tekstin kooksi 20
      frameRate(1); // Muutetaan ikkunan päivitysnopeus arvoon 1 Hz
}
void draw() { int luku = -100+round(random(200)); // Arvotaan kokonaisluku background(255); // Asetetaan taustaväri valkoiseksi text(luku,10,100);// Tulostetaan arvottu luku }

Jotta ohjelmasta tulisi järkevä, niin myös komento background(255); on siirrettävä void draw (); -lohkoon ennen text();-komentoa. Tällöin ikkuna putsataan aina ennen uuden luvun tulostamista. Muuten kävisi niin, että arvotut tekstit tulostuisivat päällekkäin.

Lisäksi arpominen tapahtuu vielä liian nopeasti. Voimme hidastaa ikkunan päivitystä komennolla frameRate(taajuus); komennolla. Komento frameRate(1); päivittää ikkunaa yhden sekunnin välien, jolloin arpominen on paljon hitaampaa. Jos haluat arpomisen kahden sekunnin välien, niin silloin laita komento muotoon frameRate(0.5);. Vastaavasti komento frameRate(2); arpoo luvun puolen sekunnin välein. Sanotaan, että taajuus ja värähdysaika ovat toistensa käänteisarvoja. Komento frameRate(taajuus); laitetaan void setup () -lohkoon.


Onko mahdollista arpoa vain kerran void draw () -lohkossa? Tutkitaan seuraavaa esimerkkiä.
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() { 
     size(400,200); // Asetetaan ikkunan koko 
     fill(0); // Asetetaan tekstin väri mustaksi 
     textSize(20); // Asetetaan tekstin kooksi 20.
     noLoop(); // Komento estää ikkunan päivityksen
}
void draw() {
     int luku = -100+round(random(200)); // Arvotaan kokonaisluku
     background(255); // Valkoinen taustaväri
     text(luku,10,100);// Tulostetaan arvottu luku
}

Komennolla noLoop(); voidaan estää ikkunan päivitys eli tällöin void draw (); -lohko suoritetaan vain kerran.