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

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

Vi har sett enkle datamaskiner. Nå skal vi leke oss med roboter, og finne ut hvordan vi kan få dem til å gjøre forskjellige ting for oss.

Robotinvasjon Introduksjon ComputerCraft PDF

Sprettball Erfaren ComputerCraft PDF

Steg 1: Vår første datamaskin

Skilpaddekunst. Introduksjon. Skrevet av: Geir Arne Hjelle

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

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

Sprettball. Introduksjon. Skrevet av: Geir Arne Hjelle

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

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

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

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

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.

Steg 1: Hvordan styre figurer med piltastene

Introduksjon til ComputerCraft Introduksjon ComputerCraft PDF

Steg 1: Husker du skilpadden?

Hvor i All Verden? Del 3 Erfaren Scratch PDF

Steg 1: Vår første datamaskin

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

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

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

Steg 1: Lag bakken og få den til følge med

Hendelser Apprentice ComputerCraft PDF

Mattespill Nybegynner Python PDF

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

Hvor i All Verden? Del 2 Erfaren Scratch PDF

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

Snake Expert Scratch PDF

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

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

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

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

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

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

Hendelser. Introduksjon. Steg 1: Skattejakt. Skrevet av: Geir Arne Hjelle

Steg 1: Regneoperasjoner på en klokke

Steg 1: Lag bildedeklarasjon

JS: Grunnleggende JavaScript

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Steg 1: Katten og fotballbanen

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

Steg 1: Få noe på skjermen

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.

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

Skilpaddefraktaler Erfaren Python PDF

Steg 1: En første animasjon

I dag skal vi lage et nyttig spill, nemlig et spill som hjelper oss å lære andre ting. Vi skal få hjelp til å lære gangetabellen!

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

I denne oppgåva skal me lage eit enkelt spel der pingvinane har rømt frå akvariet i Bergen. Det er din (spelaren) sin jobb å hjelpe dei heim att.

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

PXT: Micro:bit repeater

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

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

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

Bursdag i Antarktis. Introduksjon. Steg 1: En katt på villspor. Sjekkliste. Skrevet av: Caroline Tandberg

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

Astrokatt. Introduksjon. Steg 1: En flyvende katt. Sjekkliste. Scratch. Skrevet av: Geir Arne Hjelle

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

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

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

PXT: Flasketuten peker på

Steg 1: Tekst på flere linjer

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

Steg 1: Hente grafikk fra nettet

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

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

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

Uendelig bakke. Introduksjon. Skrevet av: Kine Gjerstad Eide

Lærerveiledning - Flagg

Gangemesteren Nybegynner Scratch PDF

Steg 1: Piler og knappetrykk

Bursdag i Antarktis Nybegynner Scratch 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.

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

King Kong Erfaren Scratch PDF

Lærerveiledning - Straffespark

Steg 0: Installere Pygame Zero

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

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

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

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

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

Vi skal nå programmere et romskip som flyr rundt på skjermen. For å ha kontroll på bevegelsen vil vi bruke to variable, fartx og

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

Steg 1: Bli kjent med spillet

Rosetta og Philae. Steg 1: Skilpadden blir et romskip. Sjekkliste. Introduksjon

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

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

3D-Flakser, Del 1 Ekspert Scratch PDF

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

PXT: Bjelleklang. Introduksjon. Skrevet av: Kolbjørn Engeland, Julie Revdahl

JS: Grunnleggende JavaScript Nybegynner

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.

Steg 1: Rest etter divisjon

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

PXT: Spå fremtiden med bilder

Transkript:

Bygg et Hus Skrevet av: Geir Arne Hjelle Kurs: Computercraft Tema: Tekstbasert, Minecraft Fag: Programmering, Teknologi Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregåe skole Introduksjon I denne leksjonen vil vi se litt på hvordan vi kan få en robot til å bygge et hus for oss. Underveis vil vi lære hvordan vi kan bruke løkker og funksjoner for å gjenta ting som gjøres flere ganger. Steg 1: Prøv selv først Vi har tidligere lært om hvordan roboter behøver fuel for å kjøre og byggemateriell for å bygge. Pass på at roboten din har nok fuel mens du gjør oppgavene under. Tidligere har vi sett hvordan vi bruker turtle -biblioteket for å få roboter til å gjøre forskjellige ting. Spesielt bruker vi kommandoene

