| Begge sider forrige revisjonForrige revisjonNeste revisjon | Forrige revisjon |
| slagskip_battleship [2020/04/04 14:26] – [Motta bomber fra den andre spilleren] admin | slagskip_battleship [2022/11/30 08:09] (nåværende versjon) – ekstern redigering 127.0.0.1 |
|---|
| ===== Markere det bombede feltet som bombet ===== | ===== Markere det bombede feltet som bombet ===== |
| Dette trinnet er valgfritt. Mange pleier å krysse ut felt man har bombet for å gjøre det lettere å huske hvilke felt man allerede har bombet og hvilke som må bombes. Dersom du ønsker å farge felt du allerede har bombet kan du opprette en ny brikke på den X- og Y-koordinaten du har bombet og angi en lav lysstyrke på denne brikken. Da vil de bombede feltene gløde svakt. | Dette trinnet er valgfritt. Mange pleier å krysse ut felt man har bombet for å gjøre det lettere å huske hvilke felt man allerede har bombet og hvilke som må bombes. Dersom du ønsker å farge felt du allerede har bombet kan du opprette en ny brikke på den X- og Y-koordinaten du har bombet og angi en lav lysstyrke på denne brikken. Da vil de bombede feltene gløde svakt. |
| <hidden Tips 1>Etter at du har sendt X- og Y-koordinaten til det bombede feltet til fienden kan du lage en ny variabel (kall den gjerne //bombet//) og bruk denne til å lage en ny brikke på samme X- og Y-koordinat som sprite. Angi //bombet// sin lysstyrke til f.eks. 10</hidden> | <hidden Tips 1>Etter at du har sendt X- og Y-koordinaten til det bombede feltet til fienden kan du lage en ny variabel (kall den gjerne //bombet//) og bruk denne til å lage en ny brikke på samme X- og Y-koordinat som //sprite//. Angi //bombet// sin lysstyrke til f.eks. 10</hidden> |
| {{url>https://jsfiddle.net/royeven/b57f9nke/12/embedded/css,html,result/ 100%,400 noscroll noborder left}} | {{url>https://jsfiddle.net/royeven/b57f9nke/12/embedded/css,html,result/ 100%,400 noscroll noborder left}} |
| |
| Løsningsforslaget legger opp til at informasjonen om hvor en spiller bomber skal sendes på formatet | Løsningsforslaget legger opp til at informasjonen om hvor en spiller bomber skal sendes på formatet |
| | X-koordinat | "x" (bokstaven x) | Y-koordinat | | | X-koordinat | "x" (bokstaven x) | Y-koordinat | |
| Teksten består altså av tre deler og hver del består av ett tegn. De tre delene er satt sammen til en tekst på totalt tre tegn, f.eks. "0x4" (tilsvarer X=0,Y=4) og "3x2" (tilsvarer X=3,Y=2). Hvert tegn står på en fast plass i teksten, f.eks står x-koordinaten alltid først i teksten, og y-koordinaten sist i teksten. Vi mennesker er vant med at det første tallet i en rekkefølge er 1, deretter følger 2 og 3 osv. I de fleste programmeringsspråk begynner man derimot på 0 før 1, 2 og 3 følger. Det betyr at formatet på teksten vi skal dekode blir: | Teksten består altså av tre deler og hver del består av ett tegn. De tre delene er satt sammen til en tekst på totalt tre tegn, f.eks. "0x4" (tilsvarer X=0,Y=4) og "3x2" (tilsvarer X=3,Y=2). Hvert tegn står på en fast plass i teksten, f.eks står x-koordinaten alltid først i teksten, og y-koordinaten sist i teksten. Vi mennesker er vant med at det første tallet i en rekkefølge er 1, deretter følger 2 og 3 osv. I de fleste programmeringsspråk begynner man derimot på 0 før 1, 2 og 3 følger. Det betyr at formatet på teksten du skal dekode blir: |
| | Posisjon | 0 | 1 | 2 | | | Posisjon | 0 | 1 | 2 | |
| | Tegnet på den aktuelle posisjonen | X-koordinat | "x" (bokstaven x) | Y-koordinat | | | Tegnet på den aktuelle posisjonen | X-koordinat | "x" (bokstaven x) | Y-koordinat | |
| Vi kan bruke kommandoen "del av tekst ved posisjon" til å hente ut en bestemt del av teksten, og ettersom vi vet at alle delene består av kun ett tegn skal lengden på hver del vi henter ut være 1 tegn. Deretter må vi konvertere (et annet ord for å gjøre om) tegnet til et tall: | Du kan bruke kommandoen "del av tekst ved posisjon" til å hente ut en bestemt del av teksten, og ettersom alle delene består av kun ett tegn skal lengden på hver del du henter ut være 1. Deretter må du konvertere (altså gjøre om) tegnet til et tall: |
| {{url>https://makecode.microbit.org/---docs?md=%20%60%60%60blocks%0D%0Alet%20x%20%3D%20null%0D%0Alet%20x_koordinat%20%3D%20%22%22%0D%0Aradio.onReceivedString(function%20(receivedString)%20%7B%0D%0A%20%20%20%20x_koordinat%3DreceivedString.substr(0%2C%201)%0D%0A%20%20%20%20x%20%3D%20parseFloat(x_koordinat)%0D%0A%7D)%0D%0A%20%60%60%60 100%,400 noscroll noborder left}} | {{url>https://makecode.microbit.org/---docs?md=%20%60%60%60blocks%0D%0Alet%20x%20%3D%20null%0D%0Alet%20x_koordinat%20%3D%20%22%22%0D%0Aradio.onReceivedString(function%20(receivedString)%20%7B%0D%0A%20%20%20%20x_koordinat%3DreceivedString.substr(0%2C%201)%0D%0A%20%20%20%20x%20%3D%20parseFloat(x_koordinat)%0D%0A%7D)%0D%0A%20%60%60%60 100%,400 noscroll noborder left}} |
| |
| {{url>https://makecode.microbit.org/---docs?md=%20%60%60%60blocks%0D%0Alet%20x%20%3D%20null%0D%0Aradio.onReceivedString(function%20(receivedString)%20%7B%0D%0A%20%20%20%20x%20%3D%20parseFloat(receivedString.substr(0%2C%201))%0D%0A%7D)%0D%0A%20%60%60%60 100%,400 noscroll noborder left}} | {{url>https://makecode.microbit.org/---docs?md=%20%60%60%60blocks%0D%0Alet%20x%20%3D%20null%0D%0Aradio.onReceivedString(function%20(receivedString)%20%7B%0D%0A%20%20%20%20x%20%3D%20parseFloat(receivedString.substr(0%2C%201))%0D%0A%7D)%0D%0A%20%60%60%60 100%,400 noscroll noborder left}} |
| |
| <hidden Tips 1>Når radio mottar tekst må denne teksten dekodes og lagres. Lag deg to variabler som du kaller X og Y. Teksten du har mottatt ligger nå lagret i variabelen //receivedString// og inneholder både X- og Y-koordinaten som fienden har bombet. Bruk teksten til å beregne den bombede X- og Y-koordinaten.</hidden> | <hidden Tips 1>Når radio mottar tekst vil denne teksten bli lagret i variabelen //receivedString//. Denne sammensatte teksten må du dekode for å hente ut X- og Y-koordinaten til det bombede feltet. Lag deg to variabler som du kaller //x// og //y//, og lagre de to koordinatene fra //receivedString// i disse to variablene.</hidden> |
| <hidden Tips 2>Du må bruke kommandoen "del av received string fra posisjon 0 med lengde 1" for å få ut den første koordinaten (altså X-koordinaten og "del av received string fra posisjon 2 med lengde 1" for å få den andre koordinaten (altså Y-koordinaten). De ulike delene av teksten på gjøres om til tall (du finner funksjoner for dette i **Tekst**-menyen i **Avansert**) og lagres i variablene X og Y.</hidden> | <hidden Tips 2>Du må bruke kommandoen "del av received string fra posisjon 0 med lengde 1" for å få ut den første koordinaten (altså X-koordinaten og "del av received string fra posisjon 2 med lengde 1" for å få den andre koordinaten (altså Y-koordinaten). De ulike delene av teksten på gjøres om til tall (du finner funksjoner for dette i **Tekst**-menyen i **Avansert**) og lagres i variablene //x// og //y//.</hidden> |
| {{url>https://jsfiddle.net/royeven/b57f9nke/13/embedded/css,html,result/ 100%,400 noscroll noborder left}} | {{url>https://jsfiddle.net/royeven/b57f9nke/13/embedded/css,html,result/ 100%,400 noscroll noborder left}} |
| |
| Hvis du har et skip på den X- og Y-koordinaten fienden bomber må du fjerne dette skipet fra tabellen //mine_skip// samt sende en melding til fienden (bruk "radio send tall"-kommandoen) så han vet at han traff. Du må også miste ett liv for hvert skip fienden senker. Når alle dine skip er senket er spillet over. | Hvis du har et skip på den X- og Y-koordinaten fienden bomber må du fjerne dette skipet fra tabellen //mine_skip// samt sende en melding til fienden (bruk "radio send tall"-kommandoen) så han vet at han traff. Du må også miste ett liv for hvert skip fienden senker. Når alle dine skip er senket er spillet over. |
| |
| <hidden Tips 3>Du bør bruke en "for element verdi av //mine_skip//"-løkke til å gå gjennom alle dine skip og se om noen av dem er truffet. Hvis verdi sin y-koordinat er lik den Y-koordinaten fienden bombet og verdi sin X-koordinat også er lik den X-koordinaten fienden bombet må du slette brikken //verdi// fra tabellen "//mine_skip//. Dette er litt avansert og krever at du finner "indeks av //verdi//" og fjerner denne fra tabellen //mine_skip//. Denne brikken må du slette, og du finner de funksjonene du trenger fra **Tabell**-menyen og i **Spill**-menyen. Her er det viktig å sjekke med løsningsforslaget!</hidden> | Du kan bruke en "for element //verdi// av //mine_skip//-løkke til å gå gjennom alle dine skip og se om noen av dem er truffet. Hvis et skip er truffet må det fjernes fra tabellen //mine_skip//. |
| <hidden Tips 4>Hvis fienden traff ett av dine skip må du fjerne ett av livene dine (du finner kommando for dette i **Spill**-menyen) samt bruke radioen til å sende et tall (f.eks. 1) til fienden for å fortelle fienden at han traff.</hidden> | |
| | {{url>https://makecode.microbit.org/---docs?md=%20%60%60%60blocks%0D%0Alet%20x%20%3D%20null%0D%0Alet%20mine_skip%3A%20game.LedSprite%5B%5D%20%3D%20%5B%5D%0D%0Aradio.onReceivedString(function%20(receivedString)%20%7B%0D%0A%20%20%20%20x%20%3D%20parseFloat(receivedString.substr(0%2C%201))%0D%0A%20%20%20%20for%20(let%20verdi%20of%20mine_skip)%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(x%20%3D%3D%20verdi.get(LedSpriteProperty.X))%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20mine_skip.removeAt(mine_skip.indexOf(verdi)).delete()%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0A%20%60%60%60 100%,400 noscroll noborder left}} |
| | |
| | <hidden Tips 1>I en slik løkke vil //verdi// tilsvare ett skip, og du kan behandle //verdi// som en vanlig brikke. Bl.a. kan du angi koordinater og lysstyrke til //verdi//, du kan hente ut //verdi// sine koordinater og du kan gjøre alt du kan gjøre med andre brikker. Hvis du har tre skip vil denne løkken bli gjentatt tre ganger: første gang vil //verdi// være det første skipet i tabellen //mine_skip//, andre gang til //verdi// være det andre skipet i tabellen, og tredje gang vil //verdi// være det siste skipet i tabellen. Hvis verdi sin y-koordinat er lik den Y-koordinaten fienden bombet og verdi sin X-koordinat også er lik den X-koordinaten fienden bombet må du slette brikken //verdi// fra tabellen "//mine_skip//. Dette er litt avansert og krever at du finner "indeks av //verdi//" (altså om //verdi// ligger på plassering 0, 1 eller 2 i tabellen) og fjerner denne indeksen fra tabellen //mine_skip//. Brikken må også slettes, og du finner de funksjonene du trenger fra **Tabell**-menyen og i **Spill**-menyen. Du kan hente inspirasjon fra bildet over på hvordan du kan gjøre det.</hidden> |
| | <hidden Tips 2>Hvis fienden traff ett av dine skip må du fjerne ett av livene dine (du finner kommando for dette i **Spill**-menyen) samt bruke radioen til å sende et tall (f.eks. 1) til fienden for å fortelle fienden at han traff.</hidden> |
| {{url>https://jsfiddle.net/royeven/b57f9nke/14/embedded/css,html,result/ 100%,400 noscroll noborder left}} | {{url>https://jsfiddle.net/royeven/b57f9nke/14/embedded/css,html,result/ 100%,400 noscroll noborder left}} |
| |
| * I spillet slik det er gjennomført i denne oppskriften vil skipene bli plassert helt tilfeldig. Dersom du lager mange skip pr. spiller er det stor sannsynlighet for at to skip vil bli plassert oppå hverandre. Hvordan kan man best unngå dette? | * I spillet slik det er gjennomført i denne oppskriften vil skipene bli plassert helt tilfeldig. Dersom du lager mange skip pr. spiller er det stor sannsynlighet for at to skip vil bli plassert oppå hverandre. Hvordan kan man best unngå dette? |
| * Hvis du ikke har en medspiller greier du kanskje å endre programmet slik du spiller mot datamaskinen? Micro:biten kan programmeres til å bombe dine skip på tilfeldig valgte koordinater. | * Hvis du ikke har en medspiller greier du kanskje å endre programmet slik du spiller mot datamaskinen? Micro:biten kan programmeres til å bombe dine skip på tilfeldig valgte koordinater. |
| | * I den versjonen av spillet som du har programmert kan du bombe så mye du vil. Greier du å endre spillet slik at du har et begrenset antall bomber? |
| |