Lær Python og elektronikk med Minecraft Pi Edition

Har du alltid ønsket å lære å kode, men visste ikke hvor du skal begynne? Lær hvordan du kontrollerer Minecraft på Raspberry Pi ved hjelp av Python og noen enkle elektronikk.

Har du alltid ønsket å lære å kode, men visste ikke hvor du skal begynne?  Lær hvordan du kontrollerer Minecraft på Raspberry Pi ved hjelp av Python og noen enkle elektronikk.
Annonse

Har du alltid ønsket å lære å kode, men visste ikke hvor du skal begynne? Lær hvordan du kontrollerer Minecraft på Raspberry Pi ved hjelp av Python og noen enkle elektronikk. Her er sluttresultatet:

Du vil trenge en Pi 2 eller nyere for dette prosjektet, og mens du kan fullføre de fleste oppgavene via kommandolinjen over Secure Shell (SSH), vil denne opplæringen fokusere på koding direkte på Pi.

Raspberry Pi 3 Modell B Hovedkort Raspberry Pi 3 Modell B Hovedkort Kjøp nå På Amazon $ 29.99

Ny på Minecraft? Ikke bekymre deg - her er vår Minecraft Beginners Guide The (Latecomer) Begynners Guide til Minecraft The (Latecomer) Begynner's Guide To Minecraft Hvis du er sent til festen, ikke vær redd - denne omfattende beginners guide har du dekket. Les mer .

Introduksjon til Minecraft Pi

Minecraft-Pi-Meny

Minecraft for Raspberry Pi har blitt utviklet for læring og tinkering (og det er gratis). Den leveres med et Application Programming Interface (API) som gir en måte å kode enkelt å snakke med Minecraft. Det er glimrende for å lære å kodes i Python, så vel som å komme i gang med elektronikk. Begynnerens elektronikk: 10 ferdigheter du trenger å vite Nybegynnerens elektronikk: 10 ferdigheter du trenger å vite Mange av oss har aldri engang rørt et loddestang - men å gjøre ting kan utrolig givende. Her er ti av de mest grunnleggende DIY elektronikk ferdighetene for å hjelpe deg med å komme i gang. Les mer .

Hva er Python?

Python er et programmeringsspråk. Det tolkes, noe som betyr at når du kjører en Python-fil eller et program, må datamaskinen først gjøre en liten bit av arbeidet til filen først. Ulemper er at det kan betraktes sakte i forhold til kompilerte språk.

Fordelene med tolket språk er kodenes hastighet og deres vennlighet. Du trenger ikke å fortelle datamaskinen hvilke data du vil lagre, bare at du vil lagre noe og datamaskinen vil finne ut hva du skal gjøre. Det er unntak, selvfølgelig, og dette er en noe forenklet visning, men programmering bør være morsomt! Hvis du begynner å grave inn i komplekse tekniske detaljer, kan det bli litt mektig.

