Lär dig Python och elektronik med Minecraft Pi Edition

Har du alltid velat lära dig att koda men visste inte vart du ska börja? Lär dig hur man kontrollerar Minecraft på Raspberry Pi med Python och lite enkel elektronik.

Har du alltid velat lära dig att koda men visste inte vart du ska börja?  Lär dig hur man kontrollerar Minecraft på Raspberry Pi med Python och lite enkel elektronik.
Annons

Har du alltid velat lära dig att koda men visste inte vart du ska börja? Lär dig hur man kontrollerar Minecraft på Raspberry Pi med Python och lite enkel elektronik. Här är slutresultatet:

Du behöver en Pi 2 eller nyare för det här projektet, och samtidigt som du kan slutföra de flesta av dessa uppgifter via kommandoraden över Secure Shell (SSH), kommer denna handledning att fokusera på kodning direkt på Pi.

Raspberry Pi 3 Modell B Moderkort Raspberry Pi 3 Modell B Moderkort Köp nu På Amazon $ 29.99

Ny på Minecraft? Oroa dig inte - här är vår Minecraft Beginners Guide The (Latecomer) Nybörjarens Guide till Minecraft (Latecomer) Nybörjarhandboken till Minecraft Om du är sen till festen, oroa dig inte - den här omfattande nybörjarguiden har du täckt. Läs mer .

Introduktion till Minecraft Pi

Minecraft-Pi-Menu

Minecraft för Raspberry Pi har utvecklats för lärande och tinkering (och det är gratis). Den levereras med ett Program Programmeringsgränssnitt (API) som ger ett sätt att kod enkelt kan prata med Minecraft. Det är briljant att lära sig hur man kodar i Python, liksom att börja med elektronik. Beginners Electronics: 10 färdigheter du behöver veta Beginners Electronics: 10 färdigheter du behöver veta Många av oss har aldrig ens rört ett lödstryk - men att göra saker kan otroligt givande. Här är tio av de mest grundläggande DIY elektronik färdigheter för att hjälpa dig att komma igång. Läs mer .

Vad är Python?

Python är ett programmeringsspråk. Det tolkas, vilket betyder att när du kör en Python-fil eller ett program måste datorn först göra en liten bit av arbetet med filen först. Nackdelarna är att det kan betraktas långsamt jämfört med kompilerade språk.

Fördelarna med tolkade språk är kodningens hastighet och deras vänlighet. Du behöver inte berätta för datorn vilka data du vill lagra, bara att du vill lagra något och datorn kommer att räkna ut vad du ska göra. Det finns naturligtvis undantag, och det här är en något förenklad vy, men programmering ska vara kul! Om du börjar gräva i komplexa tekniska detaljer kan det bli lite mödosamt.