,,, turtle.turnright(),, turtle.down() for å flytte roboten. Videre kan vi bruke turtle.place() eller for å plassere ut en kloss, og vi har sett at vi kan bruke for -løkker for å gjenta ting. Lag en robot, gi den fuel og legg en del byggemateriell i robotens inventory. Lag et nytt program, edit byggmitthus, og skriv den følge koden: for i = 1, 5 do turtle.place() Kjør programmet. Bygger roboten en liten vegg av klosser? Prøv selv Jobb videre med bygghus -programmet, og se om du klarer å utvide det slik at roboten bygger et enkelt hus med fire vegger og tak. Bruk litt tid på denne oppgaven slik at du får tenkt gjennom hva som kreves for å bygge et enkelt hus. Et par små tips: Det er nok å bruke kommandoene vi har nevnt så langt. Du vil helst bruke flere for-løkker. For at dette skal virke må du bruke forskjellige variabler, det vil si at du må bytte ut i men andre bokstaver eller variabelnavn i de andre løkkene du lager. For å lage dør eller vinduer i huset ditt vil det enkleste være å bruke if - tester for å sjekke hvor på huset roboten bygger.

Når du har laget et enkelt hus så vis det frem til de andre. Hvilke problemer fikk dere underveis? Ingen skriver programmer riktig første gangen, og det er veldig nyttig å diskutere både hvordan man løser en utfordring, og hvilke metoder som ikke virker. I de neste stegene vil vi utvikle et mer avansert program for husbyggeroboten vår. Underveis vil vi lære om noen nye kommandoer og konsepter som gjør at programmet blir både kraftigere og enklere. Steg 2: Flyve robot Et problem du kanskje allerede har oppdaget er at roboten innimellom krasjer i ting, og derfor er opp litt andre steder enn du hadde tenkt. Et eksempel på dette er i den følge koden, hvor meningen var å bygge grunnmuren til et hus. Skriv programmet grunnmur med koden for i = 1, 4 do for j = 1, 5 do turtle.place() Lagre og kjør programmet? Ser du problemet? På slutten av byggingen av grunnmuren krasjer roboten inn i muren vi allerede har bygd, slik at den ikke får bygd den siste klossen. En smart måte å unngå dette problemet på er å la roboten fly over bakken, mens den plasserer klosser under seg med. Dette har den ekstra fordelen at vi kan la roboten gå fremover i stedet for bakover, som jo er mer logisk. Endre programmet som følger:

for j = 1, 4 do for i = 1, 5 do -- ret linje -- ret linje Når du kjører programmet nå klarer roboten å bygge hele firkanten uten å krasje! Vi vil bruke i resten av denne leksjonen. Steg 3: Bygg en vegg Når vi skal skrive større programmer (som for eksempel et som bygger et hus) er det lurt å prøve dele programmer i deloppgaver som er relativt enkle. Da kan vi heller kode disse deloppgavene som typisk er enklere enn hele det store programmet. En naturlig deloppgave når vi skal bygge et hus er å bygge en vegg. La oss starte med det! Husk å teste at robotprogrammet ditt virker etterhvert som du skriver det inn. Lag et nytt program bygghus. Vi begynner med en enkel stripe: for i = 1, 5 do For å bygge en vegg vil vi bygge flere slike striper på toppen av hverandre. En enkel måte å gjøre dette på er å la roboten rygge tilbake med for å bygge neste stripe.

for j = 1, 3 do for i = 1, 5 do for i = 1, 5 do Før vi fortsetter med programmet vårt vil vi også introdusere et par variabler som kan forklare hva tallene 3 og 5 betyr. Dette vil også gjøre det enklere for oss å re størrelsen på veggen senere. local hoyde = 3 local lengde = 5 -- ret linje -- ret linje -- ret linje Legg merke til at vi skriver hoyde med o og ikke med ø. Siden ComputerCraft er et engelsk programmeringsspråk kan ikke variabler ha navn som inneholder de norske bokstavene æ, ø og å. Prøv selv Prøv å re verdiene av variablene hoyde og lengde. Gjør roboten som du ber den om?

