Laat mij raden

Inleiding

In het hoofdstuk ‘Laat mij raden’ wordt een spel ontwikkeld waarbij de speler een geheim getal moet raden dat door de computer werd gegenereerd. Het programma bouwen we stapsgewijs op zodat het gebruik van diverse blokken duidelijk wordt.

Analyse van de opdracht

Bij het analyseren van de opdracht zoeken we naar de noodzakelijke variabelen en bepalen we de logische opeenvolging van de verschillende stappen. Nadien zetten we alle stappen om naar pseudocode.

Variabelen

Drie geheugenplaatsen in het interne geheugen zijn nodig om werkgegevens tijdelijk op te slaan: een geheugenplaats voor het geheim getal, een geheugenplaats voor de laatst ingebrachte waarde door de speler en een geheugenplaats om het aantal pogingen bij te houden. Elke geheugenplaats moet worden aangeduid door middel van een variabele . Een variabele verwijst naar de naam die in het programma aan de geheugenplaats wordt toegekend. Je kan bijvoorbeeld kiezen voor GeheimGetal, MijnGetal en AantalPogingen. Kies vooral voor betekenisvolle namen voor jouw variabelen. De schrijfwijze is in Scratch minder belangrijk. Wij zullen steeds elke variabele starten met een hoofdletter. Ook wordt een hoofdletter gebruikt bij elk afzonderlijk woord in de variabele.

Algoritme

Een algoritme verwijst naar de opeenvolgende stappen die nodig zijn om het probleem op te lossen.

Moeten we VarIabelen initialiseren?

Initialiseren verwijst naar de waarde die aan een variabele wordt toegekend vooraleer deze variabele kan worden gebruikt. De variabele GeheimGetal moet bij het begin van het programma starten met de waarde die door de computer wordt gekozen. De variabele AantalPogingen moet bij de start van het programma starten op nul. Na elke nieuwe inbreng (Input) van MijnGetal moet de variabele AantalPogingen met 1 worden verhoogd.

Wanneer eindigt het programma?

Het programma eindigt als de speler het geheim getal heeft geraden. Wij kunnen het ook als volgt formuleren: wij herhalen de inbreng van een nieuw getal (MijnGetal) tot de inbreng van de speler gelijk is aan het geheim getal (GeheimGetal).

De opeenvolgende stappen in het algoritme

De opeenvolgende stappen in een algoritme kunnen worden voorgesteld door middel van een stroomschema (flowchart) of pseudocode. Een flowchart stelt de logica voor in een diagram. Pseudocode is de voorstelling van een algoritme in een leesbare vorm. De voorstelling lijkt op een programma maar komt niet noodzakelijk overeen met de instructies die in een computertaal worden aangeboden. Een leesbare versie van het algoritme zou als volgt kunnen worden voorgesteld:

GeheimGetal = waarde door de computer gekozen
AantalPogingen = 0
Input MijnGetal
Verhoog AantalPogingen met 1
Repeat Until GeheimGetal = MijnGetal
   Input MijnGetal
   Verhoog AantalPogingen met 1
End Repeat
Output AantalPogingen

De Repeat Until-code (vertaald als herhaal tot) duidt aan wanneer het opvragen van een nieuw getal (als GeheimGetal = MijnGetal) moet worden beëindigd.

Pseudocode omzetten naar Scratch

Variabelen definiëren

Variabelen toevoegen

Wij kunnen onze drie variabelen definiëren (wij noemen dit ook soms variabelen declareren) via de categorie Variabelen in deel A. De rubriek Variabelen bevat de knop Maak een variabele. In deel B werd de variabele GeheimGetal reeds aangemaakt. Deze variabele is aangevinkt. Een aangevinkte variabele zal op het podium worden getoond. Dit maakt het soms gemakkelijk om de inhoud van een variabele te kunnen volgen. Niet-aangevinkte variabelen (zoals bijvoorbeeld my variable) verschijnen niet op het het podium. De variabele GeheimGetal mag natuurlijk niet zichtbaar zijn op het podium. Deze variabele kan je dan ook best afvinken.

Variabelen creëren

