7 · Doolhof met levels

Je tekent zélf een doolhof, stuurt een speler door de gangen en zorgt dat de muren hem écht tegenhouden. Daarna maak je er een spel van meerdere levels van: haal je de finish, dan stuurt Scratch een bericht rond, wisselt de achtergrond en begin je opnieuw in een nieuw doolhof. Onderweg maak je je eerste eigen blok — een blok dat jij zelf verzint en dat op drie plaatsen werk voor je doet. Dit is de eerste opdracht waarin je project uit meerdere sprites én meerdere scripts per sprite bestaat.

★★★ pittig 18 stappen ongeveer 90 minuten

Wat leer je?

  • Een achtergrond zelf tekenen met muren in één vaste kleur
  • Botsingen herkennen met raakt kleur ...? en de kleur exact pipetteren
  • Vloeiend besturen met toets ... ingedrukt? in een lus
  • De timer gebruiken om te meten hoe snel je bent
  • Sprites laten praten met zend signaal en wanneer ik signaal ... ontvang
  • Een eigen blok maken in Mijn Blokken en het overal hergebruiken

Wat heb je nodig?

  • Een nieuw, leeg Scratch-project
  • Een kleine sprite als speler — bijvoorbeeld Ball of Beetle
  • Een tweede sprite als finish — bijvoorbeeld Star of Button3
  • Twee zelfgetekende achtergronden (die maak je in stap 1 en stap 12)
  • Geduld met je muis: dit is de eerste opdracht waarin je écht tekent

De teken-editor niet meer vers in je hoofd? Kijk even bij De werkplek.

Stap voor stap

Je werkt in dit project met twee sprites én met het speelveld (dat is de achtergrond — die heeft ook zijn eigen codegebied). Boven elk script staat daarom altijd wie het krijgt. Klik dat eerst aan, anders bouw je op de verkeerde plek. Vink een stap af als hij klaar is; je browser onthoudt dat.

1

Teken je doolhof — muren in één vaste kleur

Uiterlijk

Klik rechtsonder op het speelveld (het witte vierkantje onder je sprites) en dan bovenaan op het tabblad Achtergronden. Je krijgt de teken-editor. Kies onderaan Omzetten naar bitmap — dat maakt het straks veel makkelijker om netjes te vullen. Teken nu met de rechthoek-tool een doolhof: dikke balken die gangen vormen, met een opening linksonder (daar start je) en een opening rechtsboven (daar komt de finish).

Het allerbelangrijkste: al je muren moeten exact dezelfde kleur hebben. Kies één kleur in het paletje, teken al je rechthoeken, en gebruik de vulemmer om een muur die er per ongeluk anders uitziet weer bij te kleuren. Onthoud welke kleur je koos — bijvoorbeeld dit donkerblauw:

raakt kleur ?
Waarom dikke muren? Je speler springt straks met sprongetjes van 4 pixels vooruit. Is je muur maar 2 pixels dun, dan staat je speler het ene moment ervóór en het volgende moment eráchter — Scratch heeft dan nooit gezien dat hij de muur raakte. Teken je balken minstens 10 pixels dik, dan kan dat niet gebeuren. Maak je gangen ook ruim: minstens twee keer zo breed als je speler.
Waarom één kleur? Scratch herkent geen "muren". Hij kan alleen kijken of jouw sprite een bepaalde kleur raakt. Al je muren dezelfde kleur geven is dus geen schoonheidsregel maar een technische voorwaarde. Twee tinten donkerblauw die er voor jouw ogen identiek uitzien, zijn voor Scratch twee totaal verschillende kleuren.
  • Mijn doolhof staat op het speelveld en alle muren hebben één kleur
2

Zet je speler klaar — en maak hem klein

Uiterlijk

Verwijder de kat en voeg een kleine, ronde sprite toe: Ball werkt perfect. Zet die meteen op 30 % met "maak grootte 30 %". Klik daarna één keer op de sprite in het speelveld en sleep hem in een gang — past hij er ruim door, dan is 30 % goed. Past hij er nauwelijks door, zet dan 20 %.

Sprite: Speler

