Villkor – kör bara koden om något stämmer

Den här guiden publicerades 2016. På Internetstiftelsens öppna lärresurs Digitala lektioner hittar du som är lärare färdiga lektionspaket i Scratch för grundskolans olika stadier, fria att använda!

Väldigt ofta vill du att ett block eller ett helt script bara ska köras om något annat händer, eller bara om en variabel har ett visst värde. Du kanske har gjort ett spel och vill att något ska hända varje gång du trycker på mellanslagstangenten, eller så vill du ge spelaren minuspoäng om en sprite träffar en annan. Det finns flera sätt att hålla koll på att saker körs bara under vissa förutsättningar, och det handlar om villkor.

Under kategorin ”Kontroll” ligger alla block som hjälper dig att bara köra script när vissa förutbestämda saker inträffat. Det viktig­aste och mest använda av dem heter ”om < > då”. Det du kan göra med det blocket är att först kolla efter något – till exempel värdet på en variabel – och endast om det stämmer med vad du vill, gå vidare och köra de block som ligger inuti ”om < > då”. Som du ser har ”om < > då” en diamantformad ruta i mitten. Det finns nämligen ett antal block i Scratch som är just diamantformade, och det är bara de som passar att lägga till i ”om < > då”.

Blocket "om < > då"


Du kan fundera på några exempel på när det vore intressant att hålla koll på ett villkor. Exempelvis om du vill att ditt spel med katten ska ta slut när man fått 10 poäng. Då skulle du kunna använda blocket ”om < > då” för att säga något i stil med ”OM (värdet på variabeln poäng = 10) DÅ … gör nånting!” Men hur kollar du då om värdet på din variabel är tio? Det här kräver ett antal steg. Titta först under den gröna kategorin ”Operatorer”. Här finns massor av block, men det du behöver för att jämföra två värden är just diamantformat och heter ”[] = []”:

Operatorn "[] = []”

Screen Shot 2016-06-16 at 10.30.20
Som du ser kan du skriva in egna värden här, men det är ju ganska meningslöst att skriva in två fasta värden. Riktigt användbart är detta block för att du kan släppa ett variabelblock i ena hålet. Titta under kategorin ”Data” så ser du att vår variabel ”poäng” har ett helt eget, ovalt orange block där. Det blocket passar i endera hålet i det gröna operatorblocket, och det blocket i sin tur passar i det gula ”om < > då”:

Variabelblock inuti operatorblock inuti kontrollblock...


Nu kan du skriva in siffran ”10” i det högra hålet, och plötsligt har du en kombination av block som tillsammans bildar ett villkor. Om poäng = 10, då ska någonting hända.

Om poäng = 10 då


För att använda den här blockkombinationen måste du lägga den i ett script som körs. I ditt spel kan du lägga den i ett nytt script, och för att det ska kollas hela tiden behöver du lägga det i en loop som körs för alltid:

Script för att kolla om poäng = 10


Det här scriptet kommer att börja köras när den gröna flaggan klickas på, och loopen som körs ”för alltid” ser till att Scratch hela tiden kollar om poäng är 10, och då… Ja, vadå? Än så länge är det tomt inuti vårt villkorsblock. Du kan väl spela en liten fanfar för spelaren? En sån tur att du redan laddat in ljudet ”guitar strum”!

Det finns ett annat block för att spela upp ljud som är användbart här. Det heter ”spela ljudet [] tills färdigt”, men eftersom Scratch ­gissar att du troligen vill använda det senaste ljudet som laddats in är ditt nya ljud redan förvalt, så det står ”spela ljudet [guitar strum] tills färdigt” på det just nu. Det fina med det blocket är att det spelar upp ljudet och väntar snällt tills ljudet har spelat klart. Dra in det blocket och lägg det inuti ditt villkor:

Släpp ljudblocket inuti vilkorsblocket


De block som ligger inuti vårt villkorsblock är ju de som kommer att köras bara när villkoret är uppfyllt. Om du skulle lägga det här ljudblocket utanför villkorsblocket skulle det köras ”för alltid” och det skulle bli en hel gitarrkonsert under spelets gång i stället för bara när spelaren vunnit.

Nu kan du testa att köra spelet igen. När du fått tio poäng börjar gitarren att spela. Men som du hör slutar den aldrig, utan spelar om och om igen. Det är nämligen precis vad du sagt åt Scratch att göra. Om poäng = 10 då ska ljudet spelas. Eftersom villkoret ligger inne i en loop som körs ”för alltid” kommer villkoret att vara sant så länge poängen är tio.

Det kanske vore bra om ljudet spelades, och sen fick spelaren börja om spelet från början igen? Du kan lägga till en liten paus också, så att spelaren hinner förstå vad som händer. Och katten kan väl säga ”Grattis, du vann”? Du fortsätter att bygga inuti villkorsblocket.

Under kategorin ”Kontroll” finns blocket ”vänta (1) sekunder”. Dra in det blocket och lägg det efter ”spela ljudet [guitar strum] tills ­färdigt”. Ändra så att Scratch väntar tre sekunder i stället.

Vänta tre sekunder efter att ljudet spelats färdigt


Nu spelar Scratch alltså ett ljud och väntar tre sekunder när spelaren når tio poäng. Nu vill du att katten ska berätta för spelaren att hon eller han vunnit spelet, och för det ändamålet har Scratch fina pratbubblor inbyggda. Under kategorin ”Utseende” finns det lila blocket ”säg [] i () sekunder”.

Ändra texten från ”Hello!” till ”Grattis, du vann!” genom att klicka i den vita rutan och markera texten. Och ändra antalet sekunder till fyra så spelaren hinner läsa.

Scratch har spelat ljudet, väntat några sekunder och sen låtit katten säga att spelaren vunnit. Men för att ditt villkor ska sluta vara sant hela tiden och därmed bara fortsätta att köra blocken inuti om och om igen måste du se till att variabeln poäng inte längre är tio. Under kategorin ”Data” finns det orange blocket ”Sätt [] till []”:

Blocket "sätt [] till []”


Just nu är det redan ifyllt på just det vis du vill, nämligen att ­variabeln ”poäng” ska sättas till noll, så dra in det här blocket och lägg det sist inuti ditt villkorsblock. Det här blocket kan du annars använda för att sätta vilken variabel som helst till vilket värde som helst, så det är ett mycket användbart block.

Nu har du gjort klart scriptet som sköter spelets slut:

Det färdiga ­villkorsscriptet

Testa ditt spel nu, och se vad som händer när poängen når tio. Du får en liten trudelutt, katten säger att du vunnit och sen börjar det om igen eftersom poängen sätts till noll.