412
Opdracht 13 –
Een game maken: Whack-a-block
Bij de volgende opdracht gaan we een game maken (in het Minecraft spel)! Het is geïnspireerd door het spel Whack-a-Mole, een oud spelletje.
Het spel begint met een muur van steen. Vervolgens veranderen de blokken één voor één in een speciale steen, GlowStone (in het nederlands: GloeiSteen). Daardoor lijkt het dat zo’n blok gaat gloeien.
Het doel van het spel is nu om ieder keer als een blok gaat gloeien het met een zwaard te raken, zodat het blok weer van steen wordt. Dit raken doe je met de rechter muisknop.
Iedere keer dat je een gloeiend blok op tijd raakt, krijg je een punt.
Opdracht 13.
a) Bepaal de positie waar je een muur van 3 bij 3 blokken wilt neerzetten.
b) Bepaal de richting van de speler, zodat hij in de z-richting kijkt.
c) Maak een bestand aan met de naam: Whack-a-Block.py.
d) Maak een script waarbij een muur gebouwd wordt, zoals hieronder:

e) We hebben nu een muur van blokken van steen.
Vervolgens gaan we een aantal variabelen definiëren:
BlokkenAan Deze variabele geeft aan hoeveel blokken gloeien.
Punten Deze variabele geeft aan hoeveel punten je gescoord hebt.
Pauze Het aantal seconden pauze tussen het opgloeien van de blokken

f) Het spel moet blijven draaien, totdat alle stenen gloeien.
We gebruiken hiervoor een loop (spreek uit: loep) die het spel gaande houdt.
We gebruiken een while-loop.
De while-loop hieronder blijft actief totdat alle 9 blokken van de muur verandert zijn in GlowStone.

We gebruiken hierboven een nieuwe functie:
time.sleep(seconden)
Deze functie zorgt ervoor dat het script een aantal seconden pauzeert.
g) Nu kiezen we blokken uit de muur, die we van gewoon steen veranderen in GlowStone. Om zo maar een blok te kiezen, gebruiken we de toevalsgenerator, de functie:
random.randint(start, eind)
We gebruiken ook een variabele:
GloeiAan Deze geeft aan of een steen gloeit of niet.

(De x en y positie variëren, de z positie blijft altijd gelijk.)
Een blok is gekozen. Nu willen we weten of dit blok van gewoon steen is of misschien al van GlowStone. Hiervoor gebruik je de functie:
mc.getBlock(x, y, z)
Deze functie geeft aan welk soort blok er staat op positie x, y, en z.
Als het blok een steen is, dan verander je het in GlowStone:

h) We willen nu weten welk blok geraakt is door de speler. In Minecraft noem je dat een hit-event (spreek uit: hit-ievent).
Daarvoor gebruik je de functie:
mc.events.pollBlockHits()

De variabele hitBlock geeft aan welk blok geraakt is.
i) Nu weet je welk blok geraakt is. Je wilt vervolgens weten of het blok al gloeit of niet. Als het gloeit, dan verander je het blok weer in gewoon steen en heb je een punt gescoord.

j) De while-loop blijft lopen totdat alle blokken gloeien. Dan is het spel voorbij en geef je de punten weer:

k) Verander nu de pauze-tijd, zodat het spel sneller gaat.
l) EXTRA UITDAGING:
Kijk of je het spel steeds sneller kan laten lopen, naarmate je meer punten hebt gescoord. Deze regels horen aan het einde van de eerste while-loop:
