Ditt första program - Du säger hej till katten Scratch

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!

Katten Scratch


Katten är bara en av väldigt många olika figurer som följer med programmet, men eftersom han står där mitt på scenen redan när edit­orn öppnas kan du ju börja med att se till att han har något att göra.

I den här övningen kommer du använda ett par olika block för att få katten att springa över skärmen och dessutom jama när du klickar på honom med muspekaren. Kanske inte världens roligaste program, men du kommer att lära dig ett par grundläggande saker innan du börjar lära dig mer om de olika kategorierna av script-block.

Infoknappen finns på varje sprite

infoknap
Varje sprite kan finnas på två ställen när den laddats in i Scratch. Katten, som är laddad från början, står dels mitt på scenen, dels återfinns han längre ner på skärmen, i sprite-listan där alla dina laddade sprites alltid ligger. I övre vänstra hörnet av varje sprite i listan finns en blå rund info-knapp. Här klickar du för att ställa olika egenskaper för en sprite, så klicka på den nu för att se alternativen för katten, eller "Sprite1" som den heter just nu.

Inställningar för sprite


I rutan som visas nu kan du se några olika detaljer för just den sprite du klickade på, en instans av katten Scratch. Först och främst går det att döpa en sprite till något som går lättare att känna igen, om du vill. Under namnet finns några värden: x, y och riktning. X och y är spritens position på scenen, och från allra första början när katten står mitt på scenen är dess position X:0 och Y:0. Du kommer att lära dig mer om positioner i koordinater senare, men nästa värde, ­”riktning”, är viktigt redan nu.

Riktningen säger åt vilket håll en sprite pekar. I stället för att säga att en sprite pekar åt exempelvis höger eller neråt används grader. Noll grader är rakt uppåt, så 90° betyder att den här spritens riktning just nu är rakt åt höger på scenen, vilket också visas av den lilla ratten till höger om siffran. Prova att klicka på ratten och dra med musen åt olika håll medan du håller ner musknappen. Du ser dels att siffran ändras mellan noll och 360 grader, men du ser också att den katt som visas på scenen snurrar runt för att följa med din inställning på ratten. Ställ tillbaka riktningen till 90 grader just nu, för du vill att katten ska börja gå åt höger när han sätter igång.

På nästa rad finns något som heter "rotationsstil". Det här berättar för editorn hur spriten ska tillåtas att rotera. Som standard kan en sprite rotera i alla riktningar, vilket du såg alldeles nyss när du drog i riktningsratten. Här finns tre inställningar: "full rotation", "vänster-höger" och "ingen rotation" som bara ser ut som en prick. Klicka på pricken för att bestämma att spriten inte får rotera alls. Testa nu igen att dra i riktningsratten ovanför och du ser att även om riktningssiffran ändras så står katten still och snurrar inte alls. Det är för att du ställt in denna sprite på att inte roteras alls. Ställ in ­"rotationsstil" på "vänster-höger" nu genom att klicka på mittenalter­nativet som ser ut som ett rakt streck med två pilspetsar och se till att riktningen ovanför är på 90 grader igen om du ställde om den för att testa nyss. Nu har du ställt in din sprite på att bara få vända sig rakt åt höger eller vänster, inga andra håll.

Den sista rutan i inställningspanelen för vår sprite heter ”kan dras på scenen” och den bestämmer huruvida en sprite kan flyttas med hjälp av musen när programmet körs senare. Du låter den vara urkryssad för katten, du vill ju flytta honom med hjälp av script, inte med musen.
För att komma tillbaka till sprite-listan, klicka på den lilla runda blå knappen med en vänsterpil precis till vänster om katten (se bilden ovan).

Ditt första script – låt katten springa

För att katten ska kunna agera måste du ge den ett manus – ett script. När du klickar på en sprite i sprite-listan så visas just den spritens script i den stora grå ytan till höger på skärmen som du kallar "sprite-script". Där är tomt just nu eftersom katten inte fått några block kopplade till sig än, men du ser en liten utsuddad miniversion av spriten längst upp till höger för att påminna oss om vilken sprite du jobbar med för tillfället.

Nu ska du få katten att springa över skärmen! För att göra detta behöver du koppla ett händelseblock och ett rörelseblock till katten.

