Introduksjon til ComputerCraft

Skrevet av: Geir Arne Hjelle

Kurs: Computercraft
Tema: Tekstbasert, Minecraft
Fag: Programmering, Teknologi
Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole
Til lærerveiledningLast ned PDF

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.

Bilde av en datamaskin og en robot

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:

checkSjekkliste

  • Bilde av hvordan crafte en datamaskin i minecraft

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.

checkSjekkliste

  • 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, eller help 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.

checkSjekkliste

  • 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 velger Exit.

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.

checkSjekkliste

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.

  • Bilde av en vegg med en dør og en datamaskin

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 eller 22 / 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 eksempel right, top eller bottom.

    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 i redstone-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.

checkSjekkliste

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.

checkSjekkliste

  • 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).

checkSjekkliste

  • 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 verdien true 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.

checkSjekkliste

  • 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:

checkSjekkliste

  • Bilde av hvordan crafte en robot i minecraft

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.

checkSjekkliste

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.

checkSjekkliste

  • 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.

  • Bilde av inventory'et til roboten
  • 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/.

checkSjekkliste

  • Dette viser oss at vi kan bruke go forward, go back, go up, go down, go left og go 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.

checkSjekkliste

  • 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.

checkSjekkliste

  • 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?

Bilde av en robot ved siden av en klosse

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.

checkSjekkliste

  • 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.

checkSjekkliste

  • 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

checkSjekkliste

  • Prøv

    for i = 1, 5 do turtle.back(); turtle.place(); end
    
  • Skriv

    for i = 1, 60 do turtle.up(); turtle.place(); end
    
    Bilde av en robot som bygger et høy tårn

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.

checkSjekkliste

  • Bilde av et tårn som er tre klosser høyt
  • 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!

    Bilde av en robot som har bygget en høy trapp

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.

Lisens: CC BY-SA 4.0

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!