Kanter, kanter, mange mangekanter

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

Sprettende ball Introduksjon Processing PDF

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

Farger Introduksjon Processing PDF

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.

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

Trigonometri, regulære mangekanter og stjerner

Straffespark Introduksjon Scratch Lærerveiledning

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

Ping pong. Steg 1: Sprettende ball. Sjekkliste. Introdusjon:

Gangemesteren Nybegynner Scratch PDF

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

Kodetime for Nordstrand barneskole

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

Tegnespillet. Introduksjon:

Hvordan du kommer i gang med LOGO.

Uendelig bakke. Introduksjon. Skrevet av: Kine Gjerstad Eide

Skilpaddefraktaler Erfaren Python PDF

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

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

Verden. Steg 1: Vinduet. Introduksjon

Løpende strekmann Erfaren Videregående Python PDF

3. Introduksjon til prosjektet Hringr. Scratch fra scratch Enkel programmering for nybegynnere

Mattespill Nybegynner Python PDF

Hvor i All Verden? Del 3 Erfaren Scratch PDF

Asteroids. Oversikt over prosjektet. Steg 1: Enda et flyvende romskip. Plan. Sjekkliste. Introduksjon

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

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

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

Flaksefugl Nybegynner Scratch Lærerveiledning

Spøkelsesjakten. Introduksjon

Hvor i All Verden? Del 2 Erfaren Scratch PDF

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

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

Steg 1: Lag bildedeklarasjon

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Skilpadder hele veien ned

Farger. Introduksjon. Skrevet av: Sigmund Hansen

Steg 0: Installere Pygame Zero

Sprettball Erfaren ComputerCraft PDF

Mesteparten av kodingen av Donkey Kong skal du gjøre selv. Underveis vil du lære hvordan du lager et enkelt plattform-spill i Scratch.

Enarmet banditt Nybegynner Scratch Lærerveiledning

Bursdag i Antarktis Nybegynner Scratch PDF

Redd verden. Steg 1: Legg til Ronny og søppelet. Sjekkliste. Introduksjon

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

Bygge en pyramide. Steg 1: Lage en ny mod. Sjekkliste. Introduksjon

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Gå til Drawing and Animation i Palette-menyen og legg til Canvas og Ball. OBS! Ball må slippes inni Canvas på skjermen for at den skal bli lagt til.

Bygge et hus. Steg 1: Vegger. Sjekkliste. Introduksjon

Utførelse av programmer, metoder og synlighet av variabler i JSP

Skilpaddekunst. Steg 1: Møt skilpadden. Sjekkliste. Introduksjon. Turtles

Labyrint Introduksjon Scratch Lærerveiledning. Steg 1: Hvordan styre figurer med piltastene

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

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Verden - Del 2. Intro. Skrevet av: 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.

Geometri. Mål. for opplæringen er at eleven skal kunne

Snake Expert Scratch PDF

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

King Kong Erfaren Scratch PDF

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

Legg merke til at at over de blå klossene er det flere kategorier av kommandoer i forskjellige farger, for eksempel

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