Om du tittar till vänster i editorn, i det övre högra hörnet av scen­en, så ser du en grön flagga och en röd cirkel där. Det här är Scratchs start- och stoppknappar.

Scratchs start- och stoppknappa

Screen Shot 2016-06-14 at 13.59.15
Klicka nu på ”Händelser” överst i blockbiblioteket för att lista alla bruna block som har med händelser att göra. För att få saker att börja hända kan du använda det allra första händelseblocket: "När [grön flagga] klickas på".

När [grön flagga] klickas på


Det här blocket är ett av startblocken i Scratch, för som du ser finns det ingen inbuktning ovanpå, så det går inte att haka det här blocket på undersidan av andra block. Däremot finns det en utbuktning på undersidan, vilket är en inbjudan till att lägga till andra block efter.

När du kopplar det här händelseblocket till en sprite så gör du det möjligt att låta spriten agera så fort du klickar på knappen med den gröna flaggan ovanför scenen. För att koppla blocket till din katt-sprite drar du helt enkelt blocket från biblioteket in i sprite-script-ytan till höger. Du kan släppa det var som helst, men just nu kan du lägga det någonstans i övre delen av scriptet.

Nu har du berättat för Scratch att du vill att katten, ”Sprite1”, ska agera när du klickar på startknappen. Men om du klickar på startknappen nu händer ingenting, för du har ju inte berättat vad som ska hända när du klickar på den. För att se till att något händer måste du välja ett annat block och haka på det på undersidan av ditt händelse­block.

Rörelseblock: gå (10) steg

Klicka på kategorin "Rörelse" i blockbiblioteket för att lista alla blå rörelseblock. På det allra första blocket står det "Gå (10) steg".


Varje gång det här blocket körs kommer den sprite som det är kopplat till att röra sig ett antal steg i den riktning som spriten pekar. Din katt pekar ju just nu mot 90 grader, rakt åt höger, så om det här blocket körs kommer katten att gå tio steg åt höger. Det står ”10” i rutan från början, men det går att ändra till vad du vill. Det struntar du i just nu, för tio steg är lagom.

Klicka och dra det blå blocket till scriptytan, och håll koll på vad som händer när du börjar närma dig ditt bruna händelseblock som redan ligger där.

Scratch visar att blocken kommer att passa ihop


Ser du att när du för det blå blocket mot underkanten av ditt bruna händelseblock så lyser kanten upp? Det här är Scratchs sätt att visa för dig att de här blocken kan sitta ihop. Om du släpper det blå blocket medan den vita kanten lyser kommer Scratch att sätta ihop blocken till ett script. Släpp det blå blocket så att det passar ihop med det bruna händelseblocket. Om du missar gör det inget, du kan ta tag i det blå blocket igen och passa in det bättre, tills det ­fastnar där det ska.

Två block bildar ett script


Grattis! Du har skapat ditt allra första script. Testa nu att klicka på startknappen. Katten hoppar tio steg åt höger, men stannar där. Scratch gör alltså precis som du sagt åt det – när knappen med den gröna flaggan klickas på så går katten tio steg framåt. Men du ville ju att katten skulle springa fram över skärmen, så nu måste du berätta för Scratch att du vill att katten ska fortsätta att springa, inte bara hoppa fram tio steg en enda gång när du klickar på startknappen.

Loopar – så gör du saker flera gånger

Att se till så att ett eller flera block körs flera gånger i rad automat­iskt kräver att du skapar en ”loop”. Det finns olika typer av loopar, eller framförallt finns det olika sätt att kontrollera hur looparna startar och slutar, men för tillfället ska du skapa en oändlig loop – något som ska utföras under hela tiden vårt program körs, från det att du trycker på startknappen tills du trycker på stoppknappen.

Två block bilder ett script

Klicka på den gula kategorin ”Kontroll” i blockbiblioteket. Du ser en mängd gula block som alla handlar om olika sätt att kontrollera flödet i ett script. Nu ska du använda ett block som skapar en loop, och det ser lite annorlunda ut. Det har fortfarande en inbuktning på ovansidan, så det går att haka på efter andra block. Men det har ingen utbuktning på undersidan, så det går inte att haka på fler block efter. Varför då? Jo, när Scratch kommer till det här blocket så kommer det att börja köra alla block som ligger inuti ­detta block, om och om igen i evighet. Eller åtminstone tills du trycker på startknappen.