Steg 4: Funksjoner Vi har nå lært roboten hvordan den lager en vegg. For at vi enkelt skal kunne bruke dette senere vil vi definere som en funksjon. I praksis betyr det at vi lærer roboten en ny kommando, som vi senere kan bruke på samme måte som de innebygde kommandoene (som for eksempel ). Vi definerer en funksjon ved hjelp av den innebygde kommandoen function. function byggvegg() local hoyde = 3 local lengde = 5 Om du kjører programmet slik det er nå vil du se at roboten ikke gjør noenting. Det er fordi vi bare har definert funksjonen, det vil si vi har fortalt roboten hvordan den kan bygge en vegg. Vi har ikke sagt til roboten at den faktisk skal bygge veggen. Legg til den følge linjen helt nederst i programmet ditt. byggvegg() Nå sier vi at roboten også skal bygge veggen. En veldig nyttig ting med funksjoner er at vi kan la variablene være noe som heter parametre. I praksis betyr det at vi bestemmer verdien på variablene utenfor selve funksjonen. Endre programmet ditt slik at det ser ut som dette, pass på at du sletter de to linjene som pleide å gi verdi til hoyde og lengde.

function byggvegg(hoyde, lengde) -- ret linje byggvegg(3, 5) -- ret linje Prøv selv Endre tallene 3 og 5 i den siste linjen. Bygger roboten vegger av forskjellig størrelse? Steg 5: Bygg et hus Nå som vi vet hvordan vi bygger en vegg er vi ikke veldig langt unna å bygge et enkelt hus. La oss prøve å sette sammen fire vegger! Vi begynner enkelt. La oss prøve å bygge en vegg, snu roboten, bygge en ny vegg og så videre. Bytt ut den siste linjen byggvegg(3, 5) i programmet ditt med den følge løkken: for i = 1, 4 do byggvegg(3, 5) Hva skjer når du kjører programmet ditt?

Hmm... det ble jo litt stilig, men et hus er det definitivt ikke. Problemet er at vi ikke har tenkt gjennom hvor roboten er etter at den er ferdig med å bygge en vegg. Vi burde legge til litt kode i byggvegg() slik at roboten er klar til å bygge neste vegg. Dette kan vi gjøre ved å gå nedover i stedet for bakover etter at vi har bygd ferdig veggen. Endre funksjonen byggvegg slik at den ser slik ut: function byggvegg(hoyde, lengde) if j < hoyde then turtle.down()

Programmet vårt klarer nesten å bygge et hus av fire vegger. Men igjen får vi et lite problem med at roboten krasjer inn i ting den har bygd tidligere. Vi må rett og slett være litt mer forsiktige med at roboten ikke går mer enn den trenger. function byggvegg(hoyde, lengde) if i < lengde then if j < hoyde then for i = 1, lengde - 1 do -- ret linje turtle.down() Nå har huset vårt fått fire vegger. Vi skal snart se på hvordan vi kan bygge taket, men først skal vi se på hvordan vi kan passe på at roboten har materiale å bygge med. Steg 6: Mer byggemateriale Et problem du helt sikkert har oppdaget nå, er at roboten stadig går tom for byggemateriale. Selv om roboten har 16 slots for materiale, vil den bare bruke en av dem. Ved hjelp av funksjonene getitemcount(), getselectedslot() og select() i turtle -biblioteket kan vi gjøre noe med dette.

Vi vil nå lage en ny funksjon som sjekker at det er materiale tilgjengelig før den plasserer det ut. Nedenfor har vi byttet ut med et kall på vår egen funksjon plasser() : function byggvegg(hoyde, lengde) plasser() if i < lengde then -- ret linje if j < hoyde then for i = 1, lengde - 1 do turtle.down() function plasser() while turtle.getitemcount() == 0 do slot = turtle.getselectedslot() if slot < 16 then turtle.select(slot + 1) else turtle.select(1) for i = 1, 4 do byggvegg(3, 5) Les nøye gjennom den nye funksjonen plasser(). Skjønner du hva den gjør?

Det siste funksjonen gjør er å plassere ut en kloss med. Men før den plasserer ut klossen bruker vi turtle.getitemcount() til å sjekke om det finnes tilgjengelig byggemateriale. Hvis det er 0 klosser i sloten roboten bruker, går vi inn i while -løkken hvor vi velger en annen slot. Vi sjekker først hvilken slot roboten bruker med turtle.getselectedslot(). Hvis dette ikke er den siste sloten (slot 16), bruker vi turtle.select() til å velge den neste sloten. Hvis vi allerede er på den siste sloten velger vi heller den første. Kjør programmet. Hva skjer når roboten går helt tom for byggemateriale? Den blir da bare ståe å vente på at du skal fylle den opp med nytt materiale. Prøv selv Nå som roboten bruker flere slotter kan du eksperimentere med å legge forskjellig materiale i de forskjellige slottene. På den måten kan du for eksempel få roboten til å bygge et fargerikt hus! Steg 7: Vi trenger et tak! Nå er det på tide å lære roboten hvordan den bygger tak på huset vårt!