Start et nytt PXT-prosjekt, for eksempel ved å gå til makecode.microbit.org (

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

Steg 1: Katten og fotballbanen

Steg 1: Hvordan styre figurer med piltastene

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Skilpaddetekst. Steg 1: Tekst på flere linjer. Sjekkliste. Introduksjon

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

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

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

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

Visuell Programmering: Kom i gang med Processing

Menylinje og de vanligste funksjonene. Her gjør du de tilpasningene du trenger.

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

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

Steg 1: Tekst på flere linjer

PXT: Flasketuten peker på

Veileder i bruk av GoodReader

Steg 1: Piler og knappetrykk

Manual til. GeoGebra. Ungdomstrinnet. Ressurs til. Grunntall Bjørn Bakke og Inger Nygjelten Bakke ELEKTRONISK UNDERVISNINGSFORLAG AS

Øvingsforelesning i Python (TDT4110)

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

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

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

H. Aschehoug & Co Side 1

Snurrige figurer. Steg 1: En snurrig figur. Sjekkliste. Introduksjon

Hemmelige koder. Kodeklubb-koden. Steg 1: Alfabetet. Sjekkliste. Introduksjon

Stjerner og galakser Nybegynner Python PDF

Skilpadder hele veien ned. Steg 1: Tegn et fjell. Sjekkliste. Introduksjon. Hent frem skilpaddene dine, åpne IDLE, det er på tide å tegne igjen.

Lage en ny spillverden

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

Flagg Erfaren Scratch Lærerveiledning

Hei verden Introduksjon Swift PDF

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

Snøballkrig Ekspert Scratch Lærerveiledning

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

Transkript:

Kanter, kanter, mange mangekanter Nybegynner Processing PDF Introduksjon: Her skal vi se på litt mer avansert opptegning og bevegelse. Vi skal ta utgangspunkt i oppgaven om den sprettende ballen, men bytte ut ballen med trekanter, firkanter og mangekanter. Det anbefales derfor at du har gjort den oppgaven før, eller at du har en forståelse av if -setninger og koordinatsystemet fra før. Altså skal du lære å tegne former med kanter, mange kanter. Steg 1: Enkle firkanter Vi begynner med rektangler: de firkantene som det er enklest å tegne på datamaskinen. Sjekkliste Start Processing og skriv dette: float x; float y; float xfart = 1.5; float yfart = 2; void setup() { size(640, 480); x = width / 2; y = height / 2; void draw() { x += xfart; y += yfart; if (x < 0) { xfart = -xfart; if (x > width - 100) { xfart = -xfart; if (y < 0) { yfart = -yfart; if (y > height - 100) { yfart = -yfart; background(0); rect(x, y, 100, 100); Dette programmet er ganske likt det som ble lagd i siste oppgave om den sprettende ballen, men det er noen små forskjeller: Vi har endret tallene brukt i if -setningene. Hvorfor tror du dette er gjort? Hva skjer om du også tegner opp en sirkel med samme posisjon og størrelse som firkanten?

Vi har også tatt i bruk +=. x += 1; gjør det samme som x = x + 1; Dette er bare en forkortelse for det siste. Altså øk x med det som står på høyresiden av +=. Kjør programmet ved å trykke på Ctrl + R eller knappen Lagre programmet som Firkant ved å trykke på Ctrl+S eller velg File --> Save i menyen. Utfordringer Kan du lage et rektangel som ikke er kvadratisk, altså hvor bredden og høyden er forskjellig? Husk at vi vil at den skal sprette idet den treffer kanten av vinduet. Enkle trekanter Å tegne rektangler var omtrent helt likt som å tegne sirkler, men nå skal du lære å tegne trekanter. Om en trekant ble tegnet opp med en posisjon og en bredde og høyde, hadde man ikke hatt så veldig god kontroll over hvordan trekanten så ut. Derfor må vi si for hvert hjørne befinner seg. Sjekkliste Vi skal nå bytte ut firkanten med en enkel trekant. Endre draw som vist under:

void draw() { x += xfart; y += yfart; if (x < 0) { xfart = -xfart; if (x > width - 100) { xfart = -xfart; if (y < 0) { yfart = -yfart; if (y > height - 100) { yfart = -yfart; background(0); triangle(x, y, x + 100, y, x + 50, y + 100); Her har vi tatt i bruk triangle istedenfor rect. Denne tar imot seks argumenter, to for hvert hjørne i trekanten. x, y er posisjonen til det første hjørnet øverst til venstre, x + 100, y er posisjonen til det øverste høyre hjørnet og x + 50, y + 100 er det siste hjørnet nederst i midten. Lagre programmet som Trekant ved å velge File -> Save as eller trykke Shift + Ctrl + S. Kjør programmet. Forbedre leseligheten Noen ganger kan det være vanskelig å lese kode med kall på funksjoner som tar mange argumenter. I Processing tar de fleste funksjoner bare imot noen få argumenter, men triangle tar seks. Da kan det være nyttig å dele opp kallet over flere linjer. For eksempel kunne setningen ovenfor vært skrevet slik at hvert hjørne var på hver sin linje:

triangle(x, y, x + 100, y, x + 50, y + 100); Hvis man fortsatt synes det er vanskelig å lese eller rotete, kan man legge til noen ekstra mellomrom for å få ting på linje. Merk at om man bruker automatisk formatering av koden i Processing, vil den fjerne mellomrom den mener er overflødig. Utfordringer Kan du tegne trekanten motsatt vei, sånn at den ser ut som en pil som peker oppover istedenfor nedover? Kan du tegne to trekanter istedenfor en og lage en sekskantet stjerne?

Vanskelig: Trekanten i programmet er nesten likesidet, men den er litt for høy, så to av sidene er rundt 12 piksler for lange. Kan du endre regnestykket y + 100 sånn at trekanten blir likesidet? Du kan bruke Pytagoras' læresetning, eller sinus-funksjonen, sin i Processing, for å finne den riktige høyden. Funksjonen radians kan være til hjelp for å gjøre om grader til radianer hvis du vil bruke sinus-funksjonen. Trekanter Nå skal vi se hvordan vi kan lage trekanter hvor hvert hjørne beveger seg for seg selv. Da trenger vi variabler for posisjon og fart for hvert hjørne. Til sammen blir dette fire variabler for hvert hjørne i trekanten. En for x-posisjon, en for y-posisjon, en for x-fart og en for y-fart. Ettersom trekanten har tre hjørner, blir dette totalt 3 hjørner * 4 variabler = 12 variabler. Vi kunne kalt dem f.eks. x1, x2, x3 og tilsvarende lagt tall til y, xfart og yfart. Isteden skal vi bruke noe som kalles en array. Det er vanlig å bruke det engelske ordet også på norsk, men det oversettes noen ganger til liste, vektor, rekke, tabell eller matrise. Sjekkliste Vi begynner med å endre variablene til arrays: float[] x = new float[3]; float[] y = new float[3]; float[] xfart = new float[3]; float[] yfart = new float[3]; Nå har vi endret typen av variablene fra float til float[]. Når vi putter firkantklammer etter en type, er det en array som inneholder verdier av typen foran klammene. Bak likhetstegnet ser vi også noe nytt new float[3] betyr at vi skal lage en ny float -array med tre tall i. Nå må vi endre startverdiene til disse tallene, ellers vil de bare være 0 alle sammen:

void setup() { size(800, 600); x[0] = width / 2; x[1] = width / 2; x[2] = width / 2; y[0] = height / 2; y[1] = height / 2; y[2] = height / 2; xfart[0] = 1.5; xfart[1] = 2.5; xfart[2] = 3.5; yfart[0] = -5; yfart[1] = 2.5; yfart[2] = -1.5; Her ser vi hvordan vi jobber med verdiene i en array. Vi bruker firkantklammer med et tall i for å si hvilken verdi vi skal jobbe med. Den første verdien finnes på plass 0, og den siste verdien er på plass 2 som er én lavere enn størrelsen. Tallet for plasseringen kalles indeks. Indeksen er alltid én lavere enn om vi skulle telle vanlig fordi vi begynner på 0. Derfor er den siste indeksen én lavere enn størrelsen. Og til slutt må vi flytte rundt på hjørnene og tegne opp trekanten vår: void draw() { for (int i = 0; i < x.length; i++) { x[i] += xfart[i]; y[i] += yfart[i]; if (x[i] < 0) { xfart[i] = -xfart[i]; if (x[i] > width) { xfart[i] = -xfart[i]; if (y[i] < 0) { yfart[i] = -yfart[i]; if (y[i] > height) { yfart[i] = -yfart[i]; background(0); triangle(x[0], y[0], x[1], y[1], x[2], y[2]); Her ser du en helt ny konstruksjon som vi skal se nærmere på i forklaringen nedenfor, men først kan du lagre og kjøre programmet.

Forklaring I begynnelsen av draw har vi nå lagt inn noe som kalles en løkke, loop på engelsk. En løkke er en del med kode som utføres flere ganger. Det finnes andre slags løkker, og denne kalles en for-løkke. Inne i parentesene etter for har vi tre setninger. Den første, int i = 0, blir utført før løkken. Den neste, i < x.length, bestemmer om koden i løkken skal utføres eller om løkken er ferdig. Den siste, i++, utføres etter koden mellom krøllparentesene, altså innholdet i løkken. i bruker vi inne i løkken som indeks når vi jobber med arrayene istedenfor å skrive faste tall. Så om vi går gjennom koden steg for steg, ser vi at først lages en variabel i av typen int som starter med verdien 0. int er typen som brukes for tall uten desimaler, altså heltall eller integer på engelsk. Så sjekker vi om i er mindre enn størrelsen til arrayen x. Hvis den er det, og det er den, for størrelsen til x er 3 og i er bare 0, kjøres koden mellom krøllparentesene. Når all koden mellom krøllparentesene er kjørt, så kjøres i++ som også er nytt for oss. i++ gjør det samme som i = i + 1, altså det øker i med 1. Nå sjekker vi igjen om i er mindre enn størrelsen til x. Og sånn fortsetter det helt til i blir like stor eller større enn størrelsen til x. Løkker som ser slik ut, med et heltall som økes med én og sjekkes mot størrelsen på en array, er veldig vanlig og brukes til å jobbe med arrayer. Du kommer til å se mange slike i fremtidige oppgaver. Løkker kan kreve litt øving før man blir god på det, men etter hvert blir man veldig glad for at man slipper å skrive den samme koden mange ganger. Utfordringer Det går også an å lage firkanter hvor man plasserer hvert hjørne for seg. Da bruker man funksjonen quad istedenfor rect. Prøv å endre programmet til å lage en firkant med hjørner som spretter rundt på skjermen. Hvor mange flere variabler trenger du enn for trekanten? Hvor mange parametere tar quad? Mangekanter Nå skal vi se på hvordan vi kan lage mangekanter. Mangekanter er bare et generelt navn for en form med flere kanter, som trekanter, firkanter, femkanter, osv.

Sjekkliste Vi begynner med å endre på størrelsen på arrayene i forrige oppgave: int KANTER = 5; float[] x = new float[kanter]; float[] y = new float[kanter]; float[] xfart = new float[kanter]; float[] yfart = new float[kanter]; Nå bruker vi en variabel for å sette størrelsen isteden. Dette hjelper leseligheten og gjør det enklere å endre antall kanter fordi vi bare trenger å endre tallet ett sted istedenfor fire steder. Posisjonene og hastighetene til hjørnene ble satt til faste verdier, men hvis vi ikke vet nøyaktig hvor mange kanter det er fungerer ikke det så bra. Så vi endrer på setup til å bruke en løkke for å sette startverdiene: void setup() { size(800, 600); for (int i = 0; i < KANTER; i++) { x[i] = random(width); y[i] = random(height); xfart[i] = random(-5, 5); yfart[i] = random(-5, 5); Denne løkken likner en del på den vi har i draw fra før. Vi har derimot introdusert en funksjon som heter random. Denne gir oss tilfeldige tall. Hvis vi kaller den uten noen verdier, random(), får vi et tall mellom 0 og 1. Hvis vi kaller den med én verdi, random(width), får vi et tall mellom 0 og verdien. Hvis vi bruker to verdier, random(-5, 5), får vi et tall mellom de to verdiene. Nå skal vi tegne opp mangekanten vår. Vi trenger ikke å endre på den første løkken i draw, men jeg synes vi skal bytte testen så den likner den over. Vi skal bytte ut kallet på triangle med en løkke som tegner hver kant: void draw() { for (int i = 0; i < KANTER; i++) { x[i] += xfart[i]; y[i] += yfart[i]; if (x[i] < 0) { xfart[i] = -xfart[i]; if (x[i] > width) { xfart[i] = -xfart[i]; if (y[i] < 0) { yfart[i] = -yfart[i]; if (y[i] > height) { yfart[i] = -yfart[i]; background(0); beginshape(); for (int i = 0; i < KANTER; i++) { vertex(x[i], y[i]); endshape(close); Her ser vi tre nye funksjoner: beginshape, vertex og endshape. beginshape angir at vi skal tegne en form. vertex

betyr at vi skal legge til et hjørne i formen, den tar inn to verdier for posisjonen til hjørnet. endshape sier at formen er ferdig og klar til å tegnes på skjermen. Hvis vi kaller endshape uten CLOSE, blir ikke formen lukket og fylt. Utfordringer Kan du bruke random til å få hjørnene til å endre hastighet når de treffer kanten av vinduet? Pass på, om farten blir lavere enn den var, kan hjørnet bli sittende fast i kanten av vinduet. Det er fordi vi egentlig lar den bevege seg litt utenfor vinduet for så å snu. Sett x eller y til å være lik posisjonen til vinduskanten inne i if - setningene for å unngå det. Lisens: CC BY-SA 4.0 Forfatter: Sigmund Hansen