Blocket "för alltid"

Screen Shot 2016-06-14 at 14.11.46
Som du ser har det här blocket alltså en öppning på mitten, vilket gör att du kan lägga ett eller flera block inuti det. De block som ­ligger inuti körs i loopen, så länge loopen körs.

Det du vill göra är ju att se till så att katten springer över skärmen hela tiden så fort du trycker på startknappen. Du ska alltså lägga det blå blocket ”gå 10 steg” inne i en loop, så att Scratch förstår att du vill att blocket ”gå 10 steg” ska köras om och om igen. För att göra detta måste du först plocka isär det blå blocket ”gå 10 steg” från det bruna blocket ”När [grön flagga] klickas på”. Att ta isär block är lika lätt som att sätta ihop dem. Ta tag i det blå blocket och dra det lite åt sidan. Du kan lägga det bredvid det bruna blocket i scriptytan, bara de inte sitter ihop längre.

Nu går det bra att dra in vårt gula loop-block ”för alltid” och sätta ihop det med det bruna ”När [grön flagga] klickas på”. Gör som tidigare, dra in det nya blocket tills du ser den vita lysande kanten och släpp så blocken sätts ihop.

Startblocket och loopblocket sitter ihop,
men det blå blocket är lagt åt sidan så länge


Nu kan du ta tag i det blå blocket ”gå 10 steg” igen och dra in det i loopen. Se till att du släpper det när det blir en vit kant vid utbuktningen inuti loopen ”för alltid”, se bilden:

Släpp blocket inuti loopen

15-1
Nu har du skapat din första loop och i den har du lagt blocket ”gå 10 steg”. Det du gjort är berätta för Scratch att du vill att blocket ”gå 10 steg” ska köras om och om igen, ”för alltid”, när startknappen klickats.

Din första loop

Screen Shot 2016-06-15 at 11.09.55
Nu har du skapat din första loop och i den har du lagt blocket ”gå 10 steg”. Det du gjort är berätta för Scratch att du vill att blocket ”gå 10 steg” ska köras om och om igen, ”för alltid”, när startknappen klickats.

Testa att klicka på den gröna flaggan nu och se hur katten springer iväg hela vägen till den högra kanten av scenen och stannar allra längst ut, när han nästan försvunnit ur bild. Scratch har gjort som du sagt, men det blev inte riktigt bra ändå, för när katten kom till kanten av scenen tog det stopp. Varför då?

Scratch låter inte dina sprites försvinna bort från scenen, för då skulle du inte kunna ta tag i dem med musen och dra dem dit du vill senare. Därför struntar Scratch i din instruktion ”gå 10 steg” när ­katten inte kan komma längre framåt. Det du behöver göra nu är att få katten att vända när han kommer till kanten. Som tur är har Scratch ett färdigt blått block för att göra just det, och det ligger också under kategorin ”Rörelse”. Blocket du ska använda nu heter ”studsa, vid kanten”.

Blocket "studsa, vid kanten"


Vad det här blocket gör är att helt enkelt låta en sprite studsa när det når fram till kanten av scenen. Att en sprite studsar betyder egentligen att den vänder 180 grader om. Eftersom din katt hade riktningen 90 grader, rakt åt höger, till att börja med kommer den nu att få riktningen -90 grader, eller rakt åt vänster när den studsar. Det här kanske låter rörigt, men egentligen behöver du inte bry dig om antalet grader på riktningen just nu, så länge du minns att ”studsa, vid kanten” låter din sprite vända helt om i motsatt riktning när den träffar kanten.

För att Scratch ska kunna utföra studsen behöver du ta tag i det blå blocket ”studsa, vid kanten” och lägga det inuti loopen. Varför inne i loopen? Jo, för om du lägger blocket utanför loopen kommer Scratch bara att köra blocket en enda gång, direkt efter det att du klickat på startknappen. Om katten inte råkar befinna sig vid ­scenkanten just då kommer den inte att studsa, och när du sen ­flyttar på katten med ”gå 10 steg” inuti loopen finns där inget block som studsar katten när det behövs.