als wordt aangeklikt
maak grootte 30 %
Waarom klein? Een doolhof draait om precies sturen. Een grote sprite raakt in een smalle gang links én rechts tegelijk de muur en wordt dan eindeloos teruggezet naar de start — je komt geen meter vooruit. Vuistregel: je speler moet ruim half zo breed zijn als je smalste gang. Hernoem je sprite ook meteen naar Speler (klik op het naamveld boven de sprite-tegels): in elk script hierna staat die naam.
  • Mijn sprite heet Speler en past ruim door de gangen
3

Leg de startplek vast

Beweging

Sleep je speler met de muis naar de opening linksonder in je doolhof. Kijk nu onder het speelveld: daar staan de x en y die bij die plek horen. Neem die twee getallen over in een "ga naar x: ... y: ..."-blok onder je hoedblok. In de voorbeelden hieronder gebruiken we x: -200 en y: -150; vul gerust jouw eigen getallen in.

Sprite: Speler

als wordt aangeklikt
maak grootte 30 %
ga naar x: -200 y: -150
Waarom vaste getallen en geen "ga naar willekeurige positie"? Omdat je die startplek nog drie keer nodig hebt: bij de start, na elke botsing met een muur, en bij het begin van level 2. Als die drie plekken niet exact hetzelfde zijn, verschijnt je speler soms midden in een muur en zit hij vast. Schrijf je twee getallen ergens op — of beter nog: onthou ze, want in stap 16 zet je ze in je eigen blok.
  • Mijn speler start altijd op precies dezelfde plek
4

Besturing met de vier pijltjestoetsen

Besturing

Sleep een "herhaal voortdurend" onder je startblokken. Zet daar vier "als ... dan"-blokken in. In elk zeshoekje komt "toets ... ingedrukt?" uit Waarneming, met telkens een ander pijltje in het lijstje. In de mond zet je "verander x met ..." of "verander y met ..." uit Beweging.

Sprite: Speler

als wordt aangeklikt
maak grootte 30 %
ga naar x: -200 y: -150
herhaal voortdurend
als toets pijltje rechts ingedrukt? dan
verander x met 4
als toets pijltje links ingedrukt? dan
verander x met -4
als toets pijltje omhoog ingedrukt? dan
verander y met 4
als toets pijltje omlaag ingedrukt? dan
verander y met -4
Waarom niet het hoedblok "wanneer op toets ... gedrukt wordt"? Dat blok voelt logischer, maar het werkt als een tekstverwerker: eerst één stapje, dan een pauze, dan pas herhalen. Je speler schokt. Met "toets ... ingedrukt?" in een lus kijkt Scratch tientallen keren per seconde opnieuw, en beweegt je speler vloeiend zolang je de toets vasthoudt.
Waarom vier losse als-blokken en geen als/anders? Zo kan je schuin lopen: druk je omhoog én rechts tegelijk, dan zijn beide voorwaarden waar en gebeuren beide bewegingen. Met als/anders zou altijd maar één richting tegelijk kunnen.
  • Mijn speler loopt met de vier pijltjes alle kanten op

Testmoment — stuurt je speler soepel?

controle

Klik op de groene vlag en rijd je speler door de gangen. Hij mag nu nog dwars door de muren — dat komt in stap 6. Werkt de besturing niet? Loop deze lijst af:

  • Klik eerst één keer op het speelveld voor je de pijltjes gebruikt, anders luistert je browser nog niet naar Scratch.
  • Zitten de vier als-blokken écht in de mond van "herhaal voortdurend"? Sleep het hoedblok een stukje: alles hoort mee te komen.
  • Beweegt je speler maar één stapje en dan niet meer? Dan zweeft "herhaal voortdurend" los, of staan de als-blokken eronder in plaats van erin.
  • Gaat hij de verkeerde kant op? Verwissel de 4 en de -4. Onthoud: x groter = naar rechts, y groter = naar boven.
  • Te traag of te snel? Speel met het getal: 3 is rustig, 6 is pittig. Groter dan 8 wordt onspeelbaar, want dan spring je straks door je muren heen.
  • Mijn speler laat zich vlot besturen in alle vier de richtingen
6

Muren die je écht tegenhouden

Waarneming

Sleep uit Waarneming het blok "raakt kleur ... ?" in het zeshoekje van een nieuw "als ... dan", en zet dat als laatste blok in je grote lus — onder de vier toetscontroles. In de mond zet je hetzelfde "ga naar x: ... y: ..." als bij je start.

