6 · De interactieve quiz

Voor het eerst praat je project écht terug. Je sprite stelt een vraag, jij typt een antwoord, en Scratch controleert of het klopt. Je bouwt eerst een quiz op de domme manier: elke vraag een eigen stapel blokken. Daarna leer je de slimme manier met lijsten: één script dat evenveel vragen aankan als je erin stopt — drie, of driehonderd. Dat verschil is het echte onderwerp van deze opdracht.

★★☆ middel 14 stappen ongeveer 60 minuten

Wat leer je?

  • Vragen stellen met vraag ... en wacht en het blokje antwoord
  • Tekst vergelijken met de operator = in een als ... dan ... anders
  • Zinnen aan elkaar plakken met samenvoegen
  • Wat een lijst is en waarin ze verschilt van een variabele
  • Met item ... van ... en een teller door al je vragen wandelen
  • Een eindscore én een percentage berekenen

Wat heb je nodig?

  • Een nieuw, leeg Scratch-project
  • Eén sprite die je quizmaster wordt — de kat mag gewoon blijven staan
  • Drie quizvragen die je zelf verzint (of neem die van ons over)
  • Opdracht 5 gemaakt hebben helpt: je kent variabelen dan al

Nog even opfrissen hoe een als/anders-blok werkt? Kijk bij De werkplek.

Stap voor stap

Alles in deze opdracht gebeurt bij één sprite: je quizmaster. Klik die dus altijd eerst aan voor je blokken sleept. Vink een stap af als hij klaar is; je browser onthoudt dat.

1

Zet je quizmaster klaar

Uiterlijk

Start een nieuw project. De kat mag blijven staan, of kies via de sprite-knop rechtsonder een andere figuur die er als quizmaster uitziet. Zet je sprite iets onder het midden neer, want onderaan het speelveld verschijnt straks het invulvak. Begin met een korte welkomstboodschap.

als wordt aangeklikt
ga naar x: 0 y: -20
zeg Welkom bij mijn quiz! gedurende 2 seconden
Waarom een welkomstboodschap? Niet alleen omdat het gezellig is: het geeft de speler twee seconden om te snappen wat er gaat gebeuren voor de eerste vraag op het scherm knalt. Goede programma's laten je nooit raden wat ze van je willen.
  • Mijn quizmaster begroet me netjes
2

Maak de variabele "score"

Variabelen

Klik op de oranje categorie Variabelen en dan op Maak een variabele. Noem ze score, voor alle sprites. Zet ze meteen op 0, vlak onder je hoedblok — dus voordat de eerste vraag komt.

als wordt aangeklikt
maak score 0
zeg Welkom bij mijn quiz! gedurende 2 seconden
Een variabele is een doosje met een naam erop. In het doosje "score" zit één getal tegelijk. Zet je dat doosje niet op 0 bij de start, dan begint je tweede speelbeurt met de score van de vorige — en dan haalt iedereen na drie potjes een perfecte score.
  • De variabele score staat op 0 bij de start
3

Stel je eerste vraag

Waarneming

Klik op de lichtblauwe categorie Waarneming en sleep het bovenste blok, "vraag ... en wacht", onderaan je script. Typ je vraag in het witte vakje. Klik op de vlag: onderaan het speelveld verschijnt nu een invulbalkje met een blauw pijltje.

als wordt aangeklikt
maak score 0
zeg Welkom bij mijn quiz! gedurende 2 seconden
vraag Wat is de hoofdstad van België? en wacht
Let op het woordje "en wacht". Dit blok zet je script op pauze tot de speler iets getypt heeft en op enter of het pijltje duwt. Pas dán gaat het volgende blok verder. Dat is precies wat je wil bij een quiz: zonder die pauze zou Scratch je antwoord controleren voor je ook maar één letter hebt kunnen typen.
  • Er verschijnt een invulbalkje onderaan het speelveld
4

Het blokje "antwoord": waar komt je tekst terecht?

Waarneming

Vlak onder "vraag ... en wacht" staat in dezelfde categorie een klein ovaal blokje: antwoord. Daarin bewaart Scratch wat de speler net getypt heeft. Sleep het in het witte vakje van een "zeg"-blok om te bewijzen dat het werkt.