Ta alltså tag i det blå blocket ”studsa, vid kanten” och lägg det ­inuti loopen. Det spelar ingen roll om du lägger blocket före eller efter det blå blocket ”gå 10 steg”, men lägg det efter just nu. Ditt färdiga script ska nu se ut så här:

Ditt första script är färdigt!


Klicka på startknappen en gång till. Nu börjar katten gå fram och tillbaka, fram och tillbaka på scenen. Varje gång den är på väg att springa bort vid scenkanten så kommer den att studsa och börja gå åt andra hållet.

Om du tittar på ditt script medan katten springer så ser du att hela scriptet liksom glöder, och omgärdas av en ljusgul färg. Det är Scratch som visar dig att det scriptet körs för tillfället. När du börjar göra större program kommer du kanske att ha flera script som ligger bredvid varandra och körs vid olika tillfällen. Markeringen runt det script som körs är ett bra sätt att hålla koll på vad det är som händer för tillfället i Scratch.

Scriptet glöder när det körs


Okej, katten springer fram och tillbaka på scenen, men finns det något du kan göra för att det hela ska kännas lite mer som ett spel? Du kanske ska ta och göra så att katten jamar till när man klickar på den?

Flera script till samma sprite

Det finns inget som hindrar att du skapar flera script till samma sprite. Nu har du ett script som gör så att katten springer. Men om du vill att katten ska jama när du klickar på den kan du skapa ett till script till katten och lägga det bredvid ditt första script. Scriptytan är ­ganska stor, så det finns plats för många script om du vill skapa flera.

Klicka på kategorin ”Händelser” igen. Här ligger ditt gamla ­bekanta bruna block ”När [grön flagga] klickas på”. Men här ligger också ett annat händelsblock, nämligen ”När denna sprite klickas på”. Det här blocket vill du ha nu, för detta block körs bara när du klickar på spriten med musen. Dra in det bruna blocket ”När denna sprite klickas på” och lägg den någonstans i scriptytan, en bit ifrån ditt första script.

Du sätter igång med ett till script bredvid ditt första.

Ljud – låt katten jama

Det här kommer att bli ett mycket enklare script, för det enda du vill göra är att spela upp ett ”mjau” när du klickar på spriten. Klicka på den rosa kategorin ”Ljud” och leta efter blocket ”spela ljudet [meow]”. Dra in det rosa blocket ”spela ljudet [meow]” och haka fast det under det bruna blocket ”när denna sprite klickas på”. Som du ser ligger ordet ”meow” i en liten ruta med en pil. Det finns flera block som har samma utseende, och gemensamt för dem är att den lilla rutan låter dig välja mellan flera alternativ, om det finns. Scratch börjar med att bara ha ett ljud laddat, nämligen ”meow”, så just nu går det inte att välja något annat ljud, men det passar ju bra eftersom du vill att katten ska jama.

Ditt andra script är färdigt


Ditt andra script är redan färdigt. Klicka på startknappen och försök att träffa katten med ett klick med muspekaren medan den springer på scenen. När du träffar katten så jamar den!

Variabler – håll något i minnet

Det här börjar ju likna ett spel! Men vore det inte lite roligare om du fick en poäng varje gång du fick katten att jama? För att räkna poäng måste du låta Scratch hålla en siffra i minnet, nämligen själva poängen. Du vill att poängen ska börja på noll och sen räknas upp med ett varje gång du träffar katten.
För att ett program ska kunna hålla saker i minnet finns något som kallas ”variabler”. Variabler kan man tänka på som ett slags lådor som du kan lägga olika saker i. När du lagt något i lådan kan du syssla med annat ett tag, men när du tittar i lådan igen ligger dina saker kvar. Du kan lägga till eller ta bort saker ur lådan, och Scratch håller ordning på innehållet åt dig. En sådan låda blir utmärkt att använda för att hålla koll på poängräkningen i ditt allra första spel.

Scratch kan hantera massor av variabler samtidigt. Just nu ­behöver du bara använda en variabel, och för att använda den måste du först skapa den. Klicka på kategorin ”Data” så ser du att här finns inga block just nu, men däremot ett par knappar.

