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

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å”

Screen Shot 2016-06-16 at 10.29.10

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…

Screen Shot 2016-06-16 at 10.31.48

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å

Screen Shot 2016-06-16 at 10.32.56

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

Screen Shot 2016-06-16 at 10.34.01

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

Screen Shot 2016-06-16 at 10.36.00

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.