antwoord
vraag Wat is de hoofdstad van België? en wacht
zeg antwoord gedurende 2 seconden
Ovale blokjes zijn waarden, geen opdrachten. Je kan "antwoord" niet los uitvoeren — het is gewoon een stukje tekst, net als het getal in een wit vakje. Daarom past het overal waar een vakje zit. Eén ding om te onthouden: er is maar één doosje "antwoord". Stel je een nieuwe vraag, dan wordt het oude antwoord overschreven. Wil je een antwoord langer bewaren, dan moet je het in een eigen variabele zetten.
  • Mijn sprite herhaalt wat ik getypt heb

Testmoment — praat je project terug?

controle

Klik op de vlag, typ iets geks in het balkje en druk op enter. Je sprite hoort jouw tekst te herhalen. Lukt het niet? Loop deze lijst af:

  • Verschijnt er géén invulbalkje? Dan hangt "vraag ... en wacht" los, of staat het onder een blok dat nooit klaar is (zoals een "herhaal voortdurend").
  • Zegt je sprite letterlijk het woord "antwoord"? Dan heb je het woord ingetypt in plaats van het ovale blokje erin gesleept. Verwijder de tekst en sleep het blokje er echt in — je ziet het vakje oplichten als het erin mag.
  • Zegt je sprite niets? Klik één keer op het speelveld voor je typt, en check of het "zeg"-blok wel onder het vraag-blok hangt.
  • Ik typ iets en mijn sprite zegt het na
6

Controleer het antwoord met als ... dan ... anders

Besturing

Gooi het "zeg antwoord"-blok weg en zet er een "als ... dan ... anders" voor in de plaats. In het zeshoekje sleep je de operator = uit de groene categorie Operatoren. Links komt het ovale blokje antwoord, rechts typ je het juiste antwoord: Brussel. In de dan-tak beloon je de speler, in de anders-tak vertel je wat het wél was.

vraag Wat is de hoofdstad van België? en wacht
als antwoord = Brussel dan
zeg Juist! gedurende 1 seconden
verander score met 1
anders
zeg Fout, het is Brussel. gedurende 2 seconden
Waarom als/anders en niet twee losse als-blokken? Met "als ... dan ... anders" kies je gegarandeerd precies één van de twee takken: juist óf fout, nooit allebei en nooit geen van beide. Met twee losse als-blokken moet je zelf de tweede voorwaarde bedenken ("als antwoord niet gelijk is aan Brussel"), en dat vergeten mensen bijna altijd.
  • Juist antwoord geeft een punt, fout antwoord geeft uitleg
7

Voeg een tweede en derde vraag toe

Waarneming

Klik met de rechtermuisknop op je "vraag"-blok en kies dupliceren: je krijgt een kopie van dat blok én alles wat eronder hangt. Klik de kopie onderaan vast en pas de vraag én het juiste antwoord aan. Doe dat nog eens voor vraag drie.

vraag Hoeveel poten heeft een spin? en wacht
als antwoord = 8 dan
zeg Juist! gedurende 1 seconden
verander score met 1
anders
zeg Fout, het zijn er 8. gedurende 2 seconden
vraag Welke planeet staat het dichtst bij de zon? en wacht
als antwoord = Mercurius dan
zeg Juist! gedurende 1 seconden
verander score met 1
anders
zeg Fout, dat is Mercurius. gedurende 2 seconden
Voel je het ongemak? Je script wordt bij elke vraag drie keer zo lang, terwijl je telkens exact hetzelfde doet. Bij tien vragen scroll je je scherm kapot, en als je één ding wil veranderen (bijvoorbeeld "Juist!" in "Goed zo!"), moet je dat tien keer doen. Onthoud dat gevoel — vanaf stap 10 lossen we het definitief op.
  • Mijn quiz stelt drie vragen na elkaar
8

Toon de eindscore met "samenvoegen"

Operatoren

Helemaal onderaan je script wil je zoiets zeggen als "Je had 2 van de 3 goed". Maar je kan geen tekst én een variabele in hetzelfde witte vakje typen. Daarvoor bestaat samenvoegen uit Operatoren: het plakt twee stukjes tekst aan elkaar tot één stuk. Sleep in het tweede vakje van het buitenste blok een tweede samenvoegen — zo plak je drie stukken aan elkaar.

