Ik wil blad, steen en schaar spelen, maar het lukt niet zo goed.

Oefening 5: Blad, steen en schaar

Ken je het spel blad, steen, en schaar? Er zijn twee spelers. Iedere speler vormt met de hand achter de rug een blad (een platte hand), een steen (een gesloten vuist) of een schaar (wijsvinger en middenvinger uitsteken). Nadat het zinnetje “blad, steen, schaar” wordt gezegd, laten de twee spelers aan elkaar hun ‘voorwerp’ zien. Een speler wint als

  • Hij een schaar heeft en de andere een blad (papier kan stuk geknipt worden).
  • Hij een blad heeft en de andere een steen (een steen kan bedekt worden door papier).
  • Hij een steen heeft en de andere een schaar (een schaar kan verpletterd worden door een schaar).

In deze oefening hebben wij het spel blad, steen en schaar gemaakt. Maar zoals je zal zien, zit er ergens nog een foutje in. Aan jou om dit te zoeken en te verbeteren!

Het eindresultaat

Project

file_downloadDownload

cloudScratch-Studio



In dit project zorg je ervoor dat:

  • je de fout vindt
  • je het spel eerlijk laat verlopen

Stappenplan

Stap 1: Observeren

Voer het programma eens uit en kijk wat er gebeurt.

Merk jij ook dat Ruby nooit kan verliezen? Ruby en Perl kunnen wel gelijkspelen, maar alle andere keren wint Ruby altijd. Hoe kan dit? Zoek naar de plaats in de code waar er besloten wordt wie wint. Daar zal waarschijnlijk wel iets mis lopen.

Stap 2: Ontleden

Je hebt het programma al eens uitgevoerd en nu is het aan jou om dit programma te ontleden. Zo wordt het makkelijker om te begrijpen wat er precies gebeurt. Probeer eerst even niet naar de blokken te kijken. Wat gebeurt er allemaal in het filmpje? Even overlopen:

  1. Unix begint met het spel te introduceren.
  2. Unix zegt: “blad, steen en schaar”.
  3. Nadat Unix afgeteld heeft, zeggen Ruby en Perl tegelijk het voorwerp dat zij kiezen.
  4. Unix beslist wie er wint.
  5. Puntjes 2, 3 en 4 blijven een aantal keren herhalen totdat het spel over is en Unix vertelt wie er gewonnen heeft.

Probeer deze puntjes nu terug te vinden in de blokken.

  • Waar introduceert Unix het spel?
  • Waar kiezen Ruby en Perl hun voorwerp?
  • Waar beslist Unix wie de ronde heeft gewonnen?
  • Waar beslist Unix wie het spel heeft gewonnen?
Stap 3: Begrijpen

Nu je alle belangrijke plaatsen in de code gevonden hebt, is het aan jou om te begrijpen wat er op elke plaats precies gebeurt.

Om te beginnen, heb je wel gezien dat er in dit project veel variabelen gebruikt worden. Laten we deze eerst even overlopen en uitleggen waarvoor we deze gebruiken:

  • Perl en Ruby: onthouden de score van Perl en Ruby. Het is belangrijk dat deze score in het begin altijd start op 0.
  • keuze Perl en keuze Ruby: onthouden de keuze (blad, steen, schaar) van Perl en Ruby.
  • blad, steen en schaar: dit zijn getallen! Het maakt het programma wat eenvoudiger om getallen in plaats van strings te gebruiken. De variabele blad heeft de waarde 1. De variabele steen heeft de waarde 2. De variabele schaar heeft de waarde 3. De variabele blad is verschillend van steen omdat de waarde van blad (= 1) verschillend is van de waarde van steen (= 2).

Hoe kiezen Ruby en Perl nu hun voorwerp? Zoals je zowel bij Ruby als bij Perl kan zien, maken ze gebruik van het “willekeurig”-blokje. Zo kunnen ze gemakkelijk een willekeurig getal kiezen tussen 1 en 3. Daarom is het gemakkelijk dat onze variabelen blad, steen en schaar ook getallen zijn tussen 1 en 3! Ze doen dit wanneer ze een signaal krijgen om een nieuw voorwerp te kiezen.

Als laatste is het belangrijk dat Unix weet wie de ronde heeft gewonnen. Hij moet dus de keuzes van Perl en Ruby met elkaar gaan vergelijken. Stel je nu even de vraag: “Wanneer wint Perl?”. Laten we even opsommen wanneer Perl wint van Ruby:

  • Perl kiest blad en Ruby kiest steen.
  • Perl kiest steen en Ruby kiest schaar.
  • Perl kiest schaar en Ruby kiest blad.
Stap 4: Onderzoeken

Je begrijpt nu hoe het programma in elkaar zit. Het is nu aan jou om te zoeken waar het precies mis loopt. Kijk nog eens naar het filmpje! Zie jij ook dat Ruby af en toe wint terwijl ze eigenlijk niet zou mogen winnen? Het lijkt alsof Unix af en toe een verkeerde keuze maakt!

Zoek in de plaats waar Unix de keuze maakt wie de ronde wint en kijk eens naar de “en”- en “of”-blokken. Staan die op de juiste plaats?

[TIP: haal de blokken eens uit elkaar om beter te begrijpen wat er precies gebeurt in die test.]

Evaluatie

Controleer of jouw programma overeenkomt met het resultaat van het filmpje.

Oplossing

De oplossing vind je hier!

file_downloadDownload

cloudScratch-Studio



Zeer goed gedaan! Je wordt nog een echte 'debugger'!