Nu het belangrijkste trucje van deze hele opdracht: de kleur pipetteren. Klik in het blok op het gekleurde vakje. Er klapt een paneeltje open met drie schuifjes en — helemaal onderaan — een pipet-knopje. Klik daarop: je muispijl wordt een vergrootglas. Klik daarmee midden op een muur in je speelveld. Het vakje neemt precies die kleur over.

Sprite: Speler — onderaan in de grote lus

als raakt kleur ? dan
ga naar x: -200 y: -150
Waarom pipetteren en niet zelf een kleur kiezen? Omdat je scherm liegt. Twee blauwtinten die er identiek uitzien kunnen #3b4160 en #3b4161 zijn — en dat verschil van één cijfertje maakt dat Scratch je muur nooit herkent. De pipet leest de kleur van het échte pixel op je speelveld. Dat is de enige manier om zeker te zijn.
Waarom onderaan in de lus? De volgorde in de lus is: kijk naar de toetsen → verplaats → kijk of je in een muur staat → zo ja, terug naar start. Zou je de kleurcontrole bovenaan zetten, dan verplaats je ná de controle en zie je één beeldje lang je speler in de muur staan. Klein verschil, maar het voelt meteen minder strak.
  • Raak ik een muur, dan sta ik meteen terug aan de start

Testmoment — houden de muren echt tegen?

controle

Klik op de vlag en rijd expres tegen elke muur van je doolhof. Bij élke muur hoor je terug te springen naar de start. Doet hij dat niet? Dit zijn de vier klassiekers:

  • Er gebeurt helemaal niets. Je kleur klopt niet. Klik het kleurvakje open, pak de pipet en klik opnieuw — nu écht midden op een muur, niet op de rand ervan (daar zitten halfdoorzichtige tussenkleurtjes).
  • Bij de ene muur wel, bij de andere niet. Je muren hebben niet allemaal dezelfde kleur. Ga terug naar het tabblad Achtergronden en klik met de vulemmer in je muurkleur op elke muur die niet meedoet.
  • Je speler wordt onmiddellijk teruggezet, altijd. Je startpositie ligt zelf in of tegen een muur. Sleep je speler naar een echt vrije plek, lees de nieuwe x en y af en pas ze aan — op beide plaatsen waar ze staan.
  • Je speler schiet door dunne muren heen. Je stapgrootte is te groot of je muur te dun. Zet de 4 op 3, of teken die muur dikker.
  • Elke muur in mijn doolhof houdt me tegen
8

Zet de finish neer

Uiterlijk

Voeg een tweede sprite toe — Star is een klassieker — en hernoem hem naar Finish. Sleep hem naar de opening rechtsboven in je doolhof, lees x en y af en geef hem zijn eigen kleine startscript. Zo staat de finish élke ronde op dezelfde plaats, ook als je hem tijdens het bouwen per ongeluk verschuift.

Sprite: Finish

als wordt aangeklikt
maak grootte 50 %
ga naar x: 200 y: 150
Waarom een sprite en geen getekende vlek? Een getekende finish zou je moeten herkennen met "raakt kleur", en dan heb je opeens twee kleuren die je uit elkaar moet houden. Een aparte sprite herken je met "raakt Finish?" — veel duidelijker, én je kan hem straks met één blok naar een andere plek sturen voor level 2.
  • Mijn finish-sprite staat aan het eind van het doolhof
9

Merk op dat je de finish haalt

Waarneming

Terug naar de sprite Speler. Zet helemaal onderaan in je grote lus nog een "als ... dan", met in het zeshoekje "raakt Finish ?" uit Waarneming. Voor nu laat je hem gewoon juichen en stopt het script. In stap 13 vervangen we die binnenkant door de level-logica — eerst zorgen we dat het herkennen zelf werkt.

Sprite: Speler — onderaan in de grote lus

als raakt Finish ? dan
zeg Gehaald! gedurende 1 seconden
stop dit script
Waarom "stop dit script" en niet "stop alles"? "Stop dit script" legt alleen dít stapeltje stil — de andere sprites blijven gewoon draaien. Dat heb je zo dadelijk nodig: bij level 2 mag wél alles doorlopen. Merk ook op dat "stop" geen nokje onderaan heeft: er kan niets meer achter komen, want daarna gebeurt er niets meer.
Bouwen in kleine brokjes. Je had de level-logica meteen kunnen intypen, maar dan weet je bij een fout niet of het aan het herkennen of aan de logica ligt. Eerst één ding laten werken, testen, en dán uitbreiden — zo werken echte programmeurs ook.
  • Mijn speler juicht als hij de finish raakt