zeg samenvoegen Je had samenvoegen score van de 3 goed! gedurende 3 seconden
Denk als een matroesjka. Het binnenste blok maakt eerst "2 van de 3 goed!", het buitenste plakt daar "Je had " voor: "Je had 2 van de 3 goed!". Let goed op je spaties — die typ je zelf mee in de tekstvakjes, want samenvoegen zet er zelf niets tussen. Zonder die spaties krijg je "Jehad2vande3goed!".
  • Aan het einde zie ik mijn score in een volledige zin

Testmoment — speel je quiz twee keer

controle

Speel je quiz één keer met allemaal juiste antwoorden en één keer met allemaal foute. De eindzin moet beide keren kloppen. Controleer:

  • Krijg je bij alles juist ook echt 3? Zo niet: in één van je als-blokken ontbreekt "verander score met 1", of staat hij per ongeluk in de anders-tak.
  • Begint je tweede spel weer op 0? Zo niet: "maak score 0" staat niet bovenaan.
  • Typ eens brussel met een kleine letter. Dat wordt gewoon goedgekeurd — Scratch let niet op hoofdletters. Typ nu eens Brussel met een spatie erachter, of Bruxelles: dat wordt fout gerekend.
  • Blijft de eindzin aan elkaar geplakt staan? Zet zelf spaties in je tekstvakjes.
  • Mijn quiz telt correct, ook bij een tweede beurt
10

De slimme manier: maak twee lijsten

Lijsten

Onderaan de categorie Variabelen staat de knop Maak een lijst. Maak er twee: vragen en antwoorden. Ze verschijnen als twee vensters op je speelveld. Vul ze met het plusje linksonder in elk venster, óf laat je script het doen met "voeg ... toe aan ...". Het belangrijkste: vraag 1 en antwoord 1 moeten op dezelfde plaats staan, vraag 2 bij antwoord 2, enzovoort.

als wordt aangeklikt
verwijder alles uit vragen
verwijder alles uit antwoorden
voeg Wat is de hoofdstad van België? toe aan vragen
voeg Brussel toe aan antwoorden
voeg Hoeveel poten heeft een spin? toe aan vragen
voeg 8 toe aan antwoorden
voeg Welke planeet staat het dichtst bij de zon? toe aan vragen
voeg Mercurius toe aan antwoorden
Lijst of variabele — wat is het verschil? Een variabele is één doosje met één naam: er past precies één ding in. Een lijst is een kast met genummerde vakjes: één naam, maar zoveel inhoud als je wil. Vakje 1, vakje 2, vakje 3 ... Je score is één getal, dus dat is een variabele. Je vragen zijn er veel, dus dat wordt een lijst.
Waarom eerst "verwijder alles uit"? Zonder die twee blokken worden bij elke klik op de vlag dezelfde drie vragen er nóg eens bij geplakt: na vier potjes staan er twaalf vragen in je lijst. Opruimen vóór je vult — precies zoals je score op 0 zetten vóór je begint te tellen.
  • Ik zie drie vragen en drie antwoorden netjes op dezelfde plaatsen staan
11

Een teller en een lus die precies vaak genoeg draait

Besturing

Maak een gewone variabele nummer en zet ze op 1: dat is het vakje waar je nu naar kijkt. Sleep daarna een "herhaal ..."-blok uit Besturing, en zet in het witte vakje het ovale blokje lengte van vragen uit de lijstenblokken. Onderaan in de lus zet je "verander nummer met 1", zodat je elke ronde één vakje opschuift.

maak score 0
maak nummer 1
herhaal lengte van vragen
zeg nummer gedurende 1 seconden
verander nummer met 1
Waarom "lengte van vragen" en niet gewoon 3? Omdat je script dan zelf telt hoeveel vragen er zijn. Voeg je later twee vragen toe aan je lijst, dan draait de lus vanzelf vijf keer. Je hoeft je code nooit meer aan te raken — je vult alleen je lijst aan. Dat is precies waarom programmeurs dol zijn op lijsten.
Test dit eerst apart! Met dat tijdelijke "zeg nummer"-blok zie je 1, 2, 3 voorbijkomen. Zie je 0, 1, 2 of blijft het bij 1 hangen, dan klopt je teller nog niet en heeft het geen zin om verder te bouwen.
  • Mijn sprite telt 1, 2, 3 — precies zoveel keer als er vragen zijn