Python är skiftlägeskänslig. Det här är viktigt att veta, eftersom Python inte känner igen objekt även om de stavas rätt om fallet är fel. "Dosomething ()" fungerar inte om metoden faktiskt kallas "DoSomething ()". Python använder också indryckning . Andra programmeringsspråk kanske inte bryr sig om hur många streckkod du har, medan Python bryr sig. Indrag används för att berätta för Python där kod hör till. Andra språk kan använda "Curly Braces" ({}) till gruppkod - Python använder inte dessa. Python använder en hash (#) för kommentarer, och kommentarer används för att berätta för andra utvecklare eller personer som tittar på koden vad en viss del gör, eller varför det behövs. Python ignorerar allt efter en hash.

Slutligen finns det två huvudversioner av Python - Python 2.7.x och Python 3.x. Det finns vissa skillnader mellan de två (vad är skillnaderna?). Denna handledning kommer att använda Python 3.

Första installationen

Att tillhandahålla din Pi är redan inställd och körs Raspbian Så här installerar du ett operativsystem till din Raspberry Pi Så här installerar du ett operativsystem till din Raspberry Pi Så här får du ett nytt OS installerat och kört på din Pi - och hur man klonar din perfekta inställning för snabb katastrofåterställning. Läs mer, det behövs inte mycket initial installation.

Öppna Terminal ( Meny> Tillbehör> Terminal ) och kör det här kommandot. Det är alltid bra att hålla förvaringslistan uppdaterad, och det här hämtar den senaste listan över program (det kommer inte ladda ner programmen själva, det hjälper Pi att veta vilka program som heter och var de ska hitta dem).

sudo apt-get update 

Uppdatera nu Pi (det kan ta ett tag):

 sudo apt-get upgrade 

Python och Minecraft Pi installeras redan, men om Minecraft Pi inte är installerad av någon anledning, är det enkelt att installera 5 sätt att installera programvara på Raspberry Pi 5 sätt att installera programvara på Raspberry Pi För att göra något med en Raspberry Pi, kommer du behöver veta hur man installerar ett operativsystem och programvara för att köra på den. Om du är ny på Linux kan det vara skrämmande. Läs mer :

 sudo apt-get install minecraft-pi 

Navigera till dokument och skapa en ny mapp som heter "Minecraft":

 cd Documents/ mkdir Minecraft 

Du kan se innehållet i den här nya mappen:

 ls 

Här är ett tips - om du börjar skriva och tryck på TAB-tangenten, kommer kommandoraden att försöka autofullständiga uttalandet för dig.

Du kan undersöka sökvägen till den aktuella katalogen med hjälp av pwd, som står för Print Work Directory:

 pwd 

Starta Minecraft genom att gå till Meny> Spel> Minecraft Pi . Du behöver denna körning, men kommer senare tillbaka.

Öppna Python 3 från Meny> Programmering> Python 3 (IDLE) . Detta program ger dig möjlighet att köra Python-kommandon och skriva program.

Nu kan du skriva dina Python-kommandon här, men det är inte så praktiskt. Gå till Arkiv> Ny fil och sedan Arkiv> Spara och spara det i mappen du skapade tidigare. ( Dokument> Minecraft ). Låt oss kalla det " hello_world.py ". Du behöver inte använda .py-tillägget, det läggs automatiskt till, men det är bra.

Om du växlar tillbaka till terminalen och navigerar i Minecraft-mappen bör du se filen du just skapat:

 cd Minecraft/ ls 

Du kan köra den här filen så här:

 python hello_world 

Lägg märke till hur "python" är allt mindre. Detta måste vara före filnamnet, eftersom det berättar Pi att följande fil är Python, så den borde utföras som sådan.

Byt tillbaka till Python-redigeraren och skriv:

 print "Hello, World!" 

Spara den här filen och kör den igen - du borde nu se "Hej, Värld!" Visas i kommandoraden - snyggt! Utskriftskommandot berättar enkelt att Python ska mata ut följande text i dubbla citat. Detta är bra, men inte fruktansvärt användbart för Minecraft, låt oss koppla upp det:

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

Nu om du sparar och kör den här filen ska du se "Hej, Värld!" Visas i Minecraft-spelet. Låt oss bryta ned koden:

 from mcpi.minecraft import Minecraft 

Den här raden berättar Python att du vill använda kod från en annan fil. Denna mcpi.minecraft-fil utvecklades för att möjliggöra enkel kontroll över Minecraft.

 mc = Minecraft.create() 

Denna rad skapar ett objekt som heter "mc" (Minecraft). Du måste skapa detta för att tillåta kommunikation till Minecraft-spelet - det räcker inte bara för att inkludera filen.

 mc.postToChat("Hello, World!") 

Slutligen berättar denna rad Minecraft om att skriva lite text till chatten. Försök byta "Hello, World!" Till något annat och se vad som händer, men kom ihåg att inkludera både dubbla citat. Om du har programvaruproblem är det några vanliga Python- och Minecraft Pi-fel:

  • AttributeError - detta är ett typsnitt, till exempel pint eller prnt istället för utskrift
  • NameError: namn 'Minecraft' är inte definierat - kom ihåg att importera de moduler du behöver
  • NameError: namnet "true" är inte definierat - Python är skiftlägeskänsligt, ändras till "True"
  • socket.error: [Errno 111] Anslutning vägrade - Se till att Minecraft körs

projekt

Nu när du vet grunderna i Python och Minecraft, låt oss göra några coola projekt. Hela codecan laddas ner från Github.

Automatiserad brobyggare

Minecraft-Pi-brobyggare

Detta program kommer effektivt bygga en bro över vatten. När spelaren kommer i närheten av en vattenkälla, kommer programmet att konvertera flera kvarter till sten. Eftersom Minecraft använder ett koordinatsystem är det väldigt enkelt att få platsen för spelaren, tillsammans med typen av block runt spelaren. Minecraft Pi är lite begränsad, så det går inte att uppdatera flera olika block i bulk. Du kan dock enkelt koda detta beteende själv, dock.

Skapa en ny fil ( Fil> Ny fil ) och spara 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) 