10

Zet de timer op nul bij de start

Waarneming

Scratch heeft een ingebouwde klok die altijd doorloopt: de timer. Je hoeft er geen variabele voor te maken. Sleep uit Waarneming het blok "zet timer op nul" naar boven in je startblokken, vlak onder "ga naar x: ... y: ...". Zet in de blokkenlijst ook het vinkje aan naast het ronde blokje timer — dan verschijnt de klok linksboven op je speelveld.

Sprite: Speler — bij de startinstellingen

als wordt aangeklikt
maak grootte 30 %
ga naar x: -200 y: -150
zet timer op nul
timer
Waarom moet dat op nul? De timer van Scratch start zodra je de editor opent en stopt nooit meer. Zonder "zet timer op nul" begint je eerste ronde dus op 412 seconden. Het blok is een startinstelling, net als je positie en je grootte: het hoort boven de lus, en het hoort maar één keer per spel te gebeuren.
Timer of variabele? Een variabele die je zelf met "verander tijd met 1" laat oplopen, telt lussen — en die lopen op een snelle computer sneller dan op een trage. De timer telt échte seconden en is bij iedereen gelijk. Voor tijdmeten kies je dus altijd de timer.
  • De timer staat op mijn speelveld en begint bij nul

Testmoment — speel level 1 helemaal uit

controle

Klik op de vlag en probeer je doolhof uit te spelen van start tot finish. Doe het drie keer en kijk naar je tijd. Loop daarna deze lijst af:

  • Is je doolhof haalbaar? Zit er echt een gang van start tot finish, of heb je jezelf ingemetseld? Ga desnoods terug naar Achtergronden en gum een muurtje weg.
  • Is het te makkelijk? Voeg een paar doodlopende zijgangen toe. Een doolhof zonder verkeerde keuzes is gewoon een gang.
  • Springt je speler bij het terugzetten meteen weer in de muur? Kies een startplek die iets verder van de muren ligt.
  • Loopt de timer? Zo niet: staat het vinkje bij timer aan in de blokkenlijst?
  • Laat een klasgenoot spelen zonder uitleg. Snapt hij binnen vijf seconden wat de bedoeling is? Zo niet, maak de finish groter of geef hem een fellere kleur.
  • Level 1 is uitspeelbaar, uitdagend en de tijd loopt mee
12

Teken een tweede doolhof

Uiterlijk

Klik op het speelveld, tabblad Achtergronden. Klik met de rechtermuisknop op je achtergrond in de lijst links en kies dupliceren. Je hebt nu twee achtergronden. Hernoem ze bovenaan naar level 1 en level 2. Verbouw daarna de kopie: gum gangen weg, teken nieuwe muren, maak het moeilijker. Twee regels blijven heilig: dezelfde muurkleur, en de start linksonder moet vrij blijven.

Waarom dupliceren en niet opnieuw tekenen? Omdat je kopie automatisch exact dezelfde muurkleur heeft. Teken je level 2 van nul, dan pak je bijna zeker een piepklein beetje andere tint — en dan werkt je "raakt kleur" alleen in level 1. Dupliceren is hier geen luiheid maar veiligheid.
Waarom hernoemen? Straks kies je de achtergrond in een dropdownlijstje. "level 1" en "level 2" lees je in één oogopslag; "achtergrond1" en "achtergrond2" verwissel je gegarandeerd. Goede namen zijn code die zichzelf uitlegt.
  • Ik heb twee achtergronden: level 1 en level 2
13

Zend het signaal "level 2"

Gebeurtenissen

Je speler moet weten in welk level hij zit. Maak daarom in Variabelen een variabele level (voor alle sprites) en zet ze bij de start op 1. Vervang daarna de binnenkant van je "als raakt Finish? dan" door de logica hieronder: zit je in level 1, dan ga je naar level 2; zit je al in level 2, dan heb je gewonnen. Het blok "zend signaal ..." vind je in Gebeurtenissen — klik in het lijstje op Nieuw signaal en maak er twee: level 2 en gewonnen.