12

Haal vraag én antwoord uit het juiste vakje

Lijsten

Vervang het tijdelijke "zeg nummer" door het echte werk. Sleep het ovale blokje item ... van ... in het vakje van "vraag ... en wacht", kies de lijst vragen, en zet in het nummervakje de variabele nummer. Doe daarna hetzelfde aan de rechterkant van je =-vergelijking, maar dan met de lijst antwoorden. Eén als/anders-blok volstaat nu voor álle vragen.

herhaal lengte van vragen
vraag item nummer van vragen en wacht
als antwoord = item nummer van antwoorden dan
zeg Juist! gedurende 1 seconden
verander score met 1
anders
zeg samenvoegen Fout. Het juiste antwoord is: item nummer van antwoorden gedurende 2 seconden
verander nummer met 1
Dit is de kern van de opdracht. "item (nummer) van vragen" betekent letterlijk: kijk in vakje nummer van de kast "vragen". Omdat nummer elke ronde met 1 omhoog gaat, wandelt hetzelfde blok vanzelf langs vakje 1, 2 en 3. Twintig blokken zijn zo geslonken tot vijf — en die vijf werken voor elk aantal vragen. Vergeet nu niet je oude, lange script te verwijderen (sleep het naar het blokkenpalet links).
Tip: vink de vakjes voor vragen en antwoorden uit in het blokkenpalet, of gebruik "verberg lijst ...". Anders staan de juiste antwoorden gewoon op het speelveld te lezen — geen spannende quiz.
  • Mijn korte script stelt alle drie de vragen uit de lijst
13

Eindscore én percentage

Operatoren

Zet onder de lus je eindboodschap. Gebruik nu ook hier "lengte van vragen" in plaats van het vaste getal 3. Reken daarna het percentage uit met score × 100 ÷ aantal vragen, en stop dat in het blokje afgerond zodat je geen lelijke 66.6666667 krijgt.

zeg samenvoegen Je had samenvoegen score samenvoegen van de lengte van vragen gedurende 3 seconden
zeg samenvoegen Dat is samenvoegen afgerond score * 100 / lengte van vragen procent! gedurende 3 seconden
Eerst maal 100, dan delen. Bij 2 op 3: eerst 2 × 100 = 200, dan 200 ÷ 3 = 66,67, en "afgerond" maakt daar 67 van. Zou je eerst delen (2 ÷ 3 = 0,67) en dan pas maal 100 doen, kom je op hetzelfde uit — maar met minder tussenrondingen is het netter. Bouw zo'n som altijd van binnen naar buiten: eerst het maal-blok maken, dat in het deel-blok slepen, en dat geheel in "afgerond".
  • Ik krijg mijn score én een percentage te zien

Eindtest — bewijs dat je quiz slim is

controle

De echte test van deze opdracht is niet of je quiz werkt, maar of je hem kan uitbreiden zonder je code aan te raken. Doe dit:

  • Voeg een vierde vraag toe met twee extra "voeg ... toe aan ..."-blokken. Speel opnieuw: je quiz stelt nu vanzelf vier vragen en het percentage klopt nog steeds. Moest je ergens anders iets veranderen? Dan gebruik je ergens nog een vast getal 3 in plaats van "lengte van vragen".
  • Speel één keer alles juist (100 procent) en één keer alles fout (0 procent).
  • Stelt je quiz twee keer dezelfde vraag, of slaat hij er eentje over? Dan staat "verander nummer met 1" op de verkeerde plek: hij hoort helemaal onderaan in de lus, na het als/anders-blok.
  • Blijft je quiz aan vraag 1 plakken? Dan staat "maak nummer 1" per ongeluk in de lus in plaats van erboven.
  • Krijg je een leeg vraagvenster? Dan telt je nummer verder dan het aantal vakjes, of ben je "verwijder alles uit ..." vergeten en zitten er dubbele items in je lijst.
  • Mijn opdracht 6 is af — extra vragen toevoegen kost me tien seconden