Lägg märke till hur y-värdet faktiskt ser på y - 1. Detta är golvnivån. Om värdet på y användes, letade skriptet efter block på ungefär knähöjd - det skulle inte fungera bra! Mc.getBlock () returnerar id för ett block för de givna koordinaterna. Eftersom x, y och z är koordinaterna för spelaren kan du lägga till eller subtrahera dem för att få positioner runt spelaren. Du behöver inte använda x-, y- och z-värdena, du kan använda något nummer, men du kanske inte vet hur det specifika blocket gäller spelaren - det är bättre att använda värden i förhållande till spelaren. Kör den här filen från kommandoraden och se vad som händer.

Du bör se att ett litet område av mark blir sten när spelaren når en vattenkropp. Det är inte bra - du kan gå fort nog för att orsaka problem. Du kan lösa detta genom att konvertera en större mängd vatten till land. Den sista delen av mc.setBlocks () -metoden är block-id. En är block id för sten. Du kan ändra detta till trä, gräs eller något. Om du ville, kan du ganska enkelt konvertera detta till en komplex design - kanske en upphängningsbron!

Super Mining Button

Minecraft-Pi-Super-Mine

Detta exempel kommer att göra korta arbeten med gruvdrift. Den består av en fysisk knapp, som när den pressas, kommer mina 10 kvarter cubed. Låt oss börja med knappen. På samma sätt som knapparna på Arduino behöver du en liten mängd elektronik, som alla finns i ett grundläggande startpaket Vad finns i ditt Arduino Starter Kit? [Arduino Beginners] Vad finns i din Arduino Starter Kit? [Arduino Beginners] Inför en låda full av elektroniska komponenter är det lätt att bli överväldigad. Här är en guide till exakt vad du hittar i ditt kit. Läs mer :

  • 1 x brödbräda
  • 1 x momentomkopplare
  • 1 x 220 ohm motstånd
  • Kvinna> Hanehoppkablar
  • Man> Man hoppar kablar

Här är kretsen:

Pi-Button-anslutning

Detta motstånd kallas ett "drag ned" motstånd. Det hjälper till att se till att det som Pi tycker är att knappen trycks in, är verkligen att knappen trycks in. Du behöver inte använda det här, men det rekommenderas, eftersom du kan hitta massor av ljud och falska avläsningar utan det.

Knappen är ansluten till GPIO-stift 14. Du kan använda någon GPIO-stift, men titta först på stiftet, eftersom de inte alla kan styras från Pi, och varierar något mellan modellerna.

Nu när knappen är ansluten är det dags att testa det. Skapa en ny fil och spara den som " button_test.py ". Lägg till den här koden, spara den och kö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 

Tryck på Control + C för att stoppa manuset. Om allt fungerar korrekt borde du se "KNAPP WORKS!" I Terminal. Lägg märke till hur, liksom Minecraft-modulen, använder detta test RPi.GPIO och tidsmoduler. Dessa gör det möjligt för Pi att komma åt hårdvararpinnarna och ge användbara tidsfunktioner.

Nu kan vi avsluta resten av koden. Skapa en ny filecalled " super_mine.py ". Här är 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 () ger spelarna aktuella koordinater, som sedan lagras i x, y och z. Metoden setBlocks () berättar för Minecraft att fylla alla block mellan start och slut med följande block. Noll är block-id för luft. Du kan ändra detta till ett annat block-ID för att fylla i ett område. Du kan också ändra koordinaterna till +100 eller till och med +1000 block, men Pi kan börja kämpa om du blir för galen. Observera hur y + 10 är densamma för båda linjerna. Du kan ändra detta till y - 10 om du vill ta bort block under jord.

teleportera

Minecraft-Pi-Teleporting

En annan enkel användning för den här knappen kan vara att "teleportera". Minecraft Pi Api ger ett sätt att ställa in spelarens position. Följande kod kommer att "teleportera" spelaren till en förinställd plats:

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

Observera att hans metod accepterar tre parametrar; x, y och z - så du kan ställa in dessa till något för att omedelbart teleportera spelaren till den platsen.

Skapa en kopia av super_mine-filen ( File> Save Copy As ) och ändra den genom att ersätta om med följande:

 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 

Den här filen ska nu se ut så här:

 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 

Spara det som " teleport.py " och kör.

Det kan hända att spelaren fastnar i vissa block när du använder det, i vilket fall måste du justera koordinaterna till ett känt öppet utrymme (längst upp till vänster på skärmen visar din nuvarande plats).

Bygga ett hus

Minecraft-Pi-House

