sunnuntai 8. maaliskuuta 2015

Koodauksen ABC: 13. oppitunti

Koodarit palasivat hiihtoloman ja toimintailtapäivän jälkeen sorvin ääreen ja jatkoimme pacmanien kanssa. Tällä tunnilla tekisimme suuren hyppäyksen pelkästä pacmanin liikuttelusta koko pelin pyörittämiseen, joten otimme käytöön uuden peli - structin. Tätä tarvittaisiin, jotta voisimme pitää muistissa mitkä namut on vielä syömättä, paljonko meillä on pisteitä koossa, missä haamut majailevat ja onko pacman edes elossa enää.

;; namut : paikka-lista
;; haamut : hahmo-lista 

;; pisteet : numero
;; elossa? : boolean
(struct peli hahmo (namut haamut pisteet elossa?))


Big-bang saisi tästä eteenpäin tämänlaisen structin sisäänsä, joten muutimme LÄHTÖ-tilan käyttämään uutta structia. Asetimme toistaiseksi haamut-listan tyhjäksi.

(define LÄHTÖ
  (peli 1 1 OIKEALLE namu-lista '() 0 true))


Koska emme olleet vielä  tehneet namujen piirtoon kunnon funktiota, teimme sen nyt muokkaamalla sen vanhasta TESTI:stä.

;; namunpiirtäjä : paikka-lista -> kuva
(define (namunpiirtäjä namulista)
  (foldl piirrä-namupala SEINÄT namulista))


ja otimme uuden namunpiirtäjä - funktion käyttöön piirrä-pacman - funktiossa:
;; piirrä-pacman : peli -> kuva
(define (piirrä-pacman tila)
  (place-image (anna-pacman
               (hahmo-suunta tila))
               (skaalaa (paikka-x tila))
               (skaalaa (paikka-y tila))
               (namunpiirtäjä (peli-namut tila))))


Nyt pääsimme korjaamaan hoida-näppäimet - funktiota, muutimme sitä niin että se palauttaa peli - structin.

;; hoida-näppäimet : peli -> peli
(define (hoida-näppäimet tila n)
  (define p-suunta (hahmo-suunta tila))
  (cond [(key=? n "up")
         (peli (paikka-x tila)
                    (paikka-y tila)
                    YLÖS
                    (peli-namut tila)
                    (peli-haamut tila)
                    (peli-pisteet tila)
                    (peli-elossa? tila))] 

                    ... jne

Koska nyt pelissä tapahtuisi paljon muutakin kuin vain pacmanin liikkuminen, teimme uuden funktion päivitä-peli, joka korvaisi liikuta-hahmo - funktion (huom! jätimme liikuta-hahmo:n kuitenkin apufunktioksi. Tämä funktio toimii niin, että ensin laskemme uuden sijainnin pacamanille vanhan liikuta-hahmo - funktion avulla, sitten testaamme että onko uudessa ruudussa seinäpala, ja jos on emme liiku siihen (else-haara), jos taas ei ole siirrymme siihen (not seinä?). Seinän testaaminen tehdään onko-seinä? - funktiolla, ja sen teemme ensikerralla. Ensi kerralla lisäämme logiikan myös namujen havaitsemiseen sekä niiden syömiseen.

;; päivitä-peli : peli -> peli
(define (päivitä-peli tila)
  (define pacman (liikuta-hahmo tila))
  (define seinä? (onko-seinä? pacman))
  (cond [(not seinä?)
          (peli (paikka-x pacman)
               (paikka-y pacman)
               (hahmo-suunta tila)
               (peli-namut tila)
               (peli-haamut tila)
               (peli-pisteet tila)
               (peli-elossa? tila))]
               ... jne


Tässä vaiheessa kurssia on jo selvää, että emme saa koko pacman-peliä valmiiksi. Haamut jäävät auttamatta pois, mutta toisaalta jos saamme edes namuja syövän, labyrintissa kulkevan pacmanin on se jo aivan huimaa!!!

Ei kommentteja:

Lähetä kommentti