Racket ohjelmointia Tiina Partanen 2014
Sisältö 1) Peruslaskutoimitukset 2) Peruskuvioiden piirtäminen 3) Määrittelyt (define) 4) Yhdistettyjen kuvien piirtäminen 5) Muuttujat ja funktiot 6) Animaatiot ja pelit (big-bang) 7) Listat 8) Funktio parametrina 2
0. Esivalmistelut Asenna ilmainen DrRacket: http://racket-lang.org/download/ Valitse kieleksi harjoittelukieli (rajoitetumpi Racket + helpommat virheilmoitukset): Language Choose language Teaching languages Beginning student TAI Racket (ei rajoituksia) Language Choose language Racket language tässä tapauksessa jokainen kooditiedosto täytyy aloittaa rivillä: #lang racket 3
1a. Peruslaskut Racketilla ;; Esimerkit: ;; Laske: 2 + 3 (+ 2 3) ;; Laske: 9 4 (- 9 4) ;; Laske: 7 * 3 (* 7 3) ;; Laske: 8 : 3 (/ 8 3) DrRacket on kuin iso laskin. Erona tavalliseen laskimeen, Racket-lauseke aloitetaan aina sulkumerkillä, sitten tulee operaattori (esim. +) ja sitten numerot. Lauseke suljetaan sulkumerkillä. Kirjoita lausekkeet DrRacketin ylempään ikkunaan ja paina run. Vastaukset ilmestyvät alempaan ikkunaan. Voit myös kirjoittaa ne alempaan ikkunaan ja painaa <enter>. 4
1b. Moniosaiset laskut Racketillä ;; 18-5 + 7 (+ (- 18 5) 7) 1. 2. ;; 5 + 15 : 3 (+ 5 (/ 15 3)) 1. Aloita siitä laskutoimituksesta, joka on laskujärjestyksen mukaan ensimmäinen. Seuraava laskutoimitus tehdään tämän ympärille. Rakennat siis Racket-lauseketta kuin kasvattaisit sipuliin uusia kerroksia. 2. 5
2. Peruskuvioiden piirtäminen Jotta kuvioita voi piirtää, täytyy ottaa käyttöön grafiikkakirjasto. Kirjoita alla oleva teksti DrRacketin ylempään ikkunaan ja paina run. (require 2htdp/image) Kokeile seuraavia piirtofunktioita joko ylemmässä ikkunassa (ja paina run ) tai alemmassa ikkunassa (ja paina <enter>). 6
(circle 100 "solid" "red ) 100
(rectangle 200 100 solid blue ) 100 200
(triangle 100 solid yellow ) 100
(rectangle 100 100 outline green ) 100 100
(right-triangle 100 200 outline brown ) 200 100
3. Määrittelyt (define) Koodia voi yksinkertaistaa tekemällä määrittelyjä eli antamalla jollekin koodinpätkälle nimen Määrittely kirjoitetaan ylempään ikkunaan ja painetaan run esim. (define YMPYRÄ (circle 50 solid red )) Määrittelyä voi nyt käyttää kirjoittamalla YMPYRÄ alempaan ikkunaan (+ paina <enter>) 12
(define SUORAKULMIO (rectangle 200 100 solid blue )) ) 13
(define YMPYRÄ (circle 100 solid red )) ) 14
4. Yhdistettyjen kuvien piirtäminen Peruskuvioita saadaan päällekkäin käyttämällä overlay - funktiolla Kuvat saadaan vierekkäin, allekkain tai päällekkäin overlay/xy funktiolla 15
(overlay SUORAKULMIO YMPYRÄ)
(overlay/xy SUORAKULMIO 0 0 YMPYRÄ)
(overlay/xy SUORAKULMIO 100 0 YMPYRÄ) 100
(overlay/xy SUORAKULMIO 0 50 YMPYRÄ) 50
(text punainen 38 red ) (overlay TEKSTI SUORAKULMIO)
Koodaushaaste 1 Tee Japanin lippu (define JAPANIN-LIPPU..) Tee auto (define AUTO..) Vihje: määrittele ensin KORI, RENGAS ja RENKAAT. Käytä näitä, kun teet AUTO:n 21
Lisätehtäviä Tee Suomen lippu (define SUOMEN-LIPPU..) Lisää autoosi teksti 22
5a. Muuttujat ja funktiot Funktion avulla voidaan kirjoittaa uudelleenkäytettävää koodia (kirjoita kerran, kutsu useasti) Valitaan funktiolle kuvaava nimi: maalaa-auto Selvitetään mitkä asiat ovat muuttujia, annetaan niille nimet: k-väri r-väri Esim. (maalaa-auto green red ) palauttaisi tämän auton 23
5b. Funktion määrittely Funktion esittely (kommenttiriville, helpottaa funktion käyttöä, hyvä tapa): funktion nimi : parametrien tyypit -> paluuarvon tyyppi ;; maalaa-auto : merkkijono merkkijono -> kuva Funktion määrittely: (define (maalaa-auto k-väri r-väri) (..)) Muuta funktion sisällä vakiot (esim. red ) muuttujiksi (= kirjoita niiden tilalle joko k-väri tai r- väri) 24
5c. Apufunktiot Koodi kannattaa aina rakentaa pienemmistä osista. Koska auto muodostuu renkaista ja korista tee ensin apufunktiot: ;; maalaa-kori : merkkijono -> kuva ;; maalaa-rengas : merkkijono -> kuva ;; maalaa-renkaat : merkkijono -> kuva Kutsu näitä apufunktioita maalaa-auto funktiosta ;; maalaa-auto : merkkijono merkkijono -> kuva Vihje: käytä apuna koodaushaaste 1:n koodia 25
Koodaushaaste 2 Tee uusi maalaa-tekstiauto - funktio, joka ottaa auton renkaiden ja korin värin lisäksi parametrina myös tekstin sekä tekstin värin. ;; maalaa-tekstiauto : teksti t-väri r-väri k-väri -> kuva Vihje: Kutsu vanhaa maalaa-auto funktiota tämän uuden funktion sisältä.
6. Animaatiot ja pelit (big-bang) big-bang funktio mahdollistaa interaktiiviset pelit ja animaatiot. Se kutsuu ohjelmoijan itsensä kirjoittamia funktioita, kun jotakin tarvitsee tehdä. Tähän tarvitset uutta kirjastoa: 2htdp/universe. (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..)
Käynnistetään auto! Lataa tästä koodi, jolla saat autosi liikkumaan Kopioi tiedostoon kirjoittamasi maalaa-auto - funktio (+apufunktiot), tallenna se ja paina run Auto lähtee liikkeelle kun painat k = kaasu, ja se jarruttaa kun painat j = jarru Jos autosi ei aja maanpinnalla, korjaa koodia 29
7a. Listat Lista on tietorakenne, johon voi tallentaa monta tietoa esim. auton kuvia (list (maalaa-auto black red ) ) Listalle voi antaa myös nimen (define AUTOJONO (list )) 30
7b. Listan käsittely Ota listan ensimmäinen (first AUTOJONO) Ota listan viimeinen (last AUTOJONO) Ota kaikki muut paitsi ensimmäinen (rest AUTOJONO) Miten saat keskimmäisen auton? 31
8. Funktio parametrina map funktiolle voi antaa funktion parametrina ja se suorittaa ko. funktion jokaiselle annetun listan jäsenelle Määritellää uusi funktio käännä: (define (käännä x) (rotate 90 x)) Kutsu map-funktiota: (map käännä AUTOJONO) funktio parametrina lista parametrina 32
(rotate 30 KOLMIO) 30
Koodaushaaste 3 Tee funktio joka pienentää autot ja pienennä sen avulla AUTOLISTAN autot Vihje: pienennysohje seuraavalla sivulla 34
Kuvan voi tuoda DrRacketiin myös tiedostosta. Valitse valikosta: Insert Insert image
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 36
Lisää toiminnallisuutta 2htdp/image sisältää myös paljon muita piirtofunktioita joihin voit tutustua itse näillä sivuilla: http://docs.racketlang.org/teachpack/2htdpimage.html Racket:lla voi koodata ihan mitä tahansa! Tutustu Racket kieleen näillä sivuilla: http://racket-lang.org/ 37
Lisää lukemista Realm of Racket kirja http://www.amazon.com/realm-racket- Learn-Program-Game/dp/1593274912 38