Introduksjon til ComputerCraft
Skrevet av: Geir Arne Hjelle
Introduksjon
ComputerCraft er en mod til Minecraft, som gir deg muligheten til å bygge og programmere datamaskiner og roboter inne i Minecraft-verdenen.
Vi begynner med å bygge en enkel datamaskin. Etter å ha brukt litt tid på å bli kjent med hvordan datamaskinen virker, bruker vi den til å låse opp en dør ved hjelp av passord. Etter at vi har klart dette begynner vi å se på datamaskiner som kan bevege seg, altså roboter! Disse kan vi bruke til både å grave og bygge ting for oss.
Steg 1: Vår første datamaskin
Vi begynner med å lage en datamaskin.
I utgangspunktet er det mye enklere å starte i Creative Mode når vi skal lære å bruke datamaskinene, siden vi da slipper å bruke tid på å samle materiale og slåss mot monstre. Vi vil derfor i fortsettelsen anta at du er i Creative Mode, og kan plukke akkurat det du trenger i inventory'et ditt.
Men først, for å vise at en datamaskin kan bygges på vanlig måte i Minecraft:
Sjekkliste
I Creative Mode kan du også få tak i datamaskiner ved å trykke E
, deretter klikke >
for å gå til neste side, og til slutt velge fanen med datamaskinsymbolet.
ComputerCraft-datamaskiner
Høyreklikk en datamaskin for å starte den opp. Den vil åpne en svart skjerm med teksten CraftOS
på toppen. Dette er datamaskinens kommandolinje, og vi vil bruke den til å styre datamaskinen med.
Sjekkliste
-
Du får nå se noen tips om hvordan du kan finne ut mer om datamaskinen. For eksempel kan du skrive
programs
for å se en liste over hvilke programmer som er på datamaskinen, ellerhelp programming
for å få noen tips til hvordan man programmerer datamaskinen. -
Mange av disse programmene er enkle programmer som lar deg undersøke datamaskinen nærmere. Etter kurset kan du prøve å utforske flere av disse programmene.
Steg 2: Vårt første program
Det er nå på tide at vi skriver vårt første program.
Det er en lang tradisjon blant programmerere at det første programmet de lager når de lærer et nytt språk skriver en trivelig melding til skjermen. Vi følger den tradisjonen og begynner med et program som heter heiverden
.
Sjekkliste
-
print('Hei verden!')
Etter at du har skrevet dette så trykker du på Ctrl-tasten og velger
Save
. Deretter trykker du Ctrl en gang til og velgerExit
.
Prøv selv
Klarer du å endre på programmet slik at det for eksempel sier hei til deg, eller kanskje til de som sitter ved siden av deg?
Prøv å skriv edit heiverden
en gang til. Da åpner programmet ditt seg igjen, og du kan endre på det slik at det sier noe annet. Som tidligere må du bruke Ctrl-tasten for å gå til menyen slik at du kan lagre og avslutte endringene.
Steg 3: Datamaskiner og Redstone
Vi skal nå bruke datamaskinen til å åpne en dør for oss, og kanskje etterhvert legge på et passord på døren.
Datamaskinene i ComputerCraft bruker et programmeringsspråk som heter Lua. Dette er et ganske enkelt og fleksibelt språk som ofte brukes inne i andre programmer. For eksempel kan også deler av Photoshop, Wikipedia og World of Warcraft programmeres med Lua.
Lua
Lua ble opprinnelig laget i Brasil på begynnelsen av 1990-tallet. På universitetet i Rio de Janeiro brukte de tidligere et språk som het Simple Object Language (SOL). Ordet lua er portugisisk og betyr måne, noe de syntes var et fint navn som passet sammen med SOL.
Sjekkliste
Vi vil bruke Redstone for å kontrollere døren. Redstone er et materiale som kan overføre energi i Minecraft. La oss først sette opp en datamaskin ved siden av en dør.
Vi skal nå prøve å skrive noen kommandoer direkte i Lua. Dette er en fin måte å teste enkle ting på.
-
Lua kjenner alle de vanlige matematikk-operasjonene. Prøv for eksempel
17 - 8
,3 * 4
eller22 / 7
. Kjenner du igjen hva hver av disse betyr? -
Denne kommandoen skal åpne døren til venstre for datamaskinen. Her forteller
left
hvilken side av datamaskinen døren står på. Du kan også bruke for eksempelright
,top
ellerbottom
.Dette er et eksempel på å kalle en funksjon, noe vi gjør ofte når vi programmerer. I dette tilfellet heter funksjonen
setOutput
og den hører hjemme iredstone
-biblioteket.
Funksjoner
Alle programmeringsspråk lar deg lage noe som kalles funksjoner. Dette er en samling instruksjoner som utføres sammen slik at det blir enklere å gjøre vanskelige ting. Lua kommer med innebygde funksjoner. Vi har så langt sett print
og redstone.setOutput
som eksempler på dette. Det går også an å lage egne funksjoner.
Sjekkliste
Steg 4: Passordlås på en dør
Vi skal nå bruke redstone-biblioteket til å lage en passordlås på døra. Underveis vil vi også lære litt om tester og løkker.
Sjekkliste
-
local passord = 'kodeklubben' print('Passordet er ' .. passord .. '!')
Pass på at du skriver de to punktumene
..
riktig. Disse betyr at vi setter sammen tekst. -
Programmet forteller deg hva passordet er. Klarer du å endre passordet til noe annet? Kanskje til
ComputerCraft
eller til navnet ditt?
Variabler
Vi har nå laget en variabel. Variabelen passord
husker hva passordet skal være. På denne måten blir det enkelt å endre passordet senere. Ordet local
foran variabelen sier at vi bare skal huske variabelen i dette programmet (lokalt).
Sjekkliste
-
local passord = 'kodeklubben' print('Hva er passordet?') -- endret linje svar = read() -- ny linje
Lagre, avslutt, og kjør programmet på nytt. Nå vil programmet spørre deg om passordet. Skjer det noe når du svarer? Funksjonen
read
brukes for å lese ting du skriver på tastaturet, men programmet gjør foreløbig ingenting med svaret ditt. -
local passord = 'kodeklubben' print('Hva er passordet?') svar = read() if svar == passord then -- ny linje print('Riktig, passordet er ' .. passord) -- ny linje else -- ny linje print('Feil, passordet er ikke ' .. svar) -- ny linje end -- ny linje
Kjør programmet igjen. Hva skjer når du svarer riktig? Hva skjer når du svarer feil? Skjønner du hvorfor?
-
local passord = 'kodeklubben' print('Hva er passordet?') svar = read() if svar == passord then redstone.setOutput('left', true) -- endret linje sleep(5) -- endret linje redstone.setOutput('left', false) -- endret linje end
Kjør programmet. Hva skjer nå når du skriver riktig passord?
Funksjonen
sleep
gjør at datamaskinen sover, det vil si gjør ingenting. I dette tilfellet sover datamaskinen i 5 sekunder, før energien skrus av igjen og døren lukker seg. -
local passord = 'kodeklubben' while true do -- ny linje print('Hva er passordet?') svar = read() if svar == passord then redstone.setOutput('left', true) sleep(5) redstone.setOutput('left', false) end end -- ny linje
Det er bare èn ny ting her som vi ikke har sett tidligere, nemlig en
while
-løkke. Slike løkker vil fortsette å gjøre ting om igjen så lenge noe er sant. I vårt tilfelle er dette noe verdientrue
som alltid er sann. Det betyr at vi har laget en evig løkke. Dette programmet vil fortsette å spørre oss om passordet for alltid!
Avslutte programmer
For å avslutte dette programmet holder du inne Ctrl og T samtidig i cirka ett sekund. Da avbrytes programmet, og teksten Terminated
skrives på skjermen. Dette fungerer både her og i andre programmer.
Sjekkliste
-
local passord = 'kodeklubben' while true do term.clear() -- ny linje term.setCursorPos(1, 1) -- ny linje print('Hva er passordet?') svar = read('*') -- endret linje if svar == passord then redstone.setOutput('left', true) sleep(5) redstone.setOutput('left', false) end end
Gratulerer, du har allerede lært ganske mye om hvordan man programmerer datamaskiner med ComputerCraft i Minecraft! Prøv gjerne å forandre noen av programmene vi har laget. Kan du lage dem enda bedre?
Steg 5: Vår første robot
Vi skal nå bli kjent med roboter og se noe av det de kan brukes til.
En robot er en datamaskin som kan bevege seg. I ComputerCraft kan vi også gi robotene forskjellige verktøy slik at de for eksempel kan grave, bygge, slåss og så videre.
Vi begynner likevel med en helt enkel robot:
Sjekkliste
I Creative Mode finner du også robotene ved å trykke E
, deretter >
og til slutt velge fanen med datamaskinsymbolet. Robotene heter Turtle i ComputerCraft.
Turtles
Navnet Turtle betyr skilpadde på norsk. Grunnen til at disse robotene kalles skilpadder er historisk. For nesten 70 år siden bygde William Grey Walter et par roboter som kunne bevege seg rundt. Disse beveget seg ganske sakte, og var lave og skallformet. De fikk derfor etterhvert kallenavnet skilpadder.
Senere ble måten disse skilpaddene beveget seg på (vi skal se hvordan snart) tatt inn i forskjellige programmeringsspråk, spesielt som en måte å tegne på. Språket Logo er nok det som er mest kjent for slik skilpaddegrafikk, men nesten alle programmeringsspråk støtter dette i dag, inkludert for eksempel Scratch, Python og ComputerCraft.
Sjekkliste
På samme måte som med datamaskiner starter du roboter ved å høyreklikke på dem. Dette vil starte kommandolinjen til roboten.
-
Dette viser hvilke programmer denne roboten kjenner til. Hvis du sammenligner med programmene en datamaskin kjenner til vil du se at det er mange av de samme programmene, men at roboten også kan noen ting som datamaskinen ikke kan.
-
Roboten begynner nå å danse! Trykk Esc-knappen for å stenge kommandolinjen, slik at du ser roboten. Blir du imponert?
-
Hvis du vil kan du også la roboten fortsette å danse. Lag i så fall en ny robot som du kan bruke i de neste oppgavene.
Steg 6: Roboter og skilpadder
Vi vil nå se hvordan vi kan få robotene våre til å bevege seg rundt.
Som nevnt i boksen Turtles ovenfor beveger vi robotene våre på en måte som ligner slik noen spesielle skilpadderoboter ble kontrollert for nesten 70 år siden. Dette gjør vi ved å bruke programmet go
for å bevege robotene rundt.
Sjekkliste
-
Roboter bruker fuel for å bevege seg. De kan bruke stort sett samme materiale som en Furnace som fuel, for eksempel er Coal eller Blaze Rod fine å bruke.
-
Legg merke til at en kull blir borte fra robotens inventory. Roboten svarer også ved å fortelle om sin fuel level. Dette tallet forteller hvor langt roboten kan bevege seg før den går tom for fuel igjen.
-
Roboten vil nå spise opp alt kullet, og deretter rapportere at den er klar til å gå ganske så langt!
-
Flytter roboten din seg? Det kan være litt vanskelig å se hva som er fram og bak på en robot. Et triks kan være å tenke på den lange, smale sprekken som øynene til roboten. Altså at den siden med sprekken er foran.
Finne hjelp
Datamaskiner og roboter har et innebygd hjelpesystem. For å se hvordan det virker kan du skrive help
og trykke enter. Dette gir deg en rask introduksjon til nyttige hjelpekommandoer. Legg merke til at du kan skrive help <program>
for å få hjelp om et spesielt program. Da må du bytte ut <program>
med navnet på programmet. For eksempel kan du skrive help go
for å finne hjelp om go
-programmet.
Det finnes selvsagt også en del hjelp på Internett. Et bra sted å starte er ComputerCraft Wiki'en: http://computercraft.info/wiki/.
Sjekkliste
-
Dette viser oss at vi kan bruke
go forward
,go back
,go up
,go down
,go left
oggo right
for å flytte roboten rundt. I tillegg ser vi at vi kan bruke tall for at roboten skal flytte seg flere steg. -
Hvordan kan vi få roboten til å bevege seg sidelengs?
-
Hva skjer dersom du ber roboten gå gjennom bakken, gjennom en vegg, eller om du står i veien for roboten?
Steg 7: Gruverobot
Hvis vi gir roboter de riktige verktøyene kan de grave, bygge og slåss for oss.
Vi skal nå bruke en gruverobot som kan grave for oss.
Sjekkliste
-
Skriv
excavate 3
og trykk enter.Ta et steg tilbake og se på mens roboten graver. Roboten vil fortsette å grave til den går tom for fuel eller kommer til grunnfjellet, Bedrock.
-
Når roboten er ferdig å grave kommer den tilbake dit den startet. Der gir den fra seg alt materialet den har gravd ut slik at du kan plukke det opp om du vil.
Steg 8: Robotprogrammer
Vi skal nå lære hvordan vi kan kontrollere roboter i våre egne programmer.
Når vi skriver egne programmer som styrer robotene bruker vi kommandoer fra turtle
-biblioteket.
Sjekkliste
-
Du får nå se en ganske lang liste med kommandoer som vi kan bruke. Vi vil vise frem noen av disse. Du kan senere teste alle sammen på egen hånd, og se om du skjønner hvordan de alle virker.
For å komme ut av listen kan du for eksempel holde mellomromtasten nede en liten stund.
-
Husk at du kan trykke Esc-knappen for enklere å se hva roboten gjør. Høyreklikk på roboten for å komme tilbake til Lua-tolkeren.
-
turtle.forward()
,turtle.back()
,turtle.turnLeft()
,turtle.turnRight()
,turtle.up()
,turtle.down()
.
Prøv selv
Lag en liten kloss litt unna roboten din, omtrent som på bildet under. Klarer du å bruke turtle
-kommandoene over til å plassere roboten på toppen av klossen?
Steg 9: Up, up, up, and away ...
Kan vi klare å få roboten til å bygge for oss?
Ett av poengene med roboter er at de kan gjøre arbeid for oss. I Minecraft betyr det at vi vil at robotene for eksempel skal kunne grave eller bygge.
Sjekkliste
-
Bygde roboten en gresskloss foran seg? Da har du gjort alt riktig. Hvis dette ikke skjedde kan du sjekke
1: at du har startet
lua
,2: at roboten har fuel,
3: at roboten har byggemateriale,
4: at det ikke står noe foran roboten (husk at den smale sprekken er øynene til roboten), og
5: at boksen med byggemateriale i robotens inventory er merket, det vil si at den har en litt tykkere ramme rundt seg enn de andre boksene.
-
Du skal få svaret
true
som betyr at roboten merker at den har noe foran seg. -
Siden roboten nå ikke har noe rett foran seg får du svaret
false
.
I Steg 10 skal vi se hvordan vi kan bruke place()
og detect()
sammen for å lage en ganske smart byggerobot.
Men først, en ting vi kunne gjøre med go
var å flytte roboten flere steg ved å skrive et tall, for eksempel go forward 3
. Det samme fungerer ikke med turtle
-biblioteket. I stedet må vi bruke løkker.
Sjekkliste
-
Skriv
for i = 1, 5 do turtle.back(); end
i Lua-tolkeren. Flytter roboten din seg 5 steg bakover?
for
-løkker
En for
-løkke brukes ofte når vi vet hvor mange ganger vi vil gjøre en bestemt ting. I eksempelet over så vi at roboten flyttet seg 5 ganger bakover. En nyttig ting er at vi også kan følge med på hvor i løkken vi er, fordi i
i koden over er en variabel. For eksempel kan vi skrive
for i = 1, 5 do print(i); end
Dette vil skrive tallene 1, 2, 3, 4, 5 til skjermen på hver sin linje.
Vi kan også bruke andre variabelnavn enn i
, og vi kan starte på andre tall enn 1
:
for tall = 10, 20 do print(tall); end
Sjekkliste
-
Prøv
for i = 1, 5 do turtle.back(); turtle.place(); end
-
Skriv
for i = 1, 60 do turtle.up(); turtle.place(); end
Oops! Vi glemte å fortelle roboten at den skulle komme ned når den blir ferdig med å bygge. Hvordan skal vi få tak i den igjen?
Steg 10: Bygg en trapp
Kan vi skrive et program som kan hjelpe oss å hente ned den forsvunne roboten?
Når vi skal gjøre ting som er litt kompliserte er det som regel enklere å skrive et program, i stedet for å bare gi enkeltkommandoer i Lua-tolkeren. La oss prøve å lage et program som kan bygge en trapp opp til toppen av det høye tårnet.
Før vi begynner på utfordringen det er å bygge en kjempehøy trapp, la oss øve oss, og teste programmet på et mindre tårn.
Sjekkliste
-
turtle.detect()
Lagre og avslutt ved å bruke Ctrl-tasten.
-
Vi kan bruke
turtle.detect()
til å finne toppen av tårnet. -
while turtle.detect() do -- endret linje turtle.up() -- ny linje end -- ny linje
Lagre og kjør programmet ditt. Klatrer roboten til toppen av det lille tårnet?
-
Utvid programmet ditt slik:
while turtle.detect() do turtle.up() end while not turtle.detectDown() do -- ny linje turtle.down() -- ny linje end -- ny linje
Vi sier at så lenge roboten ikke har en kloss under seg kan den ta et steg ned. Kommer roboten ned igjen når du kjører programmet?
-
while turtle.detect() do turtle.up() end while not turtle.detectDown() do turtle.down() turtle.back() -- ny linje turtle.place() -- ny linje end
Virker det? Lager roboten en trapp?
-
Pass på at roboten fortsatt har nok fuel, og fyll opp med byggemateriale. Kjør den bort til det høye tårnet, og la den
byggTrapp
!
Gratulerer! Du har nå programmert en robot! Legg merke til at siden byggTrapp
-programmet vårt bruker detect
-kommandoer kan det bygge trapper opp alle slags tårn og bratte fjellsider!
Prøv selv
Vi har nå laget et program som kan bygge trapper oppover. Kan du lage et program som kan grave trapper ned under bakken?
Lag et program som heter gravTrapp
. For å gjøre dette trenger du en Mining Turtle.
Se på kommandoene turtle.dig()
og turtle.digDown()
. Disse vil grave henholdsvis foran og under roboten. turtle.digUp()
kan også være nyttig om du vil lage nok plass til at man kan gå ned i trappen.
For å vite hvor langt ned roboten skal grave, er det enkleste å bruke en for
-løkke. For eksempel kan du si at roboten skal grave 10 trinn nedover.
Hvis du vil ha en utfordring kan du la roboten grave nedover til den finner for eksempel grunnfjellet, Bedrock. For å gjøre dette kan du legge en Bedrock øverst til venstre i inventory'et til roboten. Deretter kan du bruke turtle.select(1)
og turtle.compareDown()
for å finne ut om roboten har kommet ned til grunnfjellet.
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!