Før vi begynner å bygge taket vil vi flytte koden som bygger huset til en egen funksjon, på samme måte som vi gjorde med byggvegg() tidligere. Bytt den nederste løkken i koden din (den som faktisk bygger veggene dine) med den følge koden: function bygghus(hoyde, bredde, dybde) byggvegg(hoyde, bredde - 1) byggvegg(hoyde, dybde - 1) byggvegg(hoyde, bredde - 1) byggvegg(hoyde, dybde - 1) bygghus(3, 5, 4) Ser du hvorfor vi bruker bredde - 1 i stedet for bredde? Sjekk at huset ditt får riktig størrelse med denne koden! Nå kan vi lage en ny funksjon byggtak(). Legg først til denne linjen nederst i bygghus() -funksjonen din: byggtak(bredde, dybde) Selve funksjonen for å bygge taket kan være ganske lik funksjonen for å bygge en vegg. Forskjellen er at der veggen står oppover, vil taket ligge flatt. Legg til funksjonen byggtak i koden din:

function byggtak(bredde, dybde) for j = 1, dybde do for i = 1, bredde do plasser() for i = 1, bredde do turtle.turnright() Steg 8: Dører og vinduer Da er vi nesten ferdig med programmet vårt. Det som mangler på at dette ligner et skikkelig hus er dører og vinduer. Vi velger en relativt enkel løsning denne gangen, og lar roboten rett og slett lage hull der dørene og vinduene skal være. Siden vi ikke vil ha dører på alle veggene, og vil ha litt mulighet til å velge hvor vinduene skal være, lager vi to nye parametre til byggvegg() -funksjonen vår. Endre denne funksjonen som følger:

function byggvegg(hoyde, lengde, dor, vindu) -- ret linje if not (j <= 2 and i == dor or j == 2 and i == vindu) then plasser() if i < lengde then if j < hoyde then for i = 1, lengde - 1 do turtle.down() Med den nye if -testen lager vi en dør ved å ikke bygge de to nederste klossene, mens vinduene lages i høyde 2. Vi må til slutt også re koden i bygghus() som kaller byggvegg() : function bygghus(hoyde, bredde, dybde) byggvegg(hoyde, bredde - 1, 2, nil) byggvegg(hoyde, dybde - 1, nil, math.floor(dybde / 2)) byggvegg(hoyde, bredde - 1, nil, bredde - 2) byggvegg(hoyde, dybde - 1, nil, 2) byggtak(bredde, dybde)

Legg merke til at vi bruker det spesielle ordet nil hvis vi ikke skal lage en dør eller et vindu på en gitt vegg. Skjønner du hvor vinduene på de forskjellige veggene plasseres? Steg 9: Forskjellige hus Vi har nå laget et program som gjør at roboten vår er en husbyggerobot! Vi skal bare gjøre en ørliten forbedring før vi sier oss helt ferdige! Nå har vi kodet hvor stort huset skal være inn i den siste linjen i programmet vårt, bygghus(3, 5, 4). Det betyr at om vi vil bygge et større eller mindre hus, må vi forandre på programmet. Dette er tungvint. Det vil være bedre om vi kan fortelle hvor stort huset skal være når vi starter programmet. Bytt ut linjen bygghus(3, 5, 4) med det følge: local targs = {... } if #targs ~= 3 then print('skriv: bygghus <høyde> <bredde> <dybde>') print('f.eks. bygghus 3 5 4') return bygghus(tonumber(targs[1]), tonumber(targs[2]), tonumber(targs[3])) Dette kan virke litt mystisk, og vi skal ikke forklare alt som skjer her nå. Vi vil komme tilbake til dette i senere leksjoner. Om du prøver å kjøre programmet ditt ved å bare skrive bygghus nå vil du få en melding om at du også må oppgi høyde, bredde og dybde. Prøv for eksempel å skrive bygghus 3 5 4 for å starte husbyggeroboten. Lisens: CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0/deed)