Racket ohjelmointia II Tiina Partanen 2015
Sisältö 1) Peli I Yksinkertainen peli, jossa kerätään kohteita ja väistellään vaaroja Pitkälle viety koodi, johon täydennetään vain puuttuvat palat Ei tarvita tietorakenteita Koodi Bootstrap-projektilta 2) Peli II Peli, jota voi laajentaa kuinka paljon tahansa Vaatii tietorakenteiden hallitsemisen 2
Peli I : Tuunaa peligrafiikat Lataa Peli_1.zip ja pura se kotihakemistoosi Tuunaa peligrafiikat TITLE TITLE-COLOR BACKGROUND DANGER TARGET PLAYER define Testaa pelin ulkonäkö REPL:ssä: > SCREENSHOT
Peli I: Ohjelmoi kohteen ja vaaran liike Täydennä koodia niin, että kohde (TARGET) ja vaara (DANGER) liikkuvat Valitse suunta (oikealta vasemmalle tai päinvastoin) (define (update-danger x) x) + - * / (define (update-target x) x) 4
Peli I: Palauta ne takaisin ruudulle Täydennä koodia niin, että huomataan milloin kohde tai vaara ovat menneet ruudun ulkopuolelle (define (safe-left? x) true) >, <, <=, >=, =, and, or (define (safe-right? x) true) (define (onscreen? x) true) 5
Peli I: Liikutellaan hahmoa nuolinäppäimillä Täydennä koodia niin, että pelihahmo reagoi nuolinäppäimiin up ja down (define (update-player y key) y) (cond [(..)(..)] [else..]) 6
Peli I: Tutkitaan törmääkö hahmo johonkin Täydennä koodia niin, että saadaan selville onko hahmo riittävän lähellä vaaraa tai kohdetta (define (line-length a b) 0) (define (distance px py cx cy) 0) (define (collide? px py cx cy) false) sq, sqrt, abs, <=, >= 7
Peli I: Animaatio etäisyyden laskemista varten Jotta oppilaille on helpompi selvittää mitä linelength ja distance-funktiot oikein laskevat voit aktivoida animaation kirjoittamalla: (define *distances-color* "yellow") 8
Peli II Jos haluaa tehdä minkä tahansa pelin on opeteltava tietorakenteiden käyttö (struct) sekä peliä pyörittävän big-bang:in käyttö Ufo-animaatio on hyvä alku harjoittelulle 9
Määrittele peligrafiikat #lang racket (require 2htdp/image) (require 2htdp/universe) (define LEVEYS 500) (define KORKEUS 300) (define KENTTÄ (empty-scene LEVEYS KORKEUS)) (define UFO ) (define ASKEL 5) (define YLÄREUNA 0) (define ALAREUNA KORKEUS) (define VASENREUNA 0) (define OIKEAREUNA LEVEYS) Kuvan lisääminen DrRacket:ssä: Valitse Insert Insert image Lataa ufokuva tästä. 10
Tilamuuttujat? Miten ufo saadaan menemään ylös, alas, vasemmalle ja oikealle? Tarvitaan tietorakenne, johon voidaan tallentaa sekä x että y-koordinaatit. Sijainti x y
Sijainti - struct MÄÄRITELLÄÄN TIETORAKENNE: (define-struct sijainti (x y)) LUODAAN TIETORAKENNE ja tallennetaan lähtötilanne: (define LÄHTÖ (make-sijainti (/ LEVEYS 2) sijainti (/ KORKEUS 2))) LÄHTÖ 250 0
Piirrä-peli Kirjoita funktio, joka pelin tilanteen ruudulle ;; piirrä-peli : sijainti kuva -> kuva (define (piirrä-peli tila) (place-image UFO (sijainti-x tila) (sijainti-y tila) KENTTÄ))
Päivitä-peli Kirjoita funktio, joka päivittää pelin tilanteen (sen mitä tapahtuu automaattisesti) ;; päivitä-peli : sijainti -> sijainti (define (päivitä-peli tila) (make-sijainti (sijainti-x tila) (+ (sijainti-y tila) ASKEL)))
Hoida-näppäimet Jotta ufoa voi ohjata näppäimillä oikealle ja vasemmalla, tarvitsemme funktion, joka hoitaa näppäimen painallukset Cond-rakenteella koodi saadaan haarautumaan ;; hoida-näppäimet : sijainti merkkijono -> sijainti (define (hoida-näppäimet tila näppäin) (cond [(key=? näppäin up ) (make-sijainti (sijainti-x tila) [(..) (..)] [else tila])) (- (sijainti-y tila) ASKEL))] 15
Lopeta? Nyt kun ufo leijuu, se pitää saada pysymään ilmassa niin, ettei se kosketa mihinkään seinään. Lopetusehdon voi laatia käyttämällä loogista operaattoria or. (define (lopeta? tila) (define x (sijainti-x tila)) (define y (sijainti-y tila)) (or (<= x YLÄREUNA) (>= x ALAREUNA) (<= y VASENREUNA) (>= y OIKEAREUNA))) Lokaalit apumuuttujat tekevät koodista luettavampaa.
Animaatiot ja pelit (big-bang) big-bang funktio mahdollistaa interaktiiviset pelit ja animaatiot. Se kutsuu ohjelmoijan itsensä kirjoittamia funktioita, kun jotakin tarvitsee tehdä. (big-bang LÄHTÖ (to-draw..) (on-tick..) (on-key..) (stop-when..)) piirrettävä näytölle aika kuluu käyttäjä painoi näppäintä lopetusehto
2htdp/universe : big-bang (on-tick..) big-bang (on-key..) (to-draw..) (stop-when..)
Omat funktiot liitetään bigbang:iin lähtötila (big-bang LÄHTÖ (to-draw piirrä-peli) (on-tick päivitä-peli) (on-key hoida-näppäimet) (stop-when lopeta?)) (define (piirrä-peli tila )..) (define (päivitä-peli tila )..) (define (hoida-näppäimet tila key)..) (define (lopeta? tila )..)
Lisää harjoituksia Koodauksen ABC - blogi http://koodauksenabc.blogspot.fi Blogin kautta jaossa materiaalia: DrRacket - piirtäminen DrRacket - animaatio Opettajien Racket-kurssi osa 1 Opettajien Racket-kurssi osa 2 20
Koodausta kouluun Koodausta kouluun projektissa on tarkoitus tehdä oppimateriaalia ohjelmoinnin opettamiseen peruskoulussa (matematiikan ehdoilla) Haluatko olla mukana ideoimassa tai testaamassa, tai kaipaatko apua Racket-ohjelmointiin? Liity Koodausta kouluun facebook ryhmään se on sinua varten! 21