sunnuntai 28. joulukuuta 2014

Koodauksen ABC: 6. oppitunti

Tämä oppitunti aloitettiin siirrä-pacman-funktion loppuun kirjoittamisella ja debuggauksella. Tässä vaiheessa monen oppilaan koodissa ilmeni ihmeellisiä asioita mm. yksi pacman lähti yllättäen liikkumaan viistosti ruudun poikki ja pääsimme miettimään sitä miksi päivitämme koodissamme kerrallaan vain x:ää tai y:tä.

Lopulta saimme jokaisen pacmanin liikkumaan ylös, alas, vasemmalle tai oikealle sen mukaan mitä LÄHTÖ-tilassa määrättiin. Tietenkään tämä ei ollut kovin mielenkiintoista, joten lisäsimme vielä näppäinohjauksen pacmanille. Teimme uuden funktion hoida-näppäimet, jossa käytimme taas vanhaa tuttua COND:ia. hoida-näppäimet - funktio lisättiin luonnollisesti myös big-bang:in kohtaan "on-key". Kulloinkin panettu näppäin saadaan big-bang:ltä tilan lisäksi.

;; hoida-näppäimet : sijainti key -> tila
(define (hoida-näppäimet tila n)
    ( .. ))

Painettu näppäin (n) saadaan big-bang:ltä
Tämän funktion implementoinnin ja testaamisen jälkeen pacman olikin jo valmis liikkumaan kaikkiin suuntiin ja "pelaaja" pystyi ohjailemaan pacmania nuolinäppäimillä. Viimeinen silaus pacmanille tehtiin korjaamalla lopetusehto sellaiseksi, että mihin tahansa neljästä reunasta ajautuminen lopettaa pelin (edellisten muutosten ajaksi olimme kommentoineet stop-when-koodin pois käytöstä).

Jotta lopetusehto olisi helpompi kirjoittaa ja lukea, otimme käyttöön lokaalit muuttujat. Tallensimme ensin pacmanin sijainnin paikallisiin muuttujiin x ja y. Sitten kokosimme ehdot pelikentän reunan ylittämiselle liudaksi ehtolauseita, jotka yhdistettiin loogisella operaattorilla or. Samalla muutimme lopetusehto-funktion nimen muotoon "peli-loppui?".
Otamme käyttöön lokaalit muuttujat sekä loogisen operaattorin OR
Lähes kaikki oppilaat saivat koodinsa toimimaan ja tältä se näyttää:

Ei kommentteja:

Lähetä kommentti