đ Oppstart og oppsummering (10 min)
- Recap av dag 1-2: variabler, lĂžkker, if-setninger, agenten
- Dagens mÄl: Lage en dÞr som Äpnes og lukkes med knapper!
đ€ Konsept: Kommandoblocker og Python som jobber sammen (20 min)
Hva er en kommandoblokk?
- En spesiell blokk som kan kjĂžre kommandoer
- Kan plassere og fjerne blokker automatisk
- Aktiveres av knapper eller redstone
Kommandoblocker kan plassere blokker:
/setblock x y z block_type
Eksempel: /setblock 100 70 200 glass plasserer glass pÄ koordinat (100, 70, 200)
Python kan sjekke om blokker er der:
blocks.test_for_block(GLASS, world(100, 70, 200))
- Returnerer
Truehvis glass-blokk er pÄ koordinatet - Returnerer
Falsehvis det ikke er der
- Kommandoblokk plasserer en blokk pÄ koordinat X
- Python sjekker samme koordinat X for samme blokk-type
- Python reagerer nÄr den "ser" blokken!
Viktig: Koden mÄ kjÞre i bakgrunnen:
def loop():
while True:
# Din kode her
loops.run_in_background(loop)
đŻ Oppgave 1: FĂ„ tak i kommandoblokk og test (15 min)
- FĂ„ tak i kommandoblokk:
/give @p command_block - Plasser kommandoblokken pÄ bakken
- HÞyreklikk pÄ den og skriv:
/setblock 100 70 200 glass - FĂ„ en knapp:
/give @p stone_button - Plasser knappen pÄ siden av kommandoblokken
- Test at glass-blokk plasseres pÄ koordinat (100, 70, 200) nÄr du trykker!
- Du mÄ velge dine egne koordinater!
- Skriv ned koordinatene du bruker!
- Bruk F3 for Ă„ se koordinatene dine
/setblock [dine_koordinater] glass
Eksempel: /setblock 100 70 200 glass
Hvordan teste: GÄ til koordinat (100, 70, 200) og se om det dukker opp en glass-blokk nÄr du trykker knappen!
đŻ Oppgave 2: Python lytter og reagerer (15 min)
Oppgave: Lag Python-kode som oppdager glass-blokken og skriver i chatten
Bruk SAMME koordinater og SAMME blokk-type som i oppgave 1!
# Lytter etter glass-blokk og reagerer
def lytter():
while True:
# Bytt ut 100 70 200 med dine koordinater!
if blocks.test_for_block(GLASS, world(31, -60, -20)):
player.say("Jeg sÄ glass-blokken!")
# Fjern blokken sÄ meldingen ikke kommer hele tiden
blocks.place(AIR, world(31, -60, -20))
# Kode for Ă„ fjerne dĂžra
blocks.fill(AIR, world(31, -60, -17), world(31, -58, -15), FillOperation.REPLACE)
# Start lytting i bakgrunnen
loops.run_in_background(lytter)
- KjĂžr Python-koden
- Trykk pÄ knappen
- Du skal se meldingen i chatten!
â Pause (10 min)
Tid for en liten hvil fĂžr vi bygger den store dĂžren!
đŻ Oppgave 3: Bygg en dĂžrĂ„pning (10 min)
- Bygg vegger rundt deg med en dÞrÄpning
- DÞrÄpningen skal vÊre 2 blokker bred og 3 blokker hÞy
- Skriv ned koordinatene for dÞrÄpningen
- StÄ i dÞrÄpningen og bruk F3
- DÞrÄpning fra (x1, y1, z1) til (x2, y2, z2)
- Eksempel: fra (95, 70, 195) til (96, 72, 195)
đŻ Oppgave 4: Lukke dĂžren med kode (15 min)
Oppgave: Endre Python-koden sÄ den fyller dÞrÄpningen med blokker i stedet for Ä skrive i chatten
- Bruk
blocks.fill()for Ä fylle omrÄdet - Husk Ä bruke koordinatene til dÞrÄpningen din
# Lytter og lukker dĂžren
def lukke_dor():
while True:
# Bytt ut med dine koordinater!
if blocks.test_for_block(GLASS, world(100, 70, 200)):
player.say("Lukker dĂžren!")
# Fyll dÞrÄpningen med stein (bytt koordinater!)
blocks.fill(COBBLESTONE, world(95, 70, 195), world(96, 72, 195), FillOperation.REPLACE)
# Fjern glass-blokken
blocks.place(AIR, world(100, 70, 200))
# Start systemet
loops.run_in_background(lukke_dor)
đȘ Hovedoppgave: Komplett dĂžr-system (30 min)
- Lag en andre kommandoblokk med en andre knapp
- Denne skal plassere en ANNEN type blokk pÄ nye koordinater
- Python skal lytte pÄ den nye blokken og à PNE dÞren (fjerne blokkene)
- Test at du kan bÄde Äpne og lukke dÞren!
- Ny kommandoblokk: Plasser en ny kommandoblokk
- Ny kommando:
/setblock 105 70 205 stone - Koble til knapp: Plasser en knapp pÄ den nye kommandoblokken
- Utvid Python-koden: Legg til lytting for stone-blokk
# Komplett dÞr-system med Äpne og lukke
def door_system():
while True:
# Lukke-dĂžr knapp (glass-blokk)
if blocks.test_for_block(GLASS, world(100, 70, 200)):
player.say("đ Lukker dĂžren!")
# Fyll dÞrÄpningen med stein (endre koordinater!)
blocks.fill(COBBLESTONE, world(95, 70, 195), world(96, 72, 195), FillOperation.REPLACE)
blocks.place(AIR, world(100, 70, 200)) # Fjern signalblokk
# Ă
pne-dĂžr knapp (stone-blokk)
if blocks.test_for_block(STONE, world(105, 70, 205)):
player.say("đ Ă
pner dĂžren!")
# Fjern blokkene fra dÞrÄpningen (endre koordinater!)
blocks.fill(AIR, world(95, 70, 195), world(96, 72, 195), FillOperation.REPLACE)
blocks.place(AIR, world(105, 70, 205)) # Fjern signalblokk
# Start dĂžr-systemet
loops.run_in_background(door_system)
đ Ekstra utfordringer:
- Lett: Endre dĂžrmaterialet til glass eller jern
- Medium: Lag en dĂžr som lukker seg automatisk etter 5 sekunder
- Vanskelig: Lag en hemmelig dĂžr som krever et "passord" (3 knapper i riktig rekkefĂžlge)
đ§ Viktige tips og feilsĂžking (15 min)
- Same koordinater: Python mÄ lytte pÄ SAMME sted som kommandoblokken plasserer
- Same blokk-type: Hvis kommandoblokk plasserer GLASS, mÄ Python lytte etter GLASS
- Fjern blokken: Alltid
blocks.place(AIR, koordinat)for Ă„ fjerne signalblokk
đ§ Vanlige feil og lĂžsninger:
â Forskjellige koordinater
mellom kommandoblokk og Python
LĂžsning: Dobbelsjekk tallene!
â Glemmer Ă„ fjerne blokken
da kjĂžrer koden hele tiden
LĂžsning: blocks.place(AIR, koordinat)
â Feil blokk-type
kommandoblokk plasserer glass, Python lytter etter stone
LĂžsning: Bruk samme blokk-type
â Koden kjĂžrer ikke
glemmer loops.run_in_background()
LĂžsning: Husk Ă„ starte loopen!
- Bruk F3 for Ä se hvor du stÄr
- Skriv ned alle koordinater du bruker pÄ papir
- Test med
/tp x y zfor Ă„ teleportere til koordinater - Bruk
/fill x1 y1 z1 x2 y2 z2 airfor Ä rydde omrÄdet
đïž Prosjektarbeid: Lag din egen interaktive bygning (20 min)
Velg ett av disse prosjektene:
đ Smart hus
Lag et hus med flere dÞrer som Äpnes med forskjellige knapper
đ° Slott med portkullis
Bygg et slott med en stor port som kan Äpnes og lukkes
đ Bankboks
Lag en sikker boks som bare Äpnes med riktig "passord"
đȘ Magisk scene
Lag en scene hvor ting dukker opp og forsvinner
# Smart hus med flere dĂžrer
def smart_house():
while True:
# FrontdĂžr (rĂžd knapp = emerald signal)
if blocks.test_for_block(EMERALD_BLOCK, world(100, 70, 200)):
player.say("đȘ FrontdĂžr Ă„pnes!")
blocks.fill(AIR, world(95, 70, 190), world(96, 72, 190), FillOperation.REPLACE)
blocks.place(AIR, world(100, 70, 200))
# BakdÞr (blÄ knapp = diamond signal)
if blocks.test_for_block(DIAMOND_BLOCK, world(110, 70, 200)):
player.say("đȘ BakdĂžr Ă„pnes!")
blocks.fill(AIR, world(95, 70, 210), world(96, 72, 210), FillOperation.REPLACE)
blocks.place(AIR, world(110, 70, 200))
# Lukk alle dĂžrer (gul knapp = gold signal)
if blocks.test_for_block(GOLD_BLOCK, world(105, 70, 205)):
player.say("đ Alle dĂžrer lukkes!")
blocks.fill(COBBLESTONE, world(95, 70, 190), world(96, 72, 190), FillOperation.REPLACE)
blocks.fill(COBBLESTONE, world(95, 70, 210), world(96, 72, 210), FillOperation.REPLACE)
blocks.place(AIR, world(105, 70, 205))
loops.run_in_background(smart_house)
đ Oppsummering av dag 3 (10 min)
đ Hva har vi lĂŠrt i dag?
- Kommandoblocker kan plassere blokker pÄ spesifikke koordinater
- Python kan lytte etter blokker med
blocks.test_for_block() - Vi kan lage systemer hvor knapper styrer dĂžrer
- Viktig Ă„ bruke samme koordinater og blokk-typer
- Kombinere flere knapper for komplekse systemer
- Lage monstre som spawner nÄr du beveger deg
- Bygge farlige omrÄder og feller
- Kombinere bevegelse med automatisering