Esimerkki: Reunasta pomppaaminen
Tehdään ohjelma, jossa pallo liikkuu oikealle ja vasemmalle. Kun ikkunan reuna tulee vastaan, pallo vaihtaa suuntaa.
|
// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 0; // Laskurin alkuarvo
boolean suunta = true; // Suunta alussa oikealle
void setup () {
size(400,400); // ikkunan koko
stroke(0); // Musta viivan väri
fill(255,0,0); // Punainen täyttöväri
frameRate(1000); // draw void () lohkon päivityksiä sekunnissa
}
void draw() {
translate(200,200); // Origo (0,0) ikkunan keskelle
background(255); // Tyhjennä tausta
if (suunta == true) { // Jos mennään oikealle
a++; // niin kasvata laskuria
}
if (suunta == false) { // Jos mennään vasemalle
a--; // niin pienennä laskuria
}
if (a > 190) { // Jos tulee oikea reuna vastaan
suunta = false; // niin käännä suunta vasemmalle
}
if (a < -190) { // Jos tulee vasen reuna vastaan
suunta = true; // niin käännä suunta oikealle
}
ellipse(a,0,20,20);
}
Tässä ohjelmassa on myös komento nimeltään frameRate(lukuarvo);. Se kertoo, kuinka monta kertaa sekunnissa void draw ()-lohkoa päivitetään, eli mitä isompi luku, niin sitä nopeammin pallo liikkuu ruudulla. Arvoa ei voi kasvattaa loputtomasti vaan jossain vaiheessa tietokonelaitteiston päivitysnopeus tulee vastaan, jota ei voi ylittää. Oletuksena on 60 päivitystä sekunnissa. Alla on esimerkki ohjelman suorituksesta. Huomaa, että komento background() on siirretty void draw()-lohkoon, niin se siivoaa edelliset pallon jäljet pois. If-lauseilla pallo saadaan myös pomppaamaan seinästä poispäin. Tarvitset kaksi muuttujaa. Toinen muuttujista huolehtii laskurista eli liikkeestä (muuttuja: a) ja toinen suunnasta (muuttuja: suunta). Silloin kun suunta on oikealle (true), niin kasvata laskuria ja vastaavasti silloin kun suunta on vasemmalle (false), niin vähennä laskuria. Kun laskuri on tarpeeksi iso eli pallon keskipisteen vaakasuuntainen koordinaatti ylittää tai alittaa määrätyn raja-arvon, niin käännetään suunta päinvastaiseksi. Tässä raja-arvo on 190 tai -190 eli ikkunan reunasta (200) otetaan pois ympyrän säde (10).

Edellisessä esimerkissä boolean-tyyppisellä muuttujalla määrättiin liikesuunta. Kun muuttuja sai arvon true, niin liikuttiin oikealle. Kun muuttuja sai arvon false, liikuttiin vasemmalle. Tehdään vertailun vuoksi ohjelma ilman boolean-muuttujaa. Yksinkertaisesti voimme muuttaa lisäyksen vx merkin päinvastaiseksi, kun kohtaamme ikkunan reunan. Tämä myös muuttaa pallon liikesuunnan.
|
// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
float x = 50; // Pallon keskipisteen vaakakoordinaatti
float y = 50; // Pallon keskipisteen pystykoordinaatti
float vx= 2; // Lisäyksen suuruus
float r = 20; // Pallon säde
void setup() {
size(800,600); // Ikkunan koko
fill(0,0,255); // Täyttöväri sininen
smooth(); // Liikeen pehmennys
}
void draw () {
background(255); // Tyhjennä tausta ja väritä se valkoiseksi
ellipse(x,y,2*r,2*r); // Piirrä ympyrä
x = x + vx; // Kasvata x:n arvoa lisäyksen verran
if (x+r>= width) {
// Jos pallon oikea reuna saavuttaa ikkunan oikean reunan, niin
vx = -vx; // muuta lisäys päinvastaiseksi
}
if (x-r <=0) {
// Jos pallon vasen reuna saavuttaa ikkunan vasemman reunan, niin
vx = -vx; // muuta lisäys päinvastaiseksi
}
}