En sista uppgift för den här knappen är att bygga ett hus. Precis som snabbmynningsexemplet ovan kommer detta helt enkelt att ersätta block som omger spelaren för att göra ett hus. Olika block-ids kommer att användas för olika material (fönster, väggar etc). För att göra det enklare att koda kommer ett solidt block att skapas, och sedan inuti borttaget (inställt block till luft), kommer detta att skapa ett ihåligt skal. Du kan lägga till extrafunktioner som en säng eller dörr, men Minecraft Pi-projektet är lite ofullständigt, och medan dessa objekt fungerar när de placeras av spelaren, är de inte lysande när du använder 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 

Spara detta som " house.py " och kör. Allt är bra, du borde se ett litet hus visas (du kan behöva vända dig för att hitta den). Det är väldigt enkelt, en öppning och några fönster. I teorin finns det ingen gräns för hur stor eller komplex en byggnad du kan konstruera.

Gör en minispel

Minecraft-Pi-Lava-Game

Låt oss göra ett mini-spel! Det här blir ganska enkelt, när spelaren går på ett block av sand, blir det till lava efter en slumpmässig tid. Detta är ett bra spel att göra, eftersom du kan utforma dina egna nivåer eller ändra det för att göra saker svårare. Du behöver inte knappen för det här exemplet.

Skapa en ny fil och spara den som " mini_game.py ". Här är 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 

Denna kod är en bra startare i slumpmässig () -funktionen: random.uniform (0.1, 2.5) genererar ett slumptal mellan 0, 1 (1/10 sekund) och 2, 5 (2 1/2 sekunder). Att öka dessa siffror kommer att göra spelet enklare.

Testa! Stå på ett block av sand, och det kommer snart att bli lava. Detta kan vara grunden för ett mer komplext spel.

Gör ett annat mini-spel

Minecraft-Pi-minispel

Förutsättningen för detta spel är enkel - stå inte på trägolvet när tiden går ut. Spelaren blir teleporterad till en "arena". De tvingas stå stilla tills spelet börjar. När en gång är igång, kommer golvet att vända sig till vatten när timern löper ut. Spelaren måste stå i säkerhetszonen (diamantblock) för att överleva. Varje nivå minskar timern med en sekund. Efter varje lyckad nivå blir det säkra området större. Kolla in koden nedan:

 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 

Spara det här som " mini_game_2.py " och ge det en körning.

Pi 2 har vissa prestationsproblem medan du kör Minecraft. Användningsgrafen för centralprocessorn (CPU) ( högra högra hörnet ) visar aldrig någon tung belastning, så det måste vara lågt för dålig design och optimeringar av utvecklarna. Dessa problem är inte relaterade till körkod (eftersom de fortsätter när Python inte körs), men de är förknippade med detta minispel. Om din Pi verkligen kämpar kanske du vill minska arenans storlek eller överklocka din Pi inte tillräckligt med juice? Krama din hallon Pi genom överklockning Inte tillräckligt med juice? Krama din Raspberry Pi genom överklockning Om det finns någon hårdvara som släpptes 2012 som du sannolikt kommer att bli kär i är det den söta som socker Raspberry Pi, en mini-dator som är designad och byggd i Storbritannien som har skickats runt om. .. Läs mer .

Diamantdetektor

Minecraft-Pi-Diamonds

Låt oss göra en annan krets. Detta kommer att använda en lysdiod (LED) för att tändas när det finns diamanter nedan (inom 15 kvarter). Här är vad du behöver:

  • 1 x brödbräda
  • 1 x LED
  • 1 x 220 ohm motstånd
  • Kvinna> Hanehoppkablar
  • Man> Man hoppar kablar

Här är kretsen:

Pi-LED-Anslutning

Anslut anoden (långbenet) till GPIO Pin 14. Denna pin fungerar som + 5v. Anslut katoden (kort ben) till marken.

Jag har använt en billig malmleksong och modifierad den genom att ta bort bakplåten och elektroniken, så lade jag en LED under den. Du kan enkelt göra det här permanent med varmt lim eller något liknande.

Minecraft-Ore-Toy

Spara den här 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 finns ett diamantmalmblock under spelaren (inom 15 kvarter) blinkar ljuset.

Think Geek Minecraft Light Up Diamond Ore Think Geek Minecraft Light Up Diamond Ore Köp Nu På Amazon $ 12.89

Har du gjort något coolt med Minecraft Pi? Låt mig veta i kommentarerna vad du gjorde eller hur långt du gjorde det i spelen.

In this article