====== Minesveiper ======
I dette klassiske spillet ligger minene skjult, og spilleren skal forsøke å finne ut hvor de befinner seg. Ettersom skjermen på micro:bit setter en del begrensninger må vi endre litt på spillet. Det skal bare være én mine ett eller annet sted på spillebrettets 25 felt. Spilleren skal åpne ett og ett felt og når feltet med minen blir åpnet er spillet over. Men for hvert felt som blir åpnet uten at det ligger en mine der får spilleren ett poeng. Poengsummen vil derfor avhenge av hvor mange felt du har åpnet før du finner minen. Hvor mange felt tror du at du greier å avdekke før du er uheldig og treffer på minen?
===== Lage brikkene =====
Alle elementene i et spill må lagres et sted, og en lagringsplass kalles en variabel. I en variabel kan du lagre nesten hva som helst, både tall, tekster og spillbrikker, og det som ligger lagret i variabelen kalles en verdi.
==== Lage minen ====
Trykk på menyen for **Variabler** og velg "Lag en variabel". Kall variabelen //mine//. Nå skal det ha blitt opprettet en kommando kalt "sett mine til" i **Variabel**-menyen. Denne skal utføres ved start, så du må klikke på den og dra den inn til "Ved start"-blokka. Det er ikke tilstrekkelig å lagre et tall i denne variabelen, du trenger å lage en ny spillbrikke og plassere denne spill-brikken et sted på skjermen. Minen skal være usynlig, så du må også angi at minen sin lysstyrke skal være 0.
Du finner aktuelle kommandoer i menyene for **Variabler** og **Spill**. Når du skal opprette brikker må du muligens først klikke på *Avansert* for å finne menyen for **Spill**.
Når du lager nye brikker må brikken plasseres et sted på spillbrettet, og vi bruker koordinater til å betegne én spesifikk rute. Referansen (eller nullpunktet, origo, om du vil) er øverste venstre hjørne. X-koordinaten betegner antall ruter bortover fra origo, og Y-koordinaten betegner hvor mange hakk nedover fra origo. Hvis du plasserer brikken på koordinat (X=0,Y=1) blir den plassert 0 hakk bortover og ett hakk under origo, altså like under origo. Øverste høyre hjørne har koordinat (X=4,Y=0), nedre høyre hjørne har koordinat (X=4,Y=4) og nedre venstre hjørne har koordinat (X=0,Y=4).
Minen må plasseres på tilfeldige X- og Y-koordinater. På menyen for **Matematikk** finner du en kommando som heter "tilfeldig tall", og du kan bruke denne til å sette X- og Y-koordinaten til et tilfeldig tall mellom 0 til 4.
Ved å trykke på **Avansert** og deretter på **Spill** finner du en kommando for å angi egenskaper ved en brikke. Bruk denne til å angi //mine// sin lysstyrke til 0.
{{url>https://jsfiddle.net/royeven/jgdx8upy/2/embedded/css,html,result/ 100%,400 noscroll noborder left}}
==== Lage sveiper ====
Gjenta prosessen over for en ny brikke som du kaller //sveiper//. Denne skal ikke være usynlig. Du skal også sette poengsummen din til 0 ved start.
I **Spill**-menyen finner du kommandoer som styrer poengene i spillet.
{{url>https://jsfiddle.net/royeven/jgdx8upy/4/embedded/css,html,result/ 100%,400 noscroll noborder left}}
===== Bevege sveiper framover =====
Vi ønsker å bruke knappene A og B til å flytte //sveiper// rundt på skjermen. Til dette trenger du funksjoner fra **Inndata**, og det er særlig funksjonen "når knapp A trykkes" og "når knapp B trykkes" som er interessant. Ved å kombinere disse funksjonene med kommandoene "endre" og "angi" fra **Spill** kan vi flytte //sveiper// fram og tilbake. Når du trykker på knapp A skal //sveiper// flytte seg ett hakk bortover (til høyre).
Dersom du ønsker å flytte //sveiper// ett hakk til høyre kan du endre //sveiper// sin X-posison med 1. Dette er det samme som å flytte //sveiper// ett hakk lenger vekk fra nullpunktet.
{{url>https://jsfiddle.net/royeven/jgdx8upy/19/embedded/css,html,result/ 100%,400 noscroll noborder left}}
===== Bevege sveiper fram og tilbake =====
Du vil fort oppdage at når //sveiper// når kanten av skjermen så kan den ikke flyttes lenger til høyre. Vi må altså finne en måte å flytte //sveiper// tilbake på også. Hvis du trykker på menyen for **Logikk** finner du en "hvis-ellers"-blokk som du kan bruke.
Du ønsker nå å sjekke hva //sveiper// sin X-koordinat er før du flytter på den. Hvis //sveiper// sin x-koordinat er 4 skal //sveiper// flyttes tilbake til start (d.v.s. angi //sveiper// sin X-koordinat til 0). Hvis ikke ønsker du å endre //sveiper// sin X-koordinat med 1.
Du kan finne en seks-kantet blokk for sammenligning i logikk-menyen. Denne skal passe inn i hvis-blokken.
I **Spill**-menyen kan du finne "sprite X"-blokken for å finne X-koordinaten til en brikke.
Her finner du et delvis ferdig løsningsforslag du kan bruke som utgangspunkt
{{url>https://jsfiddle.net/royeven/jgdx8upy/8/embedded/css,html,result/ 100%,400 noscroll noborder left}}
Her finner du et komplett løsningsforslag. Det finnes mange måter du kan flytte //sveiper// på, og dersom du har funnet en lur måte så kan du godt bruke din egen måte.
{{url>https://jsfiddle.net/royeven/jgdx8upy/9/embedded/css,html,result/ 100%,400 noscroll noborder left}}
===== Bevege sveiper opp og ned =====
Nå skal du bruke B-knappen til å bevege //sveiper// opp og ned. Du kan høyre-klikke på blokka for "når knapp A trykkes" og velge "Lag kopi". Der det tidligere sto "når knapp A trykkes" må du nå endre slik at det i den ene blokken står "når knapp B trykkes" og gjøre justeringer slik at knapp A flytter //sveiper// fram og tilbake med knapp B flytter //sveiper// opp og ned.
{{url>https://jsfiddle.net/royeven/jgdx8upy/10/embedded/css,html,result/ 100%,400 noscroll noborder left}}
===== Avdekke et felt =====
Når du trykker på knapp A og B samtidig skal du sjekke om minen ligger der. Hvis den gjør det skal spillet avsluttes, men hvis ikke skal du ha ett ekstra poeng for å ha overlevd litt lenger i minefeltet.
Du må finne blokkene "når knapp A+B trykkes" fra menyen for **Inndata** og "hvis-ellers"-blokka fra **Logikk**-menyen.
I **Spill**-menyen finner du en seks-kantet blokk som sjekker om to brikker berører hverandre. Hvis //sveiper// berører //mine// har du nå tapt!
Her har du et uferdig løsningsforslag med hint du kan ta utgangspunkt i:
{{url>https://jsfiddle.net/royeven/jgdx8upy/12/embedded/css,html,result/ 100%,400 noscroll noborder left}}
Her finner du et komplett løsningsforslag på dette trinnet:
{{url>https://jsfiddle.net/royeven/jgdx8upy/13/embedded/css,html,result/ 100%,400 noscroll noborder left}}
===== Markere åpnede felt =====
Det blir enklere å spille dersom du markerer de feltene du alt har åpnet og hvor du vet at minen ikke finnes. Når du åpner et felt hvor minen ikke er kan du lage en ny brikke som du plasserer i dette feltet og setter en svak lysstyrke på denne brikken.
I **Spill**-menyen finner du kommandoer for å lage en ny brikke, og du finner kommandoer for å finne X- og Y-koordinatene til en brikke.
I spill-menyen finner du kommandoer for å angi koordinater, men denne kan også brukes til å angi lysstyrken til en brikke.
{{url>https://jsfiddle.net/royeven/jgdx8upy/14/embedded/css,html,result/ 100%,400 noscroll noborder left}}
====== Videre arbeid ======
* Du har kanskje merket at du kan åpne ett felt flere ganger? Hvis du åpner samme felt 100 ganger etter hverandre får du 100 poeng. Når du etter hvert finner minen og dør kan du derfor ha fått mer enn 25 poeng. Hvordan kan du modifisere spillet slik at et felt kun kan åpnes én gang?