On this page:
3.3.1 Tarina
3.3.2 Lähtölaskenta
3.3.3 Laskuautomaatti
3.3.4 Kertotaulupeli
3.3.5 Arvaa numero - peli
3.3.6 Tunnistuspeli
3.3.7 Valintapeli
6.4

3.3 Sovelluksia (display-read)

Lokaalit muuttujat, kesto 8:10

Funktioita, ehto- ja valintalauseita, rekursiivisia funktioita, listojen käyttämistä sekä käyttäjän kanssa kommunikointia voi harjoitella myös teachpacks/display-read-kirjaston avulla. Se on toteutettu 2htdp/universe:n avulla ja tarjoaa helpon tavan pyytää käyttäjää antamaan vastauksia valmiin tekstieditorin avulla tai tekemään valintoja annetuista vaihtoehdoista nuolinäppäinten avulla. Tehtävissä on apua myös lokaaleista muuttujista, jotka määritellään let:in avulla, joten kannattaa opetella käyttämään myös niitä.

Display-read, kesto 11:10

Nämä tehtävät vaativat teachpacks/display-read-kirjaston:

(require teachpacks/display-read)

Se kuuluu teachpacks-pakettiin, joka pitää ladata palvelimelta näiden ohjeiden mukaisesti. Paketti tarvitsee asentaa vain ensimmäisellä kerralla.

WeScheme:ssä ei tarvita paketin asennusta. Huomaa myös, että WeSchemessä kirjastolla on eri nimi.

3.3.1 Tarina

Tarinatehtävän idea on vanha aukkotarinaleikki, jossa pelaajaa pyydetään antamaan tietynlaisia sanoja tietyissä taivutusmuodoissa ja ne sijoitetaan valmiiseen tarinaan omille paikoillensa. Koska pelaaja ei tiedä tarinaa etukäteen, lopputulos on usein hilpeyttä herättävä. Tässä tehtävässä käytämme display-read-funktiota sanojen kysymiseen käyttäjältä. Sinun tehtäväsi on jatkaa mallikoodia ja keksiä tarina. Tämän harjoituksen avulla on helppo tutustua display-read - kirjaston funktioihin. Voit halutessasi laittaa koodin pyörimään silmukassa, eli lisätä siihen rekursiivisen kutsun, jolloin sanat kysytään yhä uudelleen ja uudelleen.

Avaa tästä tehtävätiedosto:

 

Tarina (DrRacket)

 

Tarina (WeScheme)

Jos käytät WeScheme:ä ja haluat tallentaa työsi, tarvitset Google-tunnukset. Kirjaudu ENSIN sisään WeScheme:en, ja tule vasta jälkeen avaamaan tehtävälinkki.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai display-read-kirjaston funktioita:

string-append

   

display-read

   

display-value

Opettajan diat.

3.3.2 Lähtölaskenta

Tee ohjelma, joka laskee kymmenestä nollaan (10, 9, 8, ..., 0) ja ilmoittaa laskurin arvon käyttäjälle display-read -kirjaston avulla (tutustu siihen Koodarin käsikirjan avulla).

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai display-read-kirjaston funktioita:

sub1

   

if

   

display-info-timer

3.3.3 Laskuautomaatti

Laskuautomaatti kysyy käyttäjältä lukuja ja suorittaa niiden perusteella laskutehtävän ja näyttää vastauksen käyttäjälle. Jos käyttäjä ei syötä laskun kannalta järkeviä arvoja, annetaan virheilmoitus.

Voit käyttää tässä jo aikaisemmin koodaamaasi laskufunktiota (pinta-ala, taksimatkalasku, kolmion kulmien laskeminen tms.)

Käytä display-read-number-funktiota lukujen kysymiseen ja display-read funktiota merkkijonojen kysymiseen. Testaa lukujen järkevyys ennen niillä laskemista! Ilmoita lopputulos käyttäjälle display-value:n tai display-info:n avulla. Saatat joutua miettimään myös pyöristämistä, sekä yksiköiden liittämistä vastaukseen. Jotta saat automaattilaskurin toimimaan useamman kuin yhden kerran, tee funktiostasi rekursiivinen. Tallenna siinä tapauksessa käyttäjänä antamat tiedot lokaaleihin muuttujiin (let).

Avaa tästä tehtävätiedosto:

 

Laskuautomaatti(DrRacket)

 

Laskuautomaatti (WeScheme)

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen, display-read tai math-utils -kirjaston funktioita (saatat tarvita muitakin, riippuen laskutehtävästäsi!):

display-read-number

   

string->number

   

+

   

-

   

*

display-value

   

number->string

   

/

   

<

   

>

check-expect

   

number?

   

<=

   

>=

   

=

check-within

   

integer?

   

abs

   

if

   

cond

round-to-decimal

   

exact->inexact

   

or

   

and

   

not

round-to-integer

   

string-append

   

add1

   

sub1

   

let

quantity->image

   

overlay/xy

   

above

   

beside

   

text

3.3.4 Kertotaulupeli

Kertotaulupeli arpoo kaksi lukua väliltä 1-10 ja kysyy käyttäjältä mikä on niiden kertolaskun tulos. Jos vastaus on oikein, ohjelma kertoo siitä käyttäjälle ja lisää pisteitä. Voit rajoittaa peli kierrokset joko 10 pisteeseen tai 10 laskuun.

