Mini-Spil

clock 60 min
user 7.-9. klasse
Svær
I denne lektion vil dine elever lære at kode og bruge en servo motor. Eleverne vil lære at lave et mini-spil på en Micro:Bit ved at kode den i Makecode. Eleverne skal arbejde sammen to-og-to til at løse opgaverne i forløbet. Når de er færdige med at kode vil de kunne konkurrere i mod hinanden i spillet.
Indhold
Det her er med i materialet:

Motivation

Denne øvelse er en god blanding af fagene matematik og teknologiforståelse. Man får i dette forløb også udforsket hvordan man kan bruge eksterne komponenter, som motor

Eleverne skal lave et lille spil der kan spilles med 2 personer. Opgaven vil få eleverne igennem lidt mere avancerede kodefærdigheder, herunder nestede hvis-sætninger og do-while løkker. Disse færdigheder er en standard del af en programmørs hverdag og bliver brugt ofte når man har med softwareudvikling/kodning at gøre. 

Forløbet er et konkret eksempel på, hvordan teknologi kan bruges til andet end toastere og mobiltelefoner. Man kan lave en verden af ting med selv få komponenter og gøre det underholdende og sjovt, hvis man har fantasi nok.

Mål for undervisningen:

 

  • At eleverne kan tilkoble en micro: bit med servo motor
  • At eleverne kender til hvordan en servo motor virker.
  • At eleverne kender til hvordan en nestede if-sætninger og do-whiles virker.
  • At eleverne kan lave forbindelse mellem et kredsløb og en micro:bit.
  • At eleverne gennem kode kan styre en servo motor.
  • At eleverne gennem kode kan arbejde med start og forever funktionerne på micro:bit’en sideløbende
  • At eleverne gennem kode kan sætte tilfældige værdier for at introducere tilfældighed i koden.

Om forløbet

Opgavebeskrivelse

Eleverne skal i denne opgave lave et lille spil. Spillet har to spillere. Hver spiller sidder på hver sin side af Micro:Bit’en og har en finger på knappen “a” eller “b”. I spillet skal de dyste om at få flest point.

 

Kode - Grundeksempel

Herunder er et billede af den færdige kode. Alle nestede statements etc. kan ses i forbindelse med hinanden.

Under billedet har vi lavet en kodeblok der indeholder hele koden som tekst. Ved at copy-paste den ind i python sektionen får du hele koden skrevet/lavet for dig så du ikke selv skal sidde og indsætte noget.

Fuld kode

 

Link til Python Kode:

Python kode(Åbnes i ny fane)

 

Kodebeskrivelse

Når programmet starter:
Inden vores spil starter rigtigt, har vi brug for at sætte nogle startværdier og andre ting som programmet senere kan bruge som udgangspunkt.

Siden eleverne skal konkurrere med hinanden i spillet, skal vi sætte antallet af runder spillet skal varer, som helst skal være et ulige tal. På den måde kan der altid kun være en vinder. Antallet af runder er i eksemplet herover sat til at være 5.

Servo'en får sat sin startposition, hvilket er 90 grader. Dette er grunden til at vi anvender "servo" udvidelsen fra MakeCodes bibliotek.

Den første runde startes; Computeren skriver "GO!", hvilket signalerer at spillet er startet. Efter sættes en pause med en tilfældig varighed mellem 1000 ms og 5000 ms (1 til 5 sekunder) og så vises et ikon man selv kan lave med Micro:bit'ens LED'er.

 

Når programmet kører:
Når vores spil er startet kan vi bruge de værdier vi satte i vores start blok. De værdier skal vi bruge i forbindelse med nogle andre blokke og funktioner, som vi nu skal lave i "for altid" blokken.