Knapparna för att skapa variabler


Du vill skapa en ny variabel, så klicka på ”Make a variable”. Genast blir det lite svårare, för nu tycker Scratch att du ska svara på ett par frågor:

Variabelfrågor


Först av allt vill Scratch att du döper vår nya variabel. Det är enda sättet som Scratch kan hålla koll på olika lådor senare, så skriv in ”poäng” i fältet för variabelnamn. Nästa val handlar om vilka sprites som ska få använda den här variabeln. För tillfället spelar det ingen roll, så låt det valet vara och klicka på ”OK” för att skapa variabeln ”poäng”.

Genast händer två saker. Det första du ser är att det nu plötsligt dök upp ett antal orange block som alla har med din nya variabel att göra. Dessutom dök en ny liten ruta upp längst upp till vänster på scenen:

Din nya variabel visas på scenen


Det här är ju perfekt för dig, för du vill ju visa poängen hela tiden medan spelet pågår. Men om du tittar i blockbiblioteket så ser du att vår nya variabel ligger överst i en orange oval, och att det finns en liten kryssruta till vänster om den:

Variabeln du skapat

Screen Shot 2016-06-15 at 11.51.34
Testa att kryssa ur rutan till vänster om din variabel så ser du att ­poängrutan nu försvinner från scenen. Kryssa i rutan igen så kommer den tillbaka på samma ställe. På detta sätt kan du själv välja om dina variabler ska visas på scenen eller inte. Man kan använda varia­bler på många olika sätt. En del variabler, som din nya poängvariabel, är viktiga för den som använder programmet att ha koll på. Den som spelar ditt nya spel vill ju veta hur många poäng den har. Men många variabler behövs bara inuti själva programmet för att hålla koll på olika saker. Då är det onödigt att visa dem för användaren, och du kommer att göra mer av det längre fram.

Att räkna upp eller ner variabler

Nu har du alltså en låda att spara spelarens poäng i, men om du sätter igång programmet nu så ser du att poängen aldrig räknas upp oavsett hur många gånger du klickar på katten. För att Scratch ska veta när poängen ska räknas upp måste du berätta när och hur det ska göras.

Du har ju redan ett script som håller koll på när katten träffas av muspekaren. Det scriptet gör så att Scratch spelar upp ljudet ”meow” när man klickar på katten. I det scriptet blir det perfekt att också lägga in ett block som räknar upp poängen.

Under ”Data” ligger nu ett antal nya block som alla har att göra med din variabel. Bland dem ser du det orange blocket ”ändra ­[poäng] med 1”. Ta det blocket och dra in det till vårt script, under det rosa blocket ”spela ljudet [meow]”.

Poänguppräkning på plats


Det du nu gjort är att säga åt Scratch att ”när denna sprite klickas på”, ”spela ljudet [meow]” och ”ändra [poäng] med 1”. Det där ­”ändra [poäng] med 1” betyder att du ska ta det tal som för tillfället ligger i variabeln ”poäng” och lägga till ett. Som du ser ligger ettan i en vit boll, och det betyder att du kan skriva in vilken siffra som helst där. Om du vill att man ska få tio eller tusen poäng varje gång man klickar på katten går det att lägga in siffrorna ”10” eller ”1000” där i stället. För tillfället låter du det ge en poäng i taget att klicka på katten, så låt ettan stå kvar.

Nu kan du testa att köra igång programmet igen, och klicka på katten. Förutom att katten jamar när du träffar honom med mus­pekaren (stackars katt!) så får du ett poäng för varje träff, vilket också visas direkt i den lilla rutan för din variabel ”poäng” på scenen.

Här finns en viktig sak att förstå. Att det står ”poäng” bredvid din poängsiffra på scenen är bara för att du döpte variabeln till ”poäng” när du skapade den. Du hade lika gärna kunnat döpa den till ”sillar” eller ”jamningar” eller vad du vill. Då hade det stått i stället bredvid siffran på scenen.

Scenen kan också ha script.

Du får ett poäng varje gång du träffar katten, men om du missar ­katten händer ju inget, så du kan klicka hej vilt för att få poäng utan att det gör något. Du kanske skulle ta och straffa spelaren om han eller hon missar katten och bara klickar bredvid?