Sprite: Speler — bij de startinstellingen

maak level 1

Sprite: Speler — onderaan in de grote lus

als raakt Finish ? dan
als level = 1 dan
maak level 2
zend signaal level 2
ga naar x: -200 y: -150
anders
zend signaal gewonnen
stop dit script
Wat doet "zend signaal" eigenlijk? Het is een omroepbericht. De sprite die het zendt, roept iets over het hele project heen; élke sprite (en ook het speelveld) die een hoedblok "wanneer ik signaal ... ontvang" heeft staan, start op dat moment zijn script. De zender hoeft niet te weten wie er luistert — en dat is precies de bedoeling. Zo hoeft je speler niets af te weten van achtergronden.
Waarom eerst "maak level 2" en dan pas zenden? Volgorde is alles. Zet je het zenden bovenaan, dan kan de lus nog één keer rondgaan terwijl level nog op 1 staat, en stuur je het bericht twee keer. En waarom staat "ga naar x: ... y: ..." er meteen onder? Om je speler weg te halen van de finish. Blijft hij daar staan, dan is "raakt Finish?" een fractie later nog steeds waar — en dan stuurt hij meteen ook "gewonnen".
  • Bij de finish springt level op 2 en gaat het signaal de deur uit
14

Vang het signaal op: achtergrond en finish verhuizen

Gebeurtenissen

Een bericht zenden is nutteloos als niemand luistert. Klik eerst op het speelveld en geef het twee losse scripts: één dat bij de start altijd terugzet naar level 1, en één dat op het signaal reageert. Geef daarna ook de sprite Finish een ontvanger, zodat hij in level 2 op een andere plek staat.

Speelveld (Achtergronden)

als wordt aangeklikt
wissel achtergrond naar level 1
wanneer ik signaal level 2 ontvang
wissel achtergrond naar level 2

Sprite: Finish

wanneer ik signaal level 2 ontvang
ga naar x: 0 y: 150
Waarom "wissel achtergrond naar level 1" bij de start? Speel je een tweede ronde, dan staat je speelveld nog op level 2. Zonder dit blok begin je dus in het moeilijke doolhof met level op 1 — een spel dat elke ronde anders werkt. Alles wat je project bij de start in de goede toestand zet, hoort onder een groenevlag-hoedblok. Ook voor het speelveld.
Twee hoedblokken bij dezelfde sprite? Dat mag, en het is hier zelfs de bedoeling. Elk hoedblok is een apart startpunt. Een sprite mag er zoveel hebben als je wil — ze wachten gewoon allemaal op hun eigen gebeurtenis.
  • Bij de finish wisselt de achtergrond en verhuist de finish mee

Testmoment — komt de overgang naar level 2 goed?

controle

Klik op de vlag en speel level 1 uit. Het beeld hoort in één klap te wisselen: nieuw doolhof, speler terug bij de start, teller level op 2. Klopt er iets niet?

  • De achtergrond wisselt niet. Staat je ontvanger-script wel bij het speelveld en niet per ongeluk bij een sprite? Klik het speelveld aan en kijk of je script er staat.
  • Het signaal in het dropdownlijstje heet iets anders. "level2" en "level 2" zijn voor Scratch twee verschillende berichten. Kies in beide blokken hetzelfde uit het lijstje — typ het niet over.
  • Level springt meteen van 1 naar 2 naar "gewonnen". Dan blijft je speler op de finish staan. Controleer of "ga naar x: ... y: ..." écht in de dan-tak staat, ná het zenden.
  • De speler zit vast in een muur van level 2. Je nieuwe doolhof heeft een muur op de startplek. Gum daar een gaatje.
  • De finish staat in level 2 middenin een muur. Sleep hem naar een vrije plek, lees x en y af en pas het ontvanger-script aan.
  • De overgang naar level 2 verloopt vlekkeloos
16

Maak je eigen blok: "reset speler"

Mijn Blokken

Kijk eens naar je script: "ga naar x: -200 y: -150" staat er nu drie keer in. Verander je ooit je startplek, dan moet je drie blokken aanpassen — en vergeet je er eentje, dan zoek je een uur naar de fout. Dat lossen we op met een eigen blok.

