Aisoy Kik stiller spørsmål ved hjelp av lister

Vi skal her kikke på et mer kompekst eksempel. Som i forrige kodeeksempel handler det om å få roboten til å stille spørsmål muntlig, presentere svaralternativer via skjermen i munnen og gi respons på svar.

Denne gangen bruker vi lister, noe som gjør selve koden noe mer kompleks. Til gjengjeld kan vi lage noe spørsmålssett og føye til spørsmål kun ved å importere nye lister. Detblir også langt enklere å stille tilfeldige spørsmål.




I dette eksemplet har vi lagt koden på ulike sprites. Det rydder litt i det visuelle når vi jobber med kodingen samtidig som det gir muligheter for å lage et visuelt grensesnitt (ikke vektlagt her).

Den første kodeblokken bruker vi kun for å sette i gang sekvensen. roboten setter variabelen "Number" til "1", dvs vi gjør den klar til å stille første spørsmål. Roboten ber deretter brukeren om å sette i gang ved å berøre roboten på hodet.

Når roboten blir berørt på hodet setter vi variabelem "Order" til enten 1 eller 2. Vi bruker denne for at svaralternativene skal komme i tilfeldig rekkefølge. Sånn sette r det bare disse som må sjekkes ved hjelp av IF-spørringene. Dvs, vi kunne latt spørsmålene (første blokk inne i IF-blokken) ligge i begynnelsen av denne sekvensen.

Selve spøsmålet stilles ved at v leder ut "Number" og stiller det korresponderende spørsmålet fra listen "Questions". roboten sider da dette ved hjelp av talesyntese,

Deretter viser vi svaralternativene, der rekkefølgen bestemmes av om "Order" er satt til 1 eller 2. Vi bruker her Scratch-funksjonen join. I kombinasjon med de blokkene som er spesifikke for Aisoy-roboten blir dette svært effektivt. Her slår vi sammen de punktene i listene for riktige og gale svaralternativ og skriver disse i robotens munn.

Vi benytter variabelen "Answer" for å holde orden på hvilket svaralternativ som er riktig. Vi knytter verdien "A" berøring av robotens venstre side og "B" til høyre.

Vi setter variabelen "Quest" til "1". Denne sjekker vi i nestre trinn. Vi bruker den for å unngå at brukeren svarer flere ganger på samme spørsmål.



Når et spørsmål er stilt kan brukeren svar ved å berøre roboten på sensorene på sidene av kroppen. Vi sjekker at "Quest" er  "1" – hvis ikke gir ikke roboten noen respons.

Vi har to like kodeblokker. Her ser vi på den som er knyttet til berøring av robotens venstre sensor (sett fras brukerens side, når roboten ses forfra). Dersom riktig svar via variabelen "Answer" er satt til "A" vet vi at brukeren har svar rett og roboten gir en muntlig respons ved å lese ut "Number" og korresponderende respons fra listen "Right reponse". Dersom brukeren hadde svar feil, dvs at "Answer" er satt til B ville roboten gå til ELSE-alternativet i IF-ELSE-spørringen. Roboten vilel da lest ut responsen for galt svar på det aktuelle spørsmålet.

Når responsen er gitt skriver vi det riktige svaret til robotens munn. Dette fungerer fint når det er et riktig svar. Det fungerer imidlertid ikke like bra når vi bruker spørsmålet for å sette i gang en diskusjon, dvs når det er ikke er noe riktig eller galt svar.

Varabelen "Quest" settes til "0". Dermed blir det ikke mulig å gi svar før et nytt spørsmål er stilt.
Vi setter også "Answer" til en verdi som hverken er A eller B ( dette er mest for å sjekke dette underveis på stage – se nedenfor).

Til slutt øker vi variabelen "Number" med 1, slik at vi kommer videre i spørsmålsrekken.


Nedenfor ser vi hvordan Stage'n ser ut. Siden vi ikke bruker en skjerm her, kun roboten, bryr vi oss ikke om det visuelle. Det er imidlertid nyttig å følge med på hvordan de forskjellige parametrene endres mes vi koder:



Når du klikker på linken for å laste ned skriptet kommer du til en fil på google Drive. Siden dette er et skript for ScratchX kommer det ingen forhåndsvisning. Du får en feilmelding, men det er bare å trykke "Download".

Last ned filen. Deretter kobler du deg til roboten, åper ScratchX og laster opp skriptet vis "File"-menyen. Se brukermanualen hvis du lurer på hvordan du kobler sammen datamaskinen din og roboten.