sunnuntai 21. syyskuuta 2014

Koodauksen ABC: 5. oppitunti

Nyt kun kaikilla oli yhteen suuntaan liikkuva pacman käsissään, oli helppo lähteä kokeilemaan pacmanin liikuttelua eri suuntiin. Annoin oppilaille tehtäväksi etsiä koodista ne kohdat, jotka pitäisi muuttaa että pacman saataisiin kulkemaan oikealta vasemmalle, ylhäältä alas ja alhaalta ylös. Tämä harjoitus lämmitti matematiikan opettajan sydäntäni, koska tässä tuli niin selväksi käsitteet muuttuja ja vakio. Jos mennään vasemmalta oikealle tai oikealta vasemmalle, x on muuttuja. Jos mennään ylhäältä alas tai alhaalta ylös, y on muuttuja. Nyt piti muuttaa myös big-bang:ille annettavaa lähtötilaa (tähän asti ollut 0). Piti muuttaa myös yhteenlaskuja vähennyslaskuiksi siirrä-pacman - funktiossa. Ja tietysti lopetusehtoakin piti hieman rukata (moni pacman jumiutui vanhalla lopetusehdolla paikoilleen).

Kun pacmanin liikuttelu oli saatu hanskaan, ryhdyimme yhdessä miettimään miten olisi mahdollista tehdä pacman, joka voisi liikkua vapaasti sekä ylös, alas, vasemmalle että oikealle. Nythän se oli mahdollista vain yhteen suuntaan kerrallaan. Mitä tietoja tilaan pitäisi tallentaa x-koordinaatin lisäksi?
Mitä tietoa pitää tallentaa?

Oppilaat löysivät helposti y-koordinaatin, mutta vaikeampaa oli jo tajuta, että myös suunta, johon pacman on liikkumassa pitäisi olla tallessa tilamuuttujana.

Tästä pääsimmekin hyvin siihen, että nämä kolme tietoa pitäisi saada tallennettua yhteen "säiliöön"  joten esittelin heille tietorakenteen nimeltä struct.
Tallensimme tiedot sijainti-nimiseen structiin

Jotta struct:in käsite tulisi oppilaille selväksi, demonstroin sitä luokassa olleella muovilaatikolla ja paperin paloilla. Muovilaatikko oli struct, paperit laatikossa olivat kenttiä. Yksi paperi oli nimeltään x ja siihen kirjoitin (= tallensin) 0 jne.

Aloitimme helpoimmaista päästä. Teimme definellä ensin LÄHTÖ-nimisen structin, johon tallensimme pacmanin lähtötilan.

(define LÄHTÖ (make-sijainti 0 0 OIKEALLE))

Myöskään piirrä-pacman - funktiota ei ollut vaikea muuttaa, muutimme sen ottamaan suunnan, x- ja y-koordinaatin ulos tila - muuttujasta

;; piirrä-pacman : sijainti -> kuva
(define (piirrä-pacman tila)
        (place-image 
              (anna-pacman (sijainti-suunta tila))
              (sijainti-x tila) 
              (sijainti-y tila)
               KENTTÄ))

Suurin työmaa olikin sitten siirrä-pacman - funktion muutoksissa. Vaikka siinä käytettiin "vanhaa tuttua" cond:ia, ehdimme tehdä vain ensimmäisen ehdon kuntoon, ja osalla jäi vielä bugeja koodiin korjattavaksi seuraavalla kerralla.

Pacmanin toimintalogiikka

Onneksi muutama oppilas sai pacmanin kaikesta huolimatta taas liikkeelle. Tämä oppitunti kului siis muutoksiin, jotka eivät sinällään lisänneet mitään näkyvää toiminnallisuutta mutta tekivät jatkon mahdolliseksi. Tätä se usein on koodarin elämä...

Seuraavalla kerralla pääsemme ehkäpä liikuttelemaan pacmania jo nuolinäppäimillä?

Ei kommentteja:

Lähetä kommentti