Klik onderaan de blokkenlijst op de roze categorie Mijn Blokken en dan op Maak een blok. Typ als naam reset speler en klik op OK. Er verschijnt een roze hoedblok in je codegebied: definieer reset speler. Alles wat je daaronder hangt, is voortaan de inhoud van jouw blok.

Sprite: Speler — de definitie

definieer reset speler
ga naar x: -200 y: -150
maak grootte 30 %
zet grafische effecten uit
wijs in richting 90

In de blokkenlijst staat nu een roze blok reset speler. Sleep dat op de drie plekken waar je speler moet herstellen: bovenaan bij de start, in je muur-botsing, en in de dan-tak van je level-wissel. Gooi de blokken die je vervangt weg.

Sprite: Speler — zo gebruik je het

als wordt aangeklikt
reset speler
maak level 1
zet timer op nul
als raakt kleur ? dan
reset speler
Wat wint je hiermee? Drie dingen. Eén: verander je je startplek, dan pas je nog maar één blok aan. Twee: je script wordt leesbaar — "reset speler" vertelt wát er gebeurt, terwijl "ga naar x: -200 y: -150" alleen vertelt hóé. Drie: je kan er later gratis iets bij stoppen (een geluidje, een flits) en dat werkt dan meteen op alle drie de plekken. Zo'n eigen blok heet in echte programmeertalen een functie, en het is een van de belangrijkste ideeën uit het hele vak.
Waarom staan die effecten en die richting erin? Voor nu doen ze niets, maar zodra je in de uitdagingen een kleurflits of een draaiing toevoegt, moet die weer netjes uit bij een reset. Een reset-blok dat álles herstelt is een blok waar je nooit meer aan hoeft te denken.
  • Mijn eigen blok "reset speler" staat op drie plaatsen in gebruik
17

Het eindscherm met je tijd

Operatoren

Nu maak je het af. Geef je speler een derde hoedblok: "wanneer ik signaal gewonnen ontvang". Daaronder laat je hem je tijd voorlezen. Daarvoor plak je stukjes tekst aan elkaar met voeg ... en ... samen uit Operatoren — en omdat de timer iets als 37.284 seconden teruggeeft, wikkel je hem in afgerond.

Sprite: Speler

wanneer ik signaal gewonnen ontvang
zeg voeg Beide levels gehaald in en voeg afgerond timer en seconden! samen samen gedurende 5 seconden
stop alles
Twee samenvoeg-blokken in elkaar? "Voeg ... en ... samen" plakt precies twee stukjes aan elkaar. Wil je er drie ("Beide levels gehaald in " + het getal + " seconden!"), dan stop je het ene samenvoeg-blok in het andere. Let op de spaties in je tekstvakjes: zonder spatie krijg je "gehaald in37seconden".
Waarom nu wél "stop alles"? Omdat het spel echt afgelopen is. "Stop alles" legt élk script van élke sprite stil, ook de besturingslus — anders zou je na je overwinning nog vrolijk door het doolhof blijven rijden. Zet het als laatste blok, want er kan niets meer achter.
  • Bij het winnen zie ik hoeveel seconden ik nodig had

Eindtest — speel je doolhof twee keer helemaal uit

controle

Speel beide levels uit tot je het eindscherm ziet. Klik daarna meteen opnieuw op de vlag en speel een tweede ronde. Alles moet dan weer volledig van voren af aan beginnen. Controleer:

  • Begint ronde twee echt met achtergrond level 1, level = 1, de speler linksonder én de timer op nul? Ontbreekt er iets, dan mist er een blok bij je startinstellingen — of bij die van het speelveld.
  • Staat de finish in ronde twee weer op zijn oude plek rechtsboven? Zo niet: het startscript van de Finish-sprite ontbreekt.
  • Kan je na "Beide levels gehaald" nog rondrijden? Dan staat "stop alles" niet als laatste blok, of staat er "stop dit script".
  • Klopt de tijd ongeveer met je gsm-chronometer? Zo niet: "zet timer op nul" staat waarschijnlijk in de lus in plaats van erboven.
  • Klik op het volledige-scherm-knopje boven het speelveld en laat een klasgenoot spelen. Snapt hij zonder uitleg wat hij moet doen? Dat is de echte test.
  • Mijn opdracht 7 is af — twee levels, uitspeelbaar en herspeelbaar