Først har vi en do-while løkke (udfør-mens løkke), der kører så længe at den rundevariabel vi lavede i start blokken, ikke er 0. Alt hvad vi kommer ind i denne løkke, kører hele tiden, om og om igen, så længe at runderne ikke er 0, så alt det vi gerne vil have til at ske, skal laves inde i denne løkke. I løkken har vi to hvis-sætninger, der kigger på om enten knap A eller knap B på micro:bit'en er trykket ned. De eneste forskelle der er på disse hvis-sætninger, er hvilken knap der bliver trykket på for at aktivere koden, samt hvilken spillers score der bliver ændret. Ellers er de identiske og gør følgende:

  • Rydder skærmen til næste runde.
  • Ændrer scoren for spiller A eller B, alt efter hvilken knap der blevet trykket ned. Den ændrer scoren med det antallet man har angivet i koden, så i dette tilfælde vil den lægge 1 til den nuværende score for den spiller hver runde.
  • Ændrer runde variablen så den trækker 1 fra dens værdi hver runde.
  • Sætter en pause med en tilfældig varighed mellem 1000 ms og 5000 ms.
  • Efter pausen viser micro:bit'en det ikon man laver med dens LED'er, i dette tilfælde det samme som i "start" blokken.

Dernæst er der koden i bunden af "for altid" blokken, udenfor "udfør-mens" løkken. Dette fungerer som afslutningen til spillet, når alle runder er forbi.

  • Hvis antallet af runder er lig 0, afsluttes spillet. Vi rydder skærmen og micro:bit'en viser teksten "GAME OVER" med dens LED'er.

Til sidst har vi to hvis-sætninger "nested" i vores første hvis-sætning. Hvis betingelsen i den første hvis-sætning er sand, kan de andre to hvis-sætninger tilgås. Logikken er dermed:

  • Hvis scoren for spiller A er højere end scoren for spiller B, skal servoen dreje armen til en 0 graders vinkel, hvilket er spiller A's retning.
  • Hvis scoren for spiller B er højere end scoren for Spiller A, skal servoen dreje armen til en 180 graders vinkel, hvilket er spiller B's retning.

Fysisk Opsætning - Grundeksempel

Billederne herunder er af den fysiske opsætning, som eleverne skal ende ud i at lave i det tilhørende elevforløb.

Det første billede viser den reelle opsætning vi skal kunne se eleverne sidde med.

Billede 2, viser opsætningen lavet i simulationsværktøjet Tinkercad.

 

Fysisk setup scaled Digitalt setup

Huskeliste

  • Link til MakeCode: https://makecode.microbit.org
  • Sørg for at de har “servo” udvidelsen installeret.
  • Dette gøres ved at klikke på “Udvidelser”:

1

  • Derefter søge på “servo”:

  • Sidst så klik på udvidelsen med det billede i kan se herunder:

3

Klassiske fejl for Micro:Bit

Vigtigt: Hvis det lugter af varmt plastik/gummi, fjern strømkilden fra kredsløbet med det samme – så er der gået noget helt galt, og bør undersøges nøjagtigt, før der sættes strøm til igen!

Disse fejl sker tit under arbejdet med micro:bit:

Sørg for at MicroBit’ten er tilsluttet til strøm via USB-ledning eller batterier.

  • Mac computere har tit svært ved at arbejde med micro:bit (I dette projekt burde det dog kunne lade sig gøre)
  • Læs vejledningen. Tit kan elevers spørgsmål besvares ved at læse en par linjer frem, eller huske tidligere afsnit i forløbet.
  • Hvis ikke vejledningen til parring af enheder i elevmaterialet ikke virker, kan MakeCode programmet gemmes manuelt under den tilsluttede micro:bit. Man trækker hex-filen fra downloads over på MicroBit-drevet på samme måde som på en USB-nøgle
  • Det kan være svært at spotte en fejl i kode, prøv sammen med eleven at læs koden højt og omsæt det til dansk sprog. Er der stadigvæk fejl, så prøv styk for styk at sammenligne med en anden elev, der har det til at virke.
  • Er USB-ledningen sat til en computer? Vær opmærksom på at den sidder rigtigt - både i computeren og micro:bit'ten
  • Hvis der er blevet tilsluttet en batterikasse ved batteri indgangen, vær opmærksom på at den sidder rigtigt - og at der stadig er strøm på batterierne.
  • Vær opmærksom på, at alle kredsløb du bygger skal være lukkede. Hvis du Er i tvivl hvordan forbindelser virker i et breadboard, så er der en forklaring under "Leksikon" her på siden.
  • Vender lysdioder i den rigtige retning? Det lange ben skal vende mod plus i kredsløbet.