Op deze pagina ga je je Boter-Kaas-en-Eierenproject programmeren zodat overwinning en gelijkspel herkend worden.
Voordat we een manier bedenken om een gewonnen spel te herkennen, moeten we eerst vaststellen op welke
manier je kan winnen. Dit doen we door
elke mogelijkheid voor een gewonnen spel op te slaan door middel van een lijst van drie posities (een
drietal). Dit winnende drietal kan er bijvoorbeeld uit zien als
want het gewonnen drietal is in de
3e, 5e, en 7e
positie:
We gaan nu een lijst maken waarin we alle mogelijkheden zetten waarop je kan winnen. Dit vergelijken we met bord.
We hebben een manier nodig om te achterhalen of er werkelijk een gewonnen drietal is. We gebruiken
map
om iedere positie te checken van een drietal om te kijken of een van de twee spelers wint
met dat drietal.
Je hebt geleerd over map
in
Hoofdstuk 3 Les 1 Pagina 4: Transformeren van alle items in een
lijst.
map
past de functie in de grijze ring toe op elk item in de invoerlijst, en rapporteert
een lijst met alle resultaten.
Bedenk dat het lege invoervak van de functie in de grijze ring de plek is waar een item uit de lijst komt als de functie wordt uitgevoerd.
map
hier?
Deze map
werkt hetzelfde als het voeg samen
voorbeeld hierboven,
maar het is wat ingewikkelder als je erover nadenkt. map
voert elk lijstitem in het lege vakje van de functie in de grijze ring
en rapporteert een lijst met de resultaten, net als voorheen .
Maar nu is de functie in de grijze ring
item ( ) van (
bord )
,
dus map
checkt de items 1, 2, en 3 van de lijst en rapporteert een lijst
met wat er in de drie posities staan.
Als je niet kan zien wat er in de bordvariabele staat, zorg dan dat
het vakje is aangevinkt in het Variabelenpalet. Maak het kijkvenster groot genoeg zodat
je elke lijstitems kan zien, net zoals in het plaatje hieronder.
{1, 2, 3}
niet het drietal is waarin X het spel heeft gewonnen,
vervang dan de lijst in map
met het werkelijke winnende drietal en klik opnieuw op het
blok.
status van drietal
blok met het winnende drietal.
Fix de bugs, als die er zijn.
Je hebt net een blok gebouwd dat voor 1 drietal zal laten zien of een speler alle drie van de posities heeft
gekozen.
Nu ga je een blok, status van alle winnende drietallen
bouwen om diezelfde functie op
alle drietallen toe te passen waarmee een speler kan winnen. Daarna zal je dit blok gebruiken om te
controleren of een van die drietallen drie zetten van dezelfde speler bevat.
Hieronder heeft Speler O bijvoorbeeld gewonnen en het status van alle winnende drietallen
blok
bevat de status van ieder drietal. De computer kan dit blok gebruiken om te controleren of een winnend
drietal alleen X of alleen O bevat.
map
samen met een paar andere blokken die je gebouwd hebt om
status van alle winnende drietallen
te bouwen. Het zou de status van alle winnende
drietallen moeten rapporteren als een lijst met lijsten, zoals hierboven.
map
.
map
gebruikt, denk dan na over:
map
toepast.
gewonnen?
.
Druk het uit in woorden: wat wil je precies controleren?
Zijn er blokken die je daarmee kunnen helpen?
waar
rapporteert
alleen als die speler gewonnen heeft.
De definitie van een gelijkspel is dat er geen lege vakken meer zijn en geen enkele speler gewonnen heeft.
Je kan verder werken aan dit project in Hoofdstuk 5, Optioneel Project: Je boter-kaas-en-eierenproject herzien.