Het volledige script

Zo ziet je afgewerkte project eruit. Let goed op: het zijn zes scripts, verdeeld over twee sprites en het speelveld. Vergelijk ze met wat er op jouw scherm staat.

Sprite: Speler — het hoofdscript

als wordt aangeklikt
reset speler
maak level 1
zet timer op nul
herhaal voortdurend
als toets pijltje rechts ingedrukt? dan
verander x met 4
als toets pijltje links ingedrukt? dan
verander x met -4
als toets pijltje omhoog ingedrukt? dan
verander y met 4
als toets pijltje omlaag ingedrukt? dan
verander y met -4
als raakt kleur ? dan
reset speler
als raakt Finish ? dan
als level = 1 dan
maak level 2
zend signaal level 2
reset speler
anders
zend signaal gewonnen
stop dit script

Sprite: Speler — je eigen blok

definieer reset speler
ga naar x: -200 y: -150
maak grootte 30 %
zet grafische effecten uit
wijs in richting 90

Sprite: Speler — het eindscherm

wanneer ik signaal gewonnen ontvang
zeg voeg Beide levels gehaald in en voeg afgerond timer en seconden! samen samen gedurende 5 seconden
stop alles

Sprite: Finish — twee scripts

als wordt aangeklikt
maak grootte 50 %
ga naar x: 200 y: 150
wanneer ik signaal level 2 ontvang
ga naar x: 0 y: 150

Speelveld (Achtergronden) — twee scripts

als wordt aangeklikt
wissel achtergrond naar level 1
wanneer ik signaal level 2 ontvang
wissel achtergrond naar level 2
De klassieke beginnersfout Bij deze opdracht gaat het bijna altijd mis op één plek: de kleur in "raakt kleur ...?". Bijna iedereen klikt het kleurvakje open en schuift de regelaars tot het "hetzelfde blauw" lijkt. Dat werkt nooit. Scratch vergelijkt geen tinten die op elkaar lijken, hij vergelijkt exacte waarden — en jouw oog ziet het verschil tussen twee bijna-identieke blauwtinten simpelweg niet. Gebruik altijd de pipet onderaan het paneeltje en klik daarmee midden op een muur in je speelveld, nooit op de rand (daar zitten halfdoorzichtige overgangspixels) en nooit op een afbeelding buiten Scratch. Tweede valkuil van dezelfde soort: je speler heeft een witte rand of schaduw die net over de muur schuift zonder dat de muurkleur geraakt wordt. Kies dan een sprite met een strakke, effen vorm. En de derde: je stapgrootte is groter dan je muur dik is — dan teleporteert je speler over de muur heen zonder hem ooit aan te raken. Dikke muren, kleine stapjes.

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

Een sleutel voor de deur

makkelijk

Voeg een derde sprite toe: een sleutel ergens in een doodlopende zijgang. De finish telt pas als je die eerst hebt opgepikt. Tip: je hebt een variabele sleutel nodig die op 0 begint en op 1 springt zodra je hem raakt — en een "en"-blok in je finish-controle. Laat de sleutel zichzelf verbergen als hij opgepikt is, en vergeet niet hem bij de start weer te tonen.

B

Level 3, 4 en 5

middel

Breid je spel uit naar vijf levels. Doe het slim: in plaats van vijf keer "als level = ... dan" gebruik je één keer "verander level met 1" en daarna "wissel achtergrond naar volgende achtergrond". Tip: dat laatste blok staat in het dropdownlijstje van "wissel achtergrond naar". Je hoeft dan nog maar op één plaats te controleren of je bij het laatste level bent aangekomen.

C

Een bewaker die patrouilleert

pittig

Zet een vijand in het doolhof die eindeloos heen en weer glijdt tussen twee punten. Raak je hem, dan sta je terug bij de start én verlies je een leven. Tip: gebruik "herhaal voortdurend" met twee keer "schuif in 2 seconden naar x: ... y: ...". Extra pittig: laat je speler bij een botsing eerst rood knipperen met "verander kleur effect met 25" voor je hem reset — en merk dan hoe fijn het is dat je eigen blok "reset speler" die effecten alweer opruimt.

Vorige opdracht 8 · Pong tegen de computer