Python er saksfølsom. Dette er viktig å vite, da Python ikke vil gjenkjenne gjenstander selv om de staves riktig hvis saken er feil. "Dosomething ()" virker ikke hvis metoden faktisk heter "DoSomething ()". Python bruker også innrykk . Andre programmeringsspråk kan ikke bryr seg om hvor mange ledd kodene dine har, mens Python bryr seg. Inndelinger brukes til å fortelle Python hvor kode tilhører. Andre språk kan bruke "Curly Braces" ({}) til gruppekode - Python bruker ikke disse. Python bruker en hash (#) for kommentarer, og kommentarer brukes til å fortelle andre utviklere eller folk som ser på koden hva en bestemt del gjør, eller hvorfor det er nødvendig. Python ignorerer alt etter en hash.

Endelig er det to hovedversjoner av Python - Python 2.7.x og Python 3.x. Det er noen forskjeller mellom de to (hva er forskjellene?). Denne opplæringen vil bruke Python 3.

Førstegangs oppsett

Å sørge for at Pi er installert og kjører Raspbian Slik installerer du et operativsystem til din Raspberry Pi Slik installerer du et operativsystem til din Raspberry Pi Her er hvordan du får et nytt OS installert og kjører på din Pi - og hvordan du kloner ditt perfekte oppsett for rask katastrofegjenoppretting. Les mer, det er ikke mye initialoppsett som trengs.

Åpne Terminal ( Meny> Tilbehør> Terminal ) og kjør denne kommandoen. Det er alltid god praksis å holde oppbevaringslisten oppdatert, og dette vil laste ned den nyeste listen over programmer (det vil ikke laste ned programmene selv, dette hjelper Pi å vite hvilke programmer som kalles og hvor de skal finne dem).

sudo apt-get update 

Oppdater nå Pi (dette kan ta en stund):

 sudo apt-get upgrade 

Python og Minecraft Pi er allerede installert, men hvis Minecraft Pi ikke er installert for noen grunn, er det enkelt å installere 5 måter å installere programvare på Raspberry Pi 5 måter å installere programvare på Raspberry Pi For å gjøre noe med en Raspberry Pi, vil du trenger å vite hvordan du installerer et operativsystem, og programvare for å kjøre på den. Hvis du er ny på Linux, kan dette være skremmende. Les mer :

 sudo apt-get install minecraft-pi 

Naviger til dokumenter og opprett en ny mappe som heter "Minecraft":

 cd Documents/ mkdir Minecraft 

Du kan se innholdet i denne nye mappen:

 ls 

Her er et tips - hvis du begynner å skrive og trykke på TAB-tasten, vil kommandolinjen forsøke å autofullfør setningen for deg.

Du kan undersøke stien til gjeldende katalog ved hjelp av pwd, som står for Print Work Directory:

 pwd 

Start Minecraft ved å gå til Meny> Spill> Minecraft Pi . Du trenger dette løpende, men vil komme tilbake til det senere.

Åpne Python 3 fra Meny> Programmering> Python 3 (IDLE) . Dette programmet gir deg mulighet til å kjøre Python-kommandoer og skrive programmer.

Nå kan du skrive dine Python-kommandoer her, men det er ikke veldig praktisk. Gå til Arkiv> Ny fil og deretter Arkiv> Lagre og lagre dette i mappen du opprettet tidligere. ( Dokumenter> Minecraft ). La oss kalle det " hello_world.py ". Du trenger ikke å bruke .py-utvidelsen, dette vil bli lagt til automatisk, men det er god praksis.

Hvis du bytter tilbake til terminalen, og navigerer inn i Minecraft-mappen, bør du se filen du nettopp opprettet:

 cd Minecraft/ ls 

Du kan kjøre denne filen slik:

 python hello_world 

Legg merke til hvordan "python" er alt små bokstaver. Dette må være før filnavnet, da det forteller Pi at den følgende filen er Python, så den bør utføres som sådan.

Bytt tilbake til Python-editoren og skriv:

 print "Hello, World!" 

Lagre denne filen og kjør den igjen - du bør nå se "Hei, Verden!" Vises i kommandolinjen - ryddig! Utskriftskommandoen forteller bare Python å skrive ut følgende tekst i dobbelte sitater. Dette er bra, men ikke veldig nyttig for Minecraft, la oss koble det opp:

 from mcpi.minecraft import Minecraft mc = Minecraft.create() mc.postToChat("Hello, World!") 

Nå, hvis du lagrer og kjører denne filen, bør du se "Hei, Verden!" Vises i Minecraft-spillet. La oss slå ned koden:

 from mcpi.minecraft import Minecraft 

Denne linjen forteller Python at du vil bruke kode fra en annen fil. Denne mcpi.minecraft-filen ble utviklet for å tillate enkel kontroll over Minecraft.

 mc = Minecraft.create() 

Denne linjen oppretter et objekt som heter "mc" (Minecraft). Du må opprette dette for å tillate kommunikasjon til Minecraft-spillet - det er ikke nok bare for å inkludere filen.

 mc.postToChat("Hello, World!") 

Endelig forteller denne linjen Minecraft å skrive litt tekst til chatten. Prøv å bytte "Hei, Verden!" Til noe annet og se hva som skjer, men husk å inkludere både de dobbelte sitatene. Hvis du har programvareproblemer, er dette noen vanlige Python- og Minecraft Pi-feil:

  • AttributeError - dette er en skrivefeil, for eksempel pint eller prnt i stedet for utskrift
  • NameError: navn 'Minecraft' er ikke definert - husk å importere modulene du trenger
  • NameError: navnet 'true' er ikke definert - Python er saksfølsomt, endres til "True"
  • socket.error: [Errno 111] Tilkobling nektet - Pass på at Minecraft kjører

prosjekter

Nå som du kjenner grunnlaget for Python og Minecraft, la oss lage noen kule prosjekter. Alt kodekoden kan lastes ned fra Github.

Automatisert Bridge Builder

Minecraft-Pi-brobygger

Dette programmet vil effektivt bygge en bro over vann. Når spilleren nærmer seg en vannkilde, vil programmet konvertere flere blokker til stein. Som Minecraft bruker et koordinatsystem, er det veldig enkelt å få plassering av spilleren, sammen med typen blokker rundt spilleren. Minecraft Pi er litt begrenset, så det er ikke mulig å oppdatere flere forskjellige blokker i bulk. Du kan imidlertid enkelt kode denne oppførelsen selv, men.

Opprett en ny fil ( Fil> Ny fil ) og lagre den som " bridge_builder.py ".

 from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object while True: x, y, z = mc.player.getPos() # store player position # store the surrounding blocks a = mc.getBlock(x, y - 1, z + 1) b = mc.getBlock(x, y - 1, z - 1) c = mc.getBlock(x - 1, y - 1, z) d = mc.getBlock(x + 1, y - 1, z) if a == 8 or a == 9 or b == 8 or b == 9 or c == 8 or c == 9 or d == 8 or d == 9: # 8 or 9 is water. Set surrounding blocks on floor to a solid (stone) if water is found mc.setBlocks(x, y - 1, z, x + 1, y - 1, z + 1, 1) mc.setBlocks(x, y - 1, z, x - 1, y - 1, z - 1, 1) mc.setBlocks(x, y - 1, z, x - 1, y - 1, z + 1, 1) mc.setBlocks(x, y - 1, z, x + 1, y - 1, z - 1, 1) 

Legg merke til hvordan y-verdien faktisk ser på y - 1. Dette er gulvnivået. Hvis verdien av y ble brukt, ville skriptet se etter blokker på omtrent knelivå - det ville ikke fungere veldig bra! Mc.getBlock () returnerer id av en blokk for de oppgitte koordinatene. Siden x, y og z er koordinatene til spilleren, kan du legge til eller trekke fra dem for å få stillinger rundt spilleren. Du trenger ikke å bruke verdiene x, y og z, du kan bruke et hvilket som helst nummer, men du kan ikke vite hvordan den aktuelle blokken gjelder spilleren - det er bedre å bruke verdier i forhold til spilleren. Kjør denne filen fra kommandolinjen og se hva som skjer.

Du bør se at et lite område av bakken blir til stein når spilleren når en vannkilde. Det er ikke bra - du kan gå fort nok til å forårsake et problem. Du kan løse dette ved å konvertere et større volum vann til land. Den endelige delen av metoden mc.setBlocks () er blokk-ID. En er blokk-id for stein. Du kan forandre dette til tre, gress eller noe. Hvis du vil, kan du ganske enkelt konvertere dette til en kompleks design - kanskje en hengebro!

Super Mining Button

Minecraft-Pi-Super-Mine

Dette eksemplet vil gjøre kort arbeid med gruvedrift. Den består av en fysisk knapp, som når presset, vil min 10 blokker kuberte. La oss starte med knappen. I likhet med knapper på Arduino, trenger du en liten mengde elektronikk, som alle bør finnes i et grunnleggende startpakke. Hva er i din Arduino Starter Kit? [Arduino Beginners] Hva er i din Arduino Starter Kit? [Arduino Beginners] Faced med en boks full av elektroniske komponenter, er det enkelt å bli overveldet. Her er en guide til nøyaktig hva du finner i ditt sett. Les mer :

  • 1 x brødbrett
  • 1 x kortvarig bryter
  • 1 x 220 ohm motstand
  • Kvinne> Hoppekabler
  • Mann> Mann hoppe kabler

Her er kretsen:

Pi-Button-Connection

Denne motstanden kalles en "trekk ned" motstand. Det bidrar til å sikre at det Pi mener er at knappen trykkes, egentlig er knappen trykket. Du trenger ikke å bruke dette, men det anbefales, da du kan finne mye støy og falske avlesninger uten det.

Knappen er koblet til GPIO-pin 14. Du kan bruke en hvilken som helst GPIO-pin, men se først på pinouten, da de ikke alle kan styres fra Pi, og varierer litt mellom modellene.

Nå som knappen er tilkoblet, er det på tide å teste den. Opprett en ny fil og lagre den som " button_test.py ". Legg til denne koden, lagre den så kjør den i Terminal.

 import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: # look for button press print "BUTTON WORKS!" # log result time.sleep(0.5) # wait 0.5 seconds 

Trykk på Control + C for å stoppe skriptet. Hvis alt fungerer som det skal, bør du se "BUTTON WORKS!" I Terminal. Legg merke til hvordan, som Minecraft-modulen, bruker denne testen RPi.GPIO og tidsmodulene. Disse tillater Pi å få tilgang til maskinvarepinnene og gi nyttige timingfunksjoner.

Nå kan vi fullføre resten av koden. Opprett en ny filecalled " super_mine.py ". Her er koden:

 import RPi.GPIO as GPIO import time from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: # look for button press x, y, z = mc.player.getPos() # read the player position mc.setBlocks(x, y, z, x + 10, y + 10, z + 10, 0) # mine 10 blocks mc.setBlocks(x, y, z, x - 10, y + 10, z - 10, 0) # mine 10 blocks time.sleep(0.5) # wait 0.5 seconds 

mc.player.getPos () returnerer spillerne nåværende koordinater, som deretter lagres i x, y og z. Metoden setBlocks () forteller Minecraft å fylle alle blokkene mellom start og slutt med følgende blokk. Null er blokk-id for luft. Du kan endre dette til et annet blokk-ID for å fylle et område solidt. Du kan også endre koordinatene til +100 eller til og med +1000 blokker, men Pi kan begynne å slite hvis du blir for gal. Legg merke til hvordan y + 10 er det samme for begge linjene. Du kan endre dette til y - 10 hvis du ønsket å fjerne blokker under jorden.

teleportere

Minecraft-Pi-teleportere

En annen enkel bruk for denne knappen kan være å "teleportere". Minecraft Pi Api gir en måte å sette spillerens posisjon på. Følgende kode vil "teleportere" spilleren til et forhåndsinnstilt sted:

 mc.player.setPos(0, 0, 0) 

Merk at hans metode aksepterer tre parametre; x, y og z - så du kan sette disse til noe for å umiddelbart teleportere spilleren til den plasseringen.

Opprett en kopi av super_min-filen ( Fil> Lagre kopi som ) og modifiser den ved å bytte om hvis med følgende:

 if GPIO.input(14) == True: # look for button press mc.player.setPos(0, 0, 0) # teleport player time.sleep(0.5) # wait 0.5 seconds 

Denne filen skal nå se slik ut:

 import RPi.GPIO as GPIO from mcpi.minecraft import Minecraft import time mc = Minecraft.create() # create Minecraft Object GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: # look for button press mc.player.setPos(0, 0, 0) # teleport player time.sleep(0.5) # wait 0.5 seconds 

Lagre det som " teleport.py " og kjør.

Du kan finne at spilleren sitter fast i noen blokker når du bruker dette, i så fall må du justere koordinatene til en kjent åpen plass (øverst til venstre på skjermen viser din nåværende posisjon).

Bygg et hus

Minecraft-Pi-House

En siste oppgave for denne knappen er å bygge et hus. I likhet med hurtiggruveeksemplet ovenfor, vil dette bare erstatte blokker rundt spilleren for å lage et hus. Ulike blokker vil bli brukt til forskjellige materialer (vindu, vegger osv.). For å gjøre det enklere å kode, vil en solid blokk bli opprettet, og deretter innvendig fjernet (sett blokk til luft), vil dette skape et hulskall. Du kan legge til tillegg som en seng eller dør, men Minecraft Pi-prosjektet er litt ufullstendig, og mens disse objektene fungerer når de plasseres av spilleren, er de ikke strålende når du bruker Python.

 from mcpi.minecraft import Minecraft import RPi.GPIO as GPIO import time mc = Minecraft.create() # create Minecraft Object GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: x, y, z = mc.player.getPos() mc.setBlocks(x + 2, y - 1, z + 2, x + 7, y + 3, z + 8, 5) # make shell mc.setBlocks(x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # remove inside mc.setBlocks(x + 2, y, z + 5, x + 2, y + 1, z + 5, 0) # make doorway mc.setBlocks(x + 4, y + 1, z + 8, x + 5, y + 1, z + 8, 102) # make window 1 mc.setBlocks(x + 4, y + 1, z + 2, x + 5, y + 1, z + 2, 102) # make window 2 mc.setBlocks(x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # make window 3 

Lagre dette som " house.py " og kjør. Alt er bra, du bør se et lite hus dukker opp (du må kanskje vende rundt for å finne den). Det er veldig enkelt, en åpning og noen vinduer. I teorien er det ingen grense for hvor stor eller kompleks en bygning du kan konstruere.

Lag et mini-spill

Minecraft-Pi-Lava-spill

Deretter la oss lage et mini-spill! Dette blir ganske enkelt, når spilleren går på en blokk med sand, blir det til lava etter en tilfeldig tid. Dette er et godt spill å lage, da du kan designe dine egne nivåer eller endre det for å gjøre tingene vanskeligere. Du trenger ikke knappen for dette eksemplet.

Opprett en ny fil og lagre den som " mini_game.py ". Her er koden:

 from mcpi.minecraft import Minecraft import random import time mc = Minecraft.create() # create Minecraft Object while True: x, y, z = mc.player.getPos() block_under_player = mc.getBlock(x, y - 1, z) if block_under_player == 12: # player standing on sand, start the timer random_time = random.uniform(0.1, 2.5) # generate random number time.sleep(random_time); # wait mc.setBlock(x, y - 1, z, 11) # turn it into lava 

Denne koden er en god starter på tilfeldig () -funksjonen: random.uniform (0.1, 2.5) vil generere et tilfeldig tall mellom 0, 1 (1/10 sekund) og 2, 5 (2 1/2 sekunder). Å øke disse tallene vil gjøre spillet enklere.

Prøv det! Stå på en blokk med sand, og det vil snart bli til lava. Dette kan være grunnlaget for et mer komplekst spill.

Lag et annet mini-spill

Minecraft-Pi-minispill

Forutsetningen for dette spillet er enkelt - ikke stå på tregulvet når tiden går ut. Spilleren blir teleportert til en "arena". De blir tvunget til å stå stille til spillet starter. Når en gang er startet, vil gulvet vende seg til vann når timeren løper ut. Spilleren må stå i sikker sone (diamantblokker) for å overleve. Hvert nivå reduserer timeren med ett sekund. Etter hvert vellykket nivå blir det trygge området større. Sjekk koden nedenfor:

 import time import random from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object # clear area mc.setBlocks(-10, 1, -10, 25, 5, 25, 0) # create arena shell mc.setBlocks(0, 0, 0, 25, 10, 25, 17) # hollow out arena mc.setBlocks(1, 1, 1, 24, 10, 24, 0) # move player to arena mc.player.setPos(14, 25, 20) # teleport player # make them stay put # teleport player to start position every 1/10th second. # do this for 5 seconds then start the game time.sleep(2) total_wait = 0 mc.postToChat("Waiting to Start") while total_wait< 5: mc.player.setPos(14, 1, 20) # teleport player time.sleep(0.1) total_wait += 0.1 mc.postToChat("BEGIN!") # 10 levels for level in range(10): x, y, z = mc.player.getPos() level_time = 10 - level # reduce time by 1 second for each level mc.postToChat("Level - " + str(level + 1) + " start") # build floor mc.setBlocks(0, 0, 0, 25, 0, 25, 17) # make safe area safe_area_start = random.uniform(0, 22) safe_area_end = random.uniform(0, 22) mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) elapsed_time = 0 while elapsed_time< 10: x, y, z = mc.player.getPos() time.sleep(0.25) elapsed_time += 0.25 # check player is still on floor if y< 0.75: mc.postToChat("Game Over") break; else: # remove floor mc.setBlocks(-10, 0, -10, 25, 0, 25, 8) # put safe area back mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) time.sleep(2.5) continue break 

Lagre dette som " mini_game_2.py " og gi det et løp.

Pi 2 har noen ytelsesproblemer mens du kjører Minecraft. Brukskurven for sentralbehandlingsenheten (CPU) ( øverst til høyre ) viser aldri noen tung belastning, så dette må være ned til dårlig design og optimalisering av utviklerne. Disse problemene er ikke relatert til kjøringskode (som de fortsetter når Python ikke kjører), men de er sammensatt av dette minispillet. Hvis Pi virkelig sliter, vil du kanskje redusere størrelsen på arenaen eller overklare Pi ikke nok juice? Klem din Raspberry Pi Ved Overclocking Ikke nok juice? Klem din Raspberry Pi ved Overclocking Hvis det er noen maskinvare utgitt i 2012 som du sannsynligvis vil bli forelsket i, er det søt-som-sukker Raspberry Pi, en mini-datamaskin designet og bygget i Storbritannia som har sendt rundt. .. Les mer .

Diamantdetektor

Minecraft-Pi-Diamonds

La oss lage en annen krets. Dette vil bruke en lysdiode (LED) til å lyse opp når det er diamanter under (innen 15 blokker). Her er hva du trenger:

  • 1 x brødbrett
  • 1 x LED
  • 1 x 220 ohm motstand
  • Kvinne> Hoppekabler
  • Mann> Mann hoppe kabler

Her er kretsen:

Pi-LED-Connection

Koble anoden (langt ben) til GPIO Pin 14. Denne pin fungerer som + 5v. Koble katoden (kort ben) til bakken.

Jeg har brukt en billig malm leke og modifisert det ved å fjerne bakdekselet og elektronikk, jeg så plassert en LED under den. Du kan lett gjøre dette permanent med varmt lim eller noe lignende.

Minecraft-Ore-Toy

Lagre denne koden som " diamonds.py ":

 import RPi.GPIO as GPIO import time from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object led_pin = 14 # store the GPIO pin number GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output while True: # repeat indefinitely x, y, z = mc.player.getPos() for i in range(15): # look at every block until block 15 if mc.getBlock(x, y - i, z) == 56: GPIO.output(led_pin, True) # turn LED on time.sleep(0.25) # wait GPIO.output(led_pin, False) # turn LED off time.sleep(0.25) # wait 

Når det er en diamantmalmblokk under spilleren (innen 15 blokker) blinker lyset.

Tenk Geek Minecraft Light Up Diamond Ore Think Geek Minecraft Light Up Diamond Ore Kjøp nå På Amazon $ 12.89

Har du gjort noe kult med Minecraft Pi? Gi meg beskjed i kommentarene du gjorde eller hvor langt du gjorde det i spillene.

In this article