Het volledige script

Dit is de slimme versie: één script dat evenveel vragen aankan als er in je lijst staan. Alles hangt bij dezelfde sprite, in één stapel.

Sprite: Quizmaster — het vullen van de lijsten

als wordt aangeklikt
verwijder alles uit vragen
verwijder alles uit antwoorden
voeg Wat is de hoofdstad van België? toe aan vragen
voeg Brussel toe aan antwoorden
voeg Hoeveel poten heeft een spin? toe aan vragen
voeg 8 toe aan antwoorden
voeg Welke planeet staat het dichtst bij de zon? toe aan vragen
voeg Mercurius toe aan antwoorden
verberg lijst vragen
verberg lijst antwoorden

Sprite: Quizmaster — de quiz zelf (hangt gewoon verder onder het vorige stuk)

maak score 0
maak nummer 1
zeg Welkom bij mijn quiz! gedurende 2 seconden
herhaal lengte van vragen
vraag item nummer van vragen en wacht
als antwoord = item nummer van antwoorden dan
zeg Juist! gedurende 1 seconden
verander score met 1
anders
zeg samenvoegen Fout. Het juiste antwoord is: item nummer van antwoorden gedurende 2 seconden
verander nummer met 1
zeg samenvoegen Je had samenvoegen score samenvoegen van de lengte van vragen gedurende 3 seconden
zeg samenvoegen Dat is samenvoegen afgerond score * 100 / lengte van vragen procent! gedurende 3 seconden
De klassieke beginnersfout "Mijn antwoord is juist en toch zegt hij fout!" Bijna altijd ligt het aan het vergelijken van tekst. Goed nieuws eerst: Scratch let niet op hoofdletters, dus "brussel", "Brussel" en "BRUSSEL" worden alle drie goedgekeurd. Maar hij let wél keihard op alles wat je verder typt: een spatie vooraan of achteraan ("Brussel ") maakt het antwoord fout, net als een tikfout, een ontbrekend accent, of een ander woord dat óók klopt ("Bruxelles", "acht" in plaats van "8"). De gemeenste variant zit in je lijst zelf: typ je per ongeluk een spatie achter "Brussel" in de lijst antwoorden, dan kan de speler nooit meer goed antwoorden en zie je niet waarom. Twee redders: schrijf in je vraag altijd hoe je het antwoord wil ("Antwoord met een getal"), en laat bij twijfel je sprite eerst het verwachte antwoord tonen met een "zeg"-blok, zodat je ziet wat er écht in dat vakje staat.

Uitdagingen

Klaar en nog tijd over? Deze drie uitdagingen hebben géén uitgewerkte oplossing — zoek zelf uit hoe je ze oplost. Alle blokken die je nodig hebt, ken je nu.

A

Tien vragen over jouw favoriete onderwerp

makkelijk

Breid je quiz uit tot tien vragen over iets wat jij goed kent: dieren, voetbal, games, geschiedenis. Je mag daarbij géén enkel blok uit de lus veranderen — alleen "voeg ... toe aan ..."-blokken bijmaken. Lukt dat, dan heb je bewezen dat je script echt slim gebouwd is.

B

Een tweede kans

middel

Geef de speler bij een fout antwoord één herkansing, die maar een half punt oplevert. Tip: in de anders-tak stel je gewoon dezelfde vraag nog eens, met daarin opnieuw een als/anders. Extra pittig: laat je sprite bij die tweede kans de eerste letter van het antwoord verklappen — daarvoor bestaat een operator met "letter ... van ...".

C

Vragen in willekeurige volgorde

pittig

Zorg dat de vragen elke beurt in een andere volgorde komen. Tip: in plaats van je teller met 1 te verhogen, kies je "nummer" met "willekeurig getal tussen 1 en (lengte van vragen)". Maar pas op — dan kan dezelfde vraag twee keer komen. Hoe los je dát op? Denk aan een derde lijst waarin je bijhoudt welke nummers al geweest zijn, of aan het blok "verwijder item ... uit ...".

5 · Vang de vallende appels Volgende opdracht