Racket ohjelmointia II Tiina Partanen 2015
Sisältö Peruspeli 1 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 Peli-idea Bootstrapprojektilta Peliä voi itse kehitellä Peruspeli 1a - ei Pythagoraan lausetta Peruspeli 1b - Pythagoraan lause mukana eteenpäin 2
Peruspeli 1 : Tuunaa peligrafiikat Lataa Peruspeli 1 ja pura paketti kotihakemistoosi Tuunaa peligrafiikat PELIN-NIMI (merkkijono) TEKSTIN-VÄRI (merkkijono) TEKSTIN-KOKO (numero) PELAAJA (kuva) KERÄTTÄVÄ (kuva) VAARA (kuva) TAUSTA (kuva) define Katso miltä pelisi näyttää: paina run
Peruspeli 1 : Ohjelmoi kerättävän ja vaaran liike Täydennä koodia niin, että kerättävä ja vaara liikkuvat Valitse suunta (oikealta vasemmalle tai päinvastoin) (define (liikuta-vaaraa x) x) + - * / (define (liikuta-kerättävää x) x) 4
Peruspeli 1 : Palauta ne takaisin ruudulle Täydennä koodia niin, että huomataan milloin kohde tai vaara ovat menneet ruudun ulkopuolelle (define (ruudulla-vasemmalla? x) true) (define (ruudulla-oikealla? x) true) >, <, <=, >=, =, and, or (define (ruudulla? x) true) 5
Peruspeli 1 : Liikutellaan hahmoa nuolinäppäimillä Täydennä koodia niin, että pelihahmo reagoi nuolinäppäimiin up ja down (define (siirrä-pelaaja y näppäin) y) (cond [(..)(..)] [else..]) 6
Peruspeli 1a : Tutkitaan törmääkö Ajatellaan, että pelaajan ympärillä on törmäysalue. Jos vaara tai kerättävä tulee alueen sisälle, tapahtuu törmäys. Saat törmäysalueen näkyviin kun painat välilyöntiä. 7
Peruspeli 1a : Tutkitaan törmääkö hahmo johonkin Täydennä koodia niin, että saadaan selville onko hahmo riittävän lähellä vaaraa tai kerättävää (define TÖRMÄYSVARA-X 0) (define TÖRMÄYSVARA-Y 0) <, >, <=, >= (define (törmäsikö? x1 y1 x2 y2) false) 8
Peruspeli 1b : Tutkitaan törmääkö Lasketaan pelaajan ja toisen hahmon välinen etäisyys käyttämällä Pythagoraan lausetta. Valitaan etäisyys jolla hahmot törmäävät, ja verrataan hahmojen etäisyyttä siihen. 9
Peruspeli 1b : Tutkitaan törmääkö hahmo johonkin Täydennä koodia niin, että saadaan selville onko hahmo riittävän lähellä vaaraa tai kerättävää (define (kolmion-kanta x1 y1 x2 y2) 0) (define (kolmion-korkeus x1 y1 x2 y2) 0) (define (etäisyys x1 y1 x2 y2) 0) (define (törmäsikö? x1 y1 x2 y2) false) <, >, <=, >=, abs, srq,srqt 10
Peruspeli: Lasketaan pisteet Täydennä koodia niin, että pisteet päivittyvät oikein (define (lisää-pisteitä p) p) (define (vähennä-pisteitä p) p) +, -, *, / 11
Peruspeli: Törmäysanimaatio ja gameover Jos haluat muuttaa törmäysanimaation kuvan ja lisätä pelin loppuun game over tekstin muokkaa seuraavaa koodia (define TÖRMÄYS (star 50 "solid" "gold")) (define LOPPUKUVA empty-image) text 12
Miten eteenpäin? Jos haluat jatkaa Peruspeli 1:stä eteenpäin, on opeteltava tietorakenteiden käyttö (struct) sekä peliä pyörittävän big-bang:in käyttö Pelin kaikki osat ovat muokattavissa. Koko koodi löytyy tiedoston lopusta. Tämä on tarkoitettu niille opettajille/oppilaille, jotka haluavat oppia enemmän ohjelmointia Tässä muutamia vihjeitä siitä miten koodia on muokattava (nämä ohjeet eivät ole täydelliset) 13
Hahmon liikkuminen myös sivusuunnassa Jos haluat liikuttaa hahmoja myös sivusuunnassa sinun pitää opetella käyttämään paikka structia paikka struct:iin tallennetaan sekä x- että y-koordinaatti (define-struct paikka (x y)) paikka x y 14
Struct:in käsittely Tietorakenne (struct) luodaan kutsumalla makepaikka funktiota antamalla x- ja y-kentille arvot: (make-paikka 100 200) paikka Kenttien sisältämän tiedon saa ulos kutsumalla funktiota, jonka nimi muodostuu struct:in ja kentän nimestä: (paikka-x p) 100 200 paikka 100 paikka-struct, jonka nimi on p (paikka-y p) 200
Paikka struct peruspelissä Peruspelissä on valmiina funktiot, jotka ottavat parametrina paikan ja palauttavat uuden paikan Allaolevassa esimerkissä peruspelin koodi on muutettu sellaiseksi, että vaara liikkuukin ylhäältä alas ;; päivitä-vaara : paikka -> paikka (define (päivitä-vaara p) (make-paikka (paikka-x p) (+ (paikka-y p) 10))) Luodaan uusi paikka-struct Vanhan paikan x-koordinaatti Lasketaan uusi y-koordinaatti vanhan y-koodinaatin avulla
Uusien hahmojen lisääminen Jos haluat lisätä hahmoja, sinun pitää lisätä uusi hahmo peli structiin peli struct:ssa on tallessa kaikki pelin tilaan vaikuttavat asiat (define-struct peli (pelaaja vaara kerättävä pisteet tilanne uusi)) Joudut muokkaamaan myös kaikkia funktioita, jotka käyttävät peli struct:ia niin, että uusi kenttä otetaan huomioon 17
Jos haluat lisätä hiirellä ohjauksen Jos haluat lisätä peliin uusia ohjaamismuotoja, joudut koskemaan big-bang - funktioon 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..) (on-mouse..)) piirrettävä näytölle aika kuluu käyttäjä painoi näppäintä hiirellä ohjaaminen 18
2htdp/universe : big-bang (on-tick..) big-bang (on-key..) (to-draw..) (on-mouse..)
Kirjoita uusi funktio, liitä se bigbang:iin lähtötila (big-bang LÄHTÖ (to-draw piirrä-tilanne) (on-tick päivitä-peli) (on-key hoida-näppäimet) (on-mouse hoida-hiiri)) (define (piirrä-tilanne tila )..) (define (päivitä-peli tila )..) (define (hoida-näppäimet tila näppäin)..) (define (hoida-hiiri tila )..)
Lisää harjoituksia Koodauksen ABC - blogi http://koodauksenabc.blogspot.fi Blogin kautta on jaossa materiaalia: Opettajien Racket - koulutukset
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! 22