Käytä display-read-number-funktiota lukujen kysymiseen. Testaa lukujen järkevyys ennen niiden käyttämistä! Ilmoita lopputulos käyttäjälle display-value:n tai display-info:n avulla. Arvotut ja käyttäjän antamat luvut kannattanee tallentaa silmukkafunktion lokaaleihin muuttujiin (let). Katso mallia rekursiivisesta funktiosta automaatilaskurin tehtävätiedostosta. Voit tehdä myös jakolaskupelin jne.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen, display-read -kirjaston funktioita:

display-read-number

   

string->number

   

+

   

-

   

*

display-value

   

number->string

   

random

   

<

   

>

check-expect

   

number?

   

<=

   

>=

   

=

integer?

   

if

   

cond

   

or

   

and

string-append

   

not

   

add1

   

sub1

   

let

3.3.5 Arvaa numero - peli

Tietokone arpoo numeron, ja pyytää käyttäjää arvaamaan mikä se on. Käyttäjälle kerrotaan miltä väliltä numero on, ja jokaisen arvauksen jälkeen annetaan vihje siitä onko arvaus liian pieni vai liian suuri. Kun oikea arvaus on löytynyt kerrotaan montako kierrosta arvaamiseen meni.

Käytä display-read-number-funktiota arvausten kysymiseen. Testaa saadun arvon järkevyys ennen sen käyttämistä! Ilmoita vihje käyttäjälle display-value:n tai display-info:n avulla. Käyttäjän arvaus kannattanee tallentaa silmukkafunktion lokaaliin muuttujaan (let). Katso mallia rekursiivisesta funktiosta automaatilaskurin tehtävätiedostosta.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai display-read -kirjaston funktioita:

display-read-number

   

string->number

   

+

   

-

   

*

display-value

   

number->string

   

random

   

<

   

>

check-expect

   

number?

   

<=

   

>=

   

=

integer?

   

if

   

cond

   

or

   

and

string-append

   

not

   

add1

   

sub1

   

let

3.3.6 Tunnistuspeli

Tunnistuspeli on tietokilpailupeli, jossa käyttäjälle esitetään kysymyksiä joko kuvien ja/tai tekstin muodossa. Ohjelma tarkistaa vastauksen oikeellisuuden ehtolauseen avulla ja kertoo käyttäjälle onko hänen antamansa vastaus oikein vai väärin.

Tunnistuspeli, kesto 12:01

Voit hakea kuvat netistä ja lisätä ne koodiin valikosta: Insert->Images. Kannattaa valita pienikokoisia kuvia tai pienentää ne esim. GIMP-ohjelmalla.

Käytä display-read-funktiota vastauksen kysymiseen. Se avaa editori-ikkunan, johon käyttäjä voi kirjoittaa vastauksensa (merkkijono). Teksti hyväksytään editorissa painamalla <enter>. Kun olet tutkinut vastauksen oikeellisuuden, ilmoita siitä käyttäjälle display-value:n tai display-info:n avulla.

Muodosta kysymyksistä ja oikeista vastauksista lista, jota rekursiivinen funktiosi lukee kysymys- ja vastauspari kerrallaan. Pelaajan saamat pisteet pysyvät tallessa funktiosi parametrissä.

Voit parantaa peliäsi niin, että vastaukseksi kelpaavat myös sanan synonyymit sekä isoilla ja pienillä kirjaimilla kirjoitetut vastaukset.

Avaa tästä tehtävätiedosto:

 

Tunnistuspeli (DrRacket)

 

Tunnistuspeli (WeScheme)

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai display-read-kirjaston funktioita:

display-value

   

string=?

   

if

   

cond

   

and

display-info

   

member?

   

or

   

not

   

above

display-read

   

text

   

+

   

add1

   

sub1

begin

   

list

   

first

   

rest

   

empty?

3.3.7 Valintapeli

Valintapeli on tietokilpailupeli, jossa käyttäjälle esitetään kysymyksiä joko kuvien ja/tai tekstin muodossa. Pelaaja valitsee vastauksensa nuolinäppäinten avulla listasta vaihtoehtoja. Vaihtoehdot voivat olla joko lukuja, merkkijonoja tai kuvia. Ohjelma tarkistaa vastauksen oikeellisuuden ehtolauseen avulla ja kertoo käyttäjälle onko hänen antamansa vastaus oikein vai väärin.

Voit hakea kuvat netistä ja lisätä ne koodiin valikosta: Insert->Images. Kannattaa valita pienikokoisia kuvia tai pienentää ne esim. GIMP-ohjelmalla.

Käytä display-select-funktiota vastauksen kysymiseen. Se avaa valintaikkunan, jossa vastausvaihtoehdot näkyvät kysymyksen alapuolella. Vaihtoehdot annetaan listana (list). Valinta hyväksytään painamalla <enter>. Kun olet tutkinut vastauksen oikeellisuuden, ilmoita siitä käyttäjälle display-value:n tai display-info:n avulla. Koska vaihtoehdot voivat olla joko merkkijonoja, lukuja tai kuvia, muista käyttää oikeaa vertailuoperaattoria: merkkijonoille (string=?), luvuille (=) ja kuville (image=?).

Muodosta kysymyksistä, vaihtoehdoista sekä oikeista vastauksista lista, jota rekursiivinen funktiosi lukee kysymys- ja vastauspari kerrallaan. Pelaajan saamat pisteet pysyvät tallessa funktiosi parametrissä.

Avaa tästä tehtävätiedosto:

 

Valintapeli (DrRacket)

 

Valintapeli (WeScheme)

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen tai display-read-kirjaston funktioita:

display-read

   

string=?

   

=

   

image=?

   

if

display-value

   

cond

   

and

   

or

   

not

above

   

text

   

list

   

+

   

-

begin

   

list

   

first

   

rest

   

empty?