JS: Trykkomania. Introduksjon. Skrevet av: Arve Seljebu

Like dokumenter
JS: Trykkomania Nybegynner Web Lærerveiledning

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Sprettende ball. Introduksjon: Steg 1: Vindu. Sjekkliste. Skrevet av: Sigmund Hansen

Løpende strekmann Erfaren Videregående Python PDF

JS: Grunnleggende JavaScript

Steg 1: Canvas-elementet

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Steg 1: Hvordan styre figurer med piltastene

Soloball. Introduksjon. Steg 1: En roterende katt. Sjekkliste. Skrevet av: Geir Arne Hjelle

Sprettende ball Introduksjon Processing PDF

PXT: Det regner mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes

Steg 1: Animasjons-attributtet

Hoppehelt. Introduksjon. Steg 1: Streken. Sjekkliste. Skrevet av: Geir Arne Hjelle

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Klask-en-Muldvarp. Introduksjon. Skrevet av: Basert på MITs "MoleMash for App Inventor 2"-guide (

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

JS: Grunnleggende JavaScript Nybegynner

PXT: Himmelfall. Introduksjon. Skrevet av: Helene Isnes og Julie Revdahl

Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den.

Steg 1: Bli kjent med spillet

Steg 1: Piler og knappetrykk

PXT: Tikkende bombe. Introduksjon. Steg 1: Vi starter spillet. Skrevet av: Kolbjørn Engeland

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Steg 0: Installere Pygame Zero

Steg 1: Vi starter fra toppen

Tryll bort heksa. Introduksjon. Sjekkliste Følg instruksjonene på lista. Huk av etter hvert. Test. Lagre 2/8

Donkey Kong. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle

Bygge en pyramide. Introduksjon. Steg 1: Lage en ny mod. Sjekkliste. Skrevet av: Pål G. Solheim

Steg 1: Få noe på skjermen

Steg 1: Hente grafikk fra nettet

Bygge en kube. Introduksjon. Steg 1: Lage en ny mod. Skrevet av: Pål G. Solheim

Breakout. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle og Martin Lie

I denne oppgaven skal du lære hvordan du kan flytte rundt på elementer og gjemme elementene bak andre elementer ved hjelp av CSS.

Steg 1: En første animasjon

JS: Partikkel-animasjon Nybegynner

Steg 1: Lag et flyvende spøkelse

Snøballkrig. Introduksjon. Steg 1: En snøballkaster. Skrevet av: Geir Arne Hjelle

Ping pong. Introdusjon: Steg 1: Sprettende ball. Sjekkliste. Skrevet av: Torbjørn Vik Lunde

Steg 1: Opprette spillskjerm

Steg 1: Katten og fotballbanen

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

Steg 1: Tekst på flere linjer

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

"Dette skjer når jeg trykker på denne knappen" "Når jeg skriver i dette feltet, ser jeg at det andre forandrer seg"

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

Pong. Oversikt over prosjektet. Steg 1: En sprettende ball. Plan. Sjekkliste. Introduksjon

Norgestur. Introduksjon. Steg 1: Et norgeskart. Sjekkliste. Skrevet av: Geir Arne Hjelle

Hvor i All Verden? Del 3. Introduksjon. Steg 0: Forrige gang. Sjekkliste. Skrevet av: Geir Arne Hjelle

Steg 1: Streken. Steg 2: En hoppende helt. Sjekkliste. Sjekkliste. Introduksjon. Hei der! Hoppehelt

JafseFisk. Introduksjon. Steg 1: JafseFisk følger musepekeren. Skrevet av: Oversatt fra Code Club UK (//codeclub.org.uk)

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Steg 1: Få Flakse til å falle

Steg 1: Felix følger musepekeren

PXT: Micro:bit repeater

Asteroids. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle

Spøkelsesjakten. Steg 1: Lag et flyvende spøkelse. Sjekkliste. Introduksjon

Klask-en-Muldvarp. Steg 1: Gjøre klart spillbrettet. Sjekkliste. Introduksjon

Hvor i All Verden? Del 1. Introduksjon. Steg 1: Styr et helikopter. Skrevet av: Geir Arne Hjelle

PXT: Det regnar mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes. Oversatt av: Stein Olav Romslo

Forberedelser: Last ned bildefiler

Uendelig bakke. Introduksjon. Skrevet av: Kine Gjerstad Eide

Steg 1: Lag en scene og legg til figurer

CSS: Animasjon Nybegynner

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

King Kong Erfaren Scratch PDF

Sprettball Erfaren ComputerCraft PDF

Steg 1: Vår første datamaskin

Kan micro:biten vår brukes som et termometer? Ja, den har faktisk en temperatursensor!

Denne oppgaven innfører funksjoner, og viser hvordan vi kan skrive og teste funksjoner i Ellie.

PXT: Hermegåsa. Introduksjon. Skrevet av: Felix Bjerke og Tjerand Silde

Steg 1: Lag bildedeklarasjon

Steg 1: Husker du skilpadden?

Steg 2: La løvinnen og papegøyen bevege seg

"Hjerneteppe!" er en huskelek hvor du skal huske stadig lengre rekker med bokstaver!

I denne oppgaven forventer vi at du har vært gjennom HTML- og CSS-oppgavene så langt og/eller er kjent med <div> - og HTML5-taggene.

Felix og Herbert Introduksjon Scratch PDF

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Flagg. Introduksjon. Steg 1: Gå i sirkel. Skrevet av: Sverre Oskar Konestabo og Geir Arne Hjelle

Bygg et Hus. Introduksjon. Steg 1: Prøv selv først. Skrevet av: Geir Arne Hjelle

Halloweenimasjon Introduksjon Scratch PDF

Lærerveiledning - Straffespark

Hvor i All Verden? Del 2. Introduksjon. Steg 0: Forrige gang. Skrevet av: Geir Arne Hjelle

La oss begynne enkelt. Vi vil først se hvordan vi kan flytte og snurre på en figur.

og bevegelse funksjoner som blir aktivert av hendelser Keyboard Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Steg 1: Få flere ting til å vise seg på tavlen

Hei verden. Introduksjon. Steg 1: Sette opp Xcode. Skrevet av: Andreas Amundsen

Steg 1: Endre bakgrunn og finne figurer

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro

Kanter, kanter, mange mangekanter

Verden - Del 2. Intro. Skrevet av: Kine Gjerstad Eide

Tegneprogram Journeyman Scratch PDF

Tell sekunder. Introduksjon. Skrevet av: Teodor Heggelund. I denne oppgaven skal vi lage vårt eget spill!

Start et nytt Scratch-prosjekt. Slett kattefiguren, for eksempel ved å høyreklikke på den og velge slett.

Steg 1: Hvordan fungerer spillet?

Norgestur. Introduksjon. Steg 1: Et norgeskart. Sjekkliste. Scratch. Skrevet av: Geir Arne Hjelle

Skilpaddekunst. Introduksjon. Skrevet av: Geir Arne Hjelle

Transkript:

JS: Trykkomania Skrevet av: Arve Seljebu Kurs: Web Tema: Tekstbasert, Nettside, Spill Fag: Matematikk, Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse, Videregående skole Introduksjon Denne oppgaven viser deg hvordan du kan lage et spill med JavaScript og dele det med vennene dine. Spillet kalles Trykkomania fordi det handler om å trykke på en ball flest mulig ganger før tiden renner ut. Før du starter på denne oppgaven bør du har endel erfaring med variabler, funksjoner og eventlisteners i JavaScript. Dersom du ikke har det, så anbefaler vi å gjøre noen av de enklere oppgavene først.

Steg 1: Åpne JS Bin Vi skal bruke JS Bin (http://jsbin.com (http://jsbin.com)) for å lage spillet. Hvis du aldri har brukt JS Bin før, ta en titt på oppgaven Hei JavaScript (../hei_js/hei_js.html). Dersom du heller vil lage spillet i en egen fil på PCen din, så er det bare å åpne din favoritt teksteditor og hoppe til steg 2. Sjekkliste Åpne adressen jsbin.com (http://jsbin.com) i ett eget vindu Velg å vise JavaScript og Output. Skjul de andre fanene ved å trykke på de.

I JavaScript skriver vi koden I Output vises websiden Når du starter er begge fanene tomme. Steg 2: Lage en ball Vi skal bruke JavaScript til å lage innholdet på websiden. Dette betyr at vi skal bruke JavaScript til å lage HTML. Du trenger ikke kunne noe spesielt om HTML, men om du ønsker lære om HTML, se oppgaven Introduksjon til web (../introduksjon_til_web/introduksjon_til_web.html). Sjekkliste Vi begynner med å lage en funksjon som heter Ball : function Ball() { Inni funksjonen lager vi ett nytt div -element: function Ball() { var el = document.createelement('div'); var el betyr at elementet får navn el

Vi kan nå gi elementet en stil: function Ball() { var el = document.createelement('div'); el.style.backgroundcolor = 'black'; el.style.width = '60px'; el.style.height = '60px'; el.style.backgroundcolor = 'black' gjør ballen svart el.style.width = '60px' gjør ballen 60 piksler (https://no.wikipedia.org/wiki/piksel) bred el.style.height = '60px' gjør ballen 60 piksler høy La oss legge ballen til siden: function Ball() { var el = document.createelement('div'); el.style.backgroundcolor = 'black'; el.style.width = '60px'; el.style.height = '60px'; document.body.appendchild(el); For at ballen skal vises, må vi kjøre funksjonen ved hjelp av denne koden: Ball(); Vises en "ball" i Output?

Ok, så den var ikke akkurat rund. Vi kan bruke el.style.borderradius for å runde av hjørnene. Siden ballen er 60px bred og høy, så avrunder vi kantene med 30px, altså halvparten av 60 Legg koden under de andre el.style -setningene: el.style.borderradius = '30px'; Fikk du en rund ball? Utforsk Om du ønsker en annen form, prøv andre verdier enn 30px for avrundingen. Hvordan ser 5px ut? Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/pozova/1/edit? js,output). Steg 3: Flytte ballen Akkurat nå vises ballen helt øverst til venstre i Output. La oss flytte den rundt omkring.

Vi bruker el.style.position = 'fixed' for å fortelle at vi ønsker plassere ballen i forhold til kantene i vinduet. 50% fra toppen blir da el.style.top = '50%'. Sjekkliste Legg til en posisjon for ballen: el.style.position = 'fixed'; el.style.top = '80%'; Flyttet ballen seg ned Flytt ballen ut fra venstre kant: el.style.left = '30%'; Prøv andre verdier mellom 0% og 100% Klarer du å finne ut når ballen forsvinner ut av vinduet? Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/pozova/2/edit? js,output). Steg 4: Flytte ballen med en funksjon Ettersom vi ønsker at ballen skal flytte seg underveis i spillet, skal vi lage en funksjon som flytter ballen. Sjekkliste

Inni Ball, lag en funksjon som heter el.posisjon. Denne funksjonen skal ta inn en x- og en y-verdi, plassere elementet og returnere elementet. function Ball() {... el.posisjon = function (x, y) { ; Funksjonen skal bestemme el.style.top og el.style.left. el.posisjon = function (x, y) { el.style.left = x; el.style.top = y; ; Returner el, slik at vi kan bruke funksjonene til ballen. Når elementet el returneres så vil el oppdateres med ny plassering. function Ball() {... el.posisjon = function (x, y) { el.style.left = x; el.style.top = y; ; return el; Du kan nå flytte ballen slik som dette: var ball = Ball(); // lager ballen ball.posisjon('10%', '20%'); // flytter til x = 10% og y = 20% Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/hipepuy/edit? js,output).

Steg 5: Velg en tilfeldig plassering I JavaScript kan vi bruke Math.random() for å få en tilfeldig verdi mellom 0 og 1. La oss bruke denne slik at ballen blir plassert på et tilfeldig sted. Sjekkliste Trykk på fanen Console Skriv inn Math.random() og trykk enter. Fikk du et tall mellom 0 og 1 Vi kan gjøre dette tallet om til prosent ved å gange med 100, prøv det ut:

Vi kan legge til prosenttegnet med + '%' : Legg merke til at hver gang kommandoen kjøres, får vi nye tall. Det er dette som kalles tilfeldig Lukk Console ved å trykke på den La oss bruke Math.random til å plassere ballen: var x = Math.random() * 100 + '%'; var y = Math.random() * 100 + '%'; ball.posisjon(x, y); Her har vi laget 2 variabler x og y som begge holder på hvert sitt tilfeldige tall. Dette tallet sendes inn i funksjonen posisjon(x,y) som vi lagde i sted. Hvis du trykker på knappen Run with JS, flytter ballen på seg?

Hvis du har haket av Auto-run JS vil også koden kjøres hver gang du endrer koden Trykker du nok antall ganger, legger du merke til at ballen noen ganger kommer utenfor bunnen og høyre side For å unngå dette kan vi begrense forflytningen til 80%: var x = Math.random() * 80 + '%'; var y = Math.random() * 80 + '%'; Siden Math.random() maksimalt er 1 og vi ganger med 80, vil aldri ballen flytte seg lenger ut fra toppen eller venstre side enn 80%. Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/digiqa/1/edit? js,output).

Steg 6: Flytte ballen hvert andre sekund Vi ønsker at ballen hele tiden skal flytte seg. Nå skal vi bruke setinterval til å flytte ballen hvert andre sekund. setinterval(function(){ //koden som skal kjøres i intervall, antall_millisekunder); // Hvor ofte den skal kjøre Sjekkliste Bruk setinterval til å flytte ballen hvert andre sekund: setinterval(function () { var x = Math.random() * 80 + '%'; var y = Math.random() * 80 + '%'; ball.posisjon(x, y);, 2000); setinterval(function..., 2000) betyr kjør function hvert 2000 millisekund 2000 millisekund er 2 sekunder, altså tegnes ballen på et nytt sted hvert andre sekund. Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/lecamej/1/edit? js,output). Steg 7: Poeng

Nå har du en ball som spretter rundt. La oss legge til poeng. Vi har laget en poengkomponent som du kan bruke, så kommer du raskere i gang. Poeng er bygd opp likt som Ball, så du må gjerne lese gjennom og se om du forstår den. Sjekkliste Legg til koden for komponenten Poeng : /** * Poeng - viser poengsum nede i venstre hjørne. * * Bruk: * var poeng = Poeng(); // viser poengsummen * poeng.øk(); // øker poengsummen med 100 * poeng.nullstill(); // setter poengsummen til 0 * */ function Poeng() { var el = document.createelement('div'); // CSS til "el" el.style.position = 'fixed'; el.style.bottom = '5px'; el.style.left = '8px'; el.style.padding = '5px'; el.style.backgroundcolor = 'black'; el.style.color = 'white'; // Viser poengsum på skjermen, samt lager variabelen "_poeng" var _poeng = 0; el.innerhtml = _poeng + ' poeng'; document.body.appendchild(el); // To funksjoner som øker eller nullstiller poengene el.øk = function () { _poeng += 100; el.innerhtml = _poeng + ' poeng'; ; el.nullstill = function () { _poeng = 0; el.innerhtml = _poeng + ' poeng'; ; return el;

For at poengsummen skal vises, må vi kjøre Poeng() en gang, slik vi også gjorde med Ball() Legg denne linjen over Ball() : var poeng = Poeng(); var ball = Ball(); Vises "Poeng 0" For å holde orden på programmet er det lurt å ha det som skjer i toppen. Funksjoner kan brukes likevel om de ikke står først, så flytt function Ball og function Poeng ned til bunnen. var poeng = Poeng(); var ball = Ball(); setinterval(function () {..., 2000); function Ball() {... function Poeng() {... Nå står det som skjer i toppen: Vis poengene: var poeng = Poeng() Vis ballen: var ball = Ball() Flytt ballen hvert andre sekund: `setinterval(..., 2000) Vi velger nå å kjøre funksjonen poeng.øk hver gang ballen trykkes.

ball.onclick = poeng.øk; Obs: Det skal ikke være () på slutten av poeng.øk. Dette er fordi funksjonen ikke kjøres her, men hver gang noen klikker på ballen. ball.onclick = poeng.øk; betyr at funksjonen poeng.øk() kjøres når noen klikker på ballen Sjekk at du får poeng når du treffer ballen med et klikk. Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/mewole/1/edit? js,output). Teste spillet

Du er nå kommet så langt at det kan være kult å teste spillet. Ettersom spillet handler om å trykke flest mulig ganger på ballen, egner det seg for å prøve på mobiltelefonen. Sjekkliste Noen mobiltelefoner zoomer når en dobbeltklikker på skjermen, derfor skal vi slå av zooming Åpne fanen HTML ved å trykke på den Finn linjen med <meta name="viewport"... Endre linjen til: <meta name="viewport" content="width=device-width, user-scalable=n o"> Lukk fanen HTML ved å trykke på den Øverst i nettleseren din står adressen til siden. Adressen du trenger å taste inn på mobilen er det før /edit?js,output I eksempelet over er adressen jsbin.com/dutebe Tast din adresse inn på mobiltelefonen Spill!

Steg 8: Begrense tiden Akkurat nå er det ubegrenset tid i spillet. La oss legge til en nedtelling av tid, slik at man kan konkurrere om hvem som klarer flest klikk på 10 sekunder. Sjekkliste Legg til koden for nedtelling i bunnen av programmet.

/** * Nedtelling - En linje som viser at tiden renner ut. * * Bruk: * var nedtelling = Nedtelling(slutt); // funksjonen `slutt` kj øres når tiden er utløpt * nedtelling.tellned(10); // teller ned 10 sekunder * */ function Nedtelling (ferdig) { var el = document.createelement('div'); // CSSen til elementet "el" el.style.position = 'fixed'; el.style.left = '0'; el.style.bottom = '0'; el.style.height = '100%'; el.style.width = '3px'; el.style.backgroundcolor = 'red'; document.body.appendchild(el); // Regner ut prosenten av hvor lang tid det er igjen function prosent (slutt, tid) { return (slutt - Date.now()) / tid / 10; l // Funksjon som teller ned og stopper når den har kommet til nul el.tellned = function (tid) { var slutt = Date.now() + tid * 1000; var intervall = setinterval(tegn, 20); // Tegner streken på venstre side til tiden er ute function tegn () { var p = prosent(slutt, tid); if (p < 0) { el.style.height = '0%'; clearinterval(intervall); ferdig(); el.style.height = p + '%'; return el;

I toppen starter vi nedtellingen. var nedtelling = Nedtelling(); nedtelling.tellned(10); Dette lager en nedtelling på 10 sekunder Hvis du trykker på Run with JS ser du nedtellingen, men ingenting skjer når tiden er ute Lag funksjonen stopp som forteller hva som skal skje når tiden er ute. function stopp() { ball.skjul(); Vi har ikke laget funksjonen ball.skjul enda. Vi trenger ball.vis også Lag ball.skjul og ball.vis inni function Ball. function Ball() {... el.skjul = function () { el.style.display = 'none'; ; el.vis = function () { el.style.display = ''; ; return el; Nå kan vi fortelle nedtellingen at den skal kjøre stopp() når tiden er ute. var nedtelling = Nedtelling(stopp); Forsvinner ballen når tiden er ute

Hvor mange poeng klarer du på mobiltelefonen innen tiden? Tips Om du sitter fast, kan du se på fasiten så langt (http://jsbin.com/tukiwu/1/edit? js,output). Steg 9: Omstarte spillet Så langt kan spillet omstartes ved å oppdatere nettleseren. Er det ikke stiligere med en knapp som starter spillet? Sjekkliste Lag en funksjon start. function start() { Funksjonen skal bestemme hva som skjer når spillet skal starte. Vi må nullstille poengsummen, vise nedtellingen og vise ballen. function start() { poeng.nullstill(); nedtelling.tellned(10); ball.vis(); start skal kjøres hver gang en knapp klikkes, så vi trenger en knapp Legg til koden for knappen i bunnen av programmet.

/** * En knapp som ligger midt på siden. * * Bruk: * var knapp = Knapp('trykk på meg'); // lager en knapp som lig ger midt på siden * knapp.vis(); // viser knappen * knapp.skjul(); // skjuler knappen */ function Knapp(tekst) { var el = document.createelement('button'); el.style.display = 'none'; el.innertext = tekst; el.style.position = 'fixed'; el.style.top = '50%'; el.style.left = '50%'; el.style.padding = '20px'; el.style.border = 'solid 1px'; document.body.appendchild(el); el.skjul = function () { el.style.display = 'none'; ; el.vis = function () { el.style.display = ''; // plasser akkurat på midten // midten av skjermen er 50% minus halvparten av størrelsen ti l knappen var w = el.offsetwidth / 2; var h = el.offsetheight / 2; el.style.marginleft = '-' + w + 'px'; el.style.margintop = '-' + h + 'px'; ; return el; I toppen legger vi til knappen. var knapp = Knapp('Prøv en gang til'); knapp.onclick = start; knapp.onclick bestemmer hva som skal skje når knappen klikkes

Knappen vises ikke, så vi må bestemme at den skal vises når spillet er slutt. function stopp() {... knapp.vis(); Vises knappen når spillet er ferdig Du legger kanskje merke til at vi har en bug nå? Vi må jo skjule knappen når spillet startes også Skjul knappen når spillet startes. function start() {... knapp.skjul(); Spillet er nå ferdig! Del adressen med dine venner og se hvem som klarer flest poeng. Tips Om du sitter fast, kan du se på fasiten (http://jsbin.com/pozova/11/edit?js,output). Utfordringer Her er noen utfordringer Endre størrelsen på ballen, slik at spillet blir vanskeligere Endre hvor lang tid man har på seg Endre fargen på ballen

Øk poengsummen med 1000 istedenfor 100 Klarer du å få ballen til å endre til forskjellig størrelse hver gang den kommer til syne Klarer du å få frem flere enn én ball? Lisens: CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0/deed)