I ditt första program är scenen rätt tråkig – bara en vit ruta. Men scenen kan ha egna scripts och det kommer du att testa nu. För att visa scenens script klickar du på rutan för ”Scen” till vänster om sprite-listan:

Klicka här för att visa scenens script


Nu blir scriptytan tom, för scenen har inga script än. För att visa kattens script igen klickar du bara på ”Sprite1” till höger, och på så sätt kan du växla mellan scenens script och de olika spritens script medan du skapar nya program.

I scenens script-yta ska du nu lägga ett script som tar bort en ­poäng varje gång man klickar på scenen. För om du klickar på scenen har du ju missat katten. Börja med att välja den bruna kategorin ”Händelser” och dra in startblocket ”när denna sprite klickas på”. Namnet på detta block är något förvirrande nu, för det är ju ingen sprite du klickar på utan scenen, men blocket heter likadant ändå.

Nu har du början på ett script som kommer att köras varje gång man klickar på scenen. Under kategorin ”Data” har du din gamla bekant, det orange blocket ”ändra [poäng] med 1”. Dra in det blocket och haka fast det under ”när denna sprite klickas på”. Som det ser ut nu skulle du alltså få ytterligare en poäng i din variabel om du klickar på scenen, men du vill ju dra av en poäng i stället. Det är lätt gjort – klicka på siffran ”1” i den vita bollen i blocket och skriv ”-1”. Samma block används alltså för att både lägga till och dra bort poäng, och det är vad du skriver in i den vita bollen som avgör hur värdet på variabeln ändras.

Dra av en poäng när scenen klickas på


Kör igång programmet igen och testa att klicka på katten och att klicka på scenen. Som du ser så minskar poängen när du klickar på scenen, men du ökar poängen när du träffar katten.

Initiering – hur ska du ha det när du börjar?

Spelet är nästan klart, men om du klickat på katten och scenen några gånger nu så är vår poängsiffra antingen plus eller minus någon siffra. Du vill att poängen ska vara noll när spelet börjar, så att spelaren inte får börja spelet med en massa minuspoäng i bagaget, till exempel.

Att ställa in variabler och andra saker i ett program när det körs ­kallas att initiera programmet. Du vill kanske nollställa poängräk­nare, placera saker på rätt ställe eller göra andra inställningar så att alla spelare får samma förutsättningar varje gång ett nytt spel påbörjas. Du har ju redan ett script som körs när grön flagga klickas på, och det ligger kopplat till ”Sprite1”, det vill säga katten. Klicka på katten i sprite-listan för att se kattens script igen.

I ditt lilla spel räcker det ju om du ser till att variabeln ”poäng” sätts till noll när spelet börjar. Under kategorin ”Data” finns det orange blocket ”Sätt [poäng] till 0”. Dra in det till scriptet som har startblocket ”när [grön flagga] klickas på” och se till att släppa det innan loopen men efter startblocket:

Placera det nya blocket mellan startblocket och loopblocket


Varför lägger du inte det här blocket inne i loopen? Jo, du vill ju bara att poängen ska nollställas när spelet först startar, alltså när du klickar på den gröna flaggan. Om du lägger nollställningsblocket inne i loopen kommer poängen att sättas till noll oavbrutet, och det spelar ingen roll hur mycket du försöker räkna upp eller ner poängen – den sätts genast till noll ändå.

Det här är ett sätt att göra det här på. Du hade också kunnat skapa ett tredje script med samma startblock som ditt första – ”när [grön flagga] klickas på” och lägga nollställningsblocket ensamt där. Kom ihåg att en sprite kan ha många script, och att det kan finnas flera script som har samma händelseblock som start.

Ett alternativ till initiering


När du senare gör program som har många och långa script kan det vara en god idé att hålla isär script som gör olika saker, men just nu spelar det inte så stor roll, så du kan välja vilken av de två lösning­arna du vill.

Kör igång spelet nu genom att trycka på den gröna flaggan. Poängen sätts genast till noll och du kan börja spela genom att jaga katten. När du avslutar spelet och startar om det kommer poängställningen alltid att börja från noll.