Esimerkki: Kuvion liikuttelu reittiä pitkin



Haluamme liikuttaa ympyrän pisteestä A(100,100) pisteeseen B(300,200) siten, että kuljemme ensin 200 askelta oikealle ja 100 askelta alaspäin. Kuinka se onnistuu?

Ensinnäkin tarvitsemme kaksi laskuria, toinen pystysuuntaa varten ja toinen vaakasuuntaa varten. Toiseksi tarvitsemme if-lauseita, joilla pysäyttää laskuri tarvittaessa. Tehdään seuraava ohjelma.

SANALLINEN ALGORITMI
  1. Määrittele globaali kokonaislukumuuttuja a ja anna sille alkuarvo 0.
  2. Määrittele globaali kokonaislukumuuttuja b ja anna sille alkuarvo 0.
  3. Aseta ikkunan kooksi 400 px vaakaan ja 400 px pystyyn.
  4. Aseta täyttöväriksi punainen.
  5. Aseta ikkunan taustaväriksi valkoinen.
  6. Jos muuttuja a on pienempi tai yhtä suuri kuin 200, niin silloin:
    Kasvata muuttujaa a yhdellä.
    Piirrä ympyrä, jonka halkaisija on 10 px, paikkaan (100+a,100+b). Koska muuttuja a kasvaa, niin ympyrä liikkuu tällöin oikealle.
  7. Muutoin (Jos a on suurempi kuin 200), niin silloin:
  8. Jos muuttuja b on pienempi tai yhtä suuri kuin 100, niin silloin:
    Kasvata muuttujaa b yhdellä.
    Piirrä ympyrä, jonka halkaisija on 10 px, paikkaan (100+a,100+b). Koska muuttuja b kasvaa, niin ympyrä liikkuu tällöin alaspäin.

// Ohjelman tehnyt e-Oppi Oy
// 30.8.2017
int a = 0; // Laskuri vaakasuuntaa varten
int b = 0; // Laskuri pystysuuntaa varten
void setup () {
size(400,400); // Ikkunan koko
fill(255,0,0); // Punainen täyttöväri
background(255); // Valkea taustanväri
}
void draw () {
if (a <= 200) { // Jos on kuljettu 200 tai alle, niin
a++; // Kasvata laskuria vaakasuunnassa
ellipse(100+a,100+b,10,10); // Liiku oikealle
}
else { // Jos ehto ei täyty enää, niin lähde alaspäin
if (b <=100) { // Jos on kuljettu 100 tai alle, niin
b++; // Kasvata laskuria pystysuunnassa
ellipse(100+a,100+b,10,10); // Liiku alaspäin.
}
}

}


Näet, kuinka ympyrä kulkee reitin. Koska laitoimme laskurin if-lauseen sisään, niin laskuria ei enää kasvateta, kun ehto täyttyy. Alla on esitetty ohjelman esimerkkiajo.




Kuinka muuttaisit koodia, jos ympyrä tulisi takaisin loppupisteestä alkupisteeseen?