Na het klikken op de knop Maak een variabele verschijnt een invulscherm waarbij een naam van een variabele wordt opgevraagd. De keuzemogelijkheid ‘Voor alle sprites’ of ‘Alleen voor deze sprite’ is voorlopig van geen belang: er wordt namelijk slechts één Sprite gebruikt.

Het Scratch-programma opbouwen

Variabelen initialiseren

De variabele GeheimGetal moet een waarde krijgen. Hiervoor kunnen we gebruik maken van het blok Maak in de categorie Variabelen. De variabele die we wensen te initialiseren kan worden geselecteerd via het keuzeveld in het blok.

Scratch kan voor jou een willekeurig, geheel getal aanmaken door middel van de functie (categorie Functies). Je kan zelf kiezen tussen welke waarden je een willekeurig getal wenst te creëren. Je kan nadien de 0 in het maak-blok vervangen door deze functie. De instructie ziet er dan als volgt uit: .

Ook de variabele AantalPogingen kan nu worden geïnitialiseerd door middel van het maak-blok: .

Input

De variabele MijnGetal moet worden gevuld met een getal dat door de speler wordt ingebracht. Het opvragen kan gebeuren via het vraag-blok (categorie Waarnemen):. Je kan natuurlijk de tekst in het witte veld aanpassen.

Het getal dat je via de Sprite op het podium inbrengt wordt steeds overgebracht naar de variabele antwoord. Deze ‘speciale’ variabele (te vinden in de categorie Waarnemen) hoort bij het vraag-blok. Je kan dan ook best deze ‘speciale’ variabele onmiddellijk overbrengen naar jouw eigen variabele MijnGetal. Je sleept dan deze variabele antwoord vanuit de categorie Waarnemen naar het rechterlid van het maak-blok: .

Nadien moet de variabele AantalPogingen met 1 worden verhoogd. Hiervoor gebruiken we het verander-blok (categorie Variabelen): .

Repeat Until

De Repeat Until beschikbaar in bovenstaande pseudocode laat toe om een aantal instructies te herhalen onder controle van een voorwaarde. De voorwaarde bepaalt wanneer de herhaling wordt beëindigd.

herhaal tot

In de categorie Besturen is in Scratch een herhaal tot-blok beschikbaar. In de ruit van het blok komt de voorwaarde om de herhaling stop te zetten. Alle instructies in het midden van het blok worden meerdere keren herhaald.

ingevuld herhaal tot-blok

De voorwaarde van het herhaal tot-blok kan worden opgebouwd via de functie . Deze functie is beschikbaar in de categorie Functies. De witte velden in deze functie worden vervangen door de variabelen GeheimGetal en MijnGetal: . Deze functie wordt dan ingevoegd in de ruit van het herhaal tot-blok.

Output

Het zeg-blok zeg-blok in de categorie Uiterlijken kan worden gebruikt om het resultaat van de zoektocht weer te geven. Het veld met de tekst Hallo! kan bijvoorbeeld worden vervangen door de tekst Gevonden!) of kan worden gevuld met de inhoud van de variabele AantalPogingen : output. Het staat je ook vrij om de duurtijd van het bericht te verhogen of te verlagen.

Door beide oplossingen te combineren kunnen wij de de leesbaarheid van de output sterk verbeteren. Hiervoor kan gebruik worden gemaakt van het voeg-blok voeg-blok in de categorie Functies. Volgende aanpassingen kunnen aan dit blok worden uitgevoerd: plaats de variabele AantalPogingen in het eerste veld en vervang de tekst in het tweede veld door de tekst “ pogingen nodig!“. Plaats deze functie daarna in het eerste veld van het zeg-blok. De zeg-instructie ziet er dan als volgt uit: tekst en variabele samenvoegen.

Laat mij raden

laat mij raden
Laat mij raden

Bovenstaande afdruk toont het volledig ‘Laat mij raden’-programma. Onderaan het programma hebben we enkel nog een stop-blok (categorie Besturen) toegevoegd. Dit blok is in versie 3 van Scratch niet echt meer noodzakelijk maar zorgt wel voor een goede afsluiting van het programma.