Naučite Python i elektroniku s Minecraft Pi Edition

Naučite Python i elektroniku s Minecraft Pi Edition

Oduvijek ste htjeli naučiti kodirati, ali niste znali odakle početi? Naučite kako kontrolirati Minecraft na Raspberry Pi -u pomoću Pythona i neke jednostavne elektronike. Evo krajnjeg rezultata:





Za ovaj projekt trebat će vam Pi 2 ili noviji, a iako biste većinu ovih zadataka mogli dovršiti putem naredbenog retka preko Secure Shell -a (SSH), ovaj će se vodič usredotočiti na kodiranje izravno na Pi -u.





Novi ste u Minecraftu? Ne brinite - evo naših Minecraft vodič za početnike .





Uvod u Minecraft Pi

Minecraft za Raspberry Pi razvijen je za učenje i petljanje (i to besplatno). Dolazi s aplikacijskim sučeljem za programiranje (API) koji omogućuje način da kod lako razgovara s Minecraftom. To je sjajno za učenje kodiranja u Pythonu, kao i za početak rada s elektronikom.

Što je Python?

Piton je programski jezik. to je protumačeno , što znači da kada pokrećete Python datoteku ili program, računalo mora prvo obaviti mali rad na datoteci. Nedostaci su što se može smatrati sporim u usporedbi s sastavljenim jezicima [Uklonjen neispravan URL].



Prednosti tumačenih jezika su brzina kodiranja i njihova ljubaznost. Ne morate reći računalu što podatke koje želite pohraniti, samo da želite nešto spremiti i računalo će smisliti što učiniti. Naravno, postoje iznimke i ovo je donekle pojednostavljen prikaz, no programiranje bi trebalo biti zabavno! Ako počnete kopati po složenim tehničkim detaljima, to može postati pomalo naporno.

Python razlikuje velika i mala slova. Ovo je važno znati jer Python neće prepoznati objekte čak i ako su ispravno napisane ako je slučaj pogrešan. 'Dosomething ()' neće raditi ako se metoda zapravo zove 'DoSomething ()'. Python također koristi uvlačenje . Ostale programske jezike možda neće zanimati koliko uvlačenja ima vaš kôd, dok Python čini briga. Uvlake se koriste da Pythonu kažu gdje pripada kod. Drugi jezici mogu koristiti 'Curly Braces' ({}) za grupiranje koda - Python ih ne koristi. Python koristi hash (#) za komentare, a komentari se koriste kako bi rekli drugim programerima ili ljudima koji gledaju kôd što određeni dio radi ili zašto je to potrebno. Python ignorira bilo što nakon raspršivanja.





Konačno, postoje dvije glavne verzije Pythona - Python 2.7.x i Python 3.x. Postoje neke razlike između ova dva ( koje su razlike? ). Ovaj vodič će koristiti Python 3.

Početno postavljanje

Podnošenje vašeg Pi već je postavljanje i pokretanje Raspbiana , nije potrebno puno početnih postavki.





Otvorite terminal ( Izbornik> Pribor> Terminal ) i pokrenite ovu naredbu. Uvijek je dobra praksa ažurirati popis spremišta a ovo će preuzeti najnoviji popis programa (neće preuzimati same programe, to pomaže Pi -u da zna kako se programi zovu i gdje ih može pronaći).

sudo apt-get update

Sada ažurirajte Pi (to može potrajati):

sudo apt-get upgrade

Python i Minecraft Pi već su instalirani, no ako Minecraft Pi nije instaliran iz bilo kojeg razloga, instaliranje je jednostavno:

sudo apt-get install minecraft-pi

Dođite do dokumenata i stvorite novu mapu pod nazivom 'Minecraft':

cd Documents/
mkdir Minecraft

Sadržaj ove nove mape možete pogledati:

ls

Evo savjeta - ako počnete tipkati i pritisnete tipku TAB, naredbeni redak će umjesto vas pokušati automatski dovršiti izraz.

Putanje do trenutnog direktorija možete ispitati pomoću pwd -a, koji označava Ispis radnog imenika:

pwd

Pokrenite Minecraft tako što ćete otići na Izbornik> Igre> Minecraft Pi . Ovo će vam trebati trčanje, ali vratit ćemo se kasnije.

Otvorite Python 3 iz Izbornik> Programiranje> Python 3 (IDLE) . Ovaj program pruža način za pokretanje Python naredbi i pisanje programa.

Sada biste ovdje mogli upisati svoje Python naredbe, ali to nije baš praktično. Ići Datoteka> Nova datoteka i onda Datoteka> Spremi i spremite ovo u mapu koju ste ranije stvorili. ( Dokumenti> Minecraft ). Nazovimo to ' hello_world.py '. Ne morate koristiti .py proširenje, to će se dodati automatski, ali to je dobra praksa.

Ako se vratite na terminal i krenete u mapu Minecraft, trebali biste vidjeti datoteku koju ste upravo stvorili:

cd Minecraft/
ls

Ovu datoteku možete pokrenuti ovako:

python hello_world

Primijetite kako je 'python' sva mala slova. To mora biti prije naziva datoteke, jer govori Pi da je sljedeća datoteka Python, pa bi se trebala izvršiti kao takva.

Vratite se na uređivač Python i upišite:

print 'Hello, World!'

Spremite ovu datoteku i ponovo je pokrenite - sada biste trebali vidjeti 'Hello, World!' pojavljuju se u naredbenom retku - uredno! Naredba print jednostavno govori Pythonu da ispiše sljedeći tekst u dvostrukim navodnicima. Ovo je dobro, ali nije strašno korisno za Minecraft, povežimo to:

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

Ako spremite i pokrenete ovu datoteku, trebali biste vidjeti 'Hello, World!' se pojavljuju u igri Minecraft. Razložimo kod:

from mcpi.minecraft import Minecraft

Ovaj redak govori Pythonu da želite koristiti kôd iz druge datoteke. Ova datoteka mcpi.minecraft razvijena je za omogućavanje jednostavne kontrole Minecrafta.

mc = Minecraft.create()

Ova linija stvara objekt zvan 'mc' (Minecraft). Morate to stvoriti da biste omogućili komunikaciju s igrom Minecraft - nije dovoljno samo uključiti datoteku.

mc.postToChat('Hello, World!')

Konačno, ovaj redak govori Minecraftu da napiše neki tekst na chat. Pokušajte promijeniti 'Hello, World!' na nešto drugo i vidjeti što će se dogoditi, ali ne zaboravite uključiti oba dvostruka navoda. Ako imate problema sa softverom, ovo su neke uobičajene pogreške Pythona i Minecrafta Pi:

  • AttributeError - ovo je pravopisna pogreška, poput pint ili prnt umjesto ispisa
  • NameError: naziv 'Minecraft' nije definiran - ne zaboravite uvesti module koji su vam potrebni
  • NameError: naziv 'true' nije definiran - Python razlikuje velika i mala slova, promijenite u 'True'
  • socket.error: [Errno 111] Veza je odbijena - provjerite radi li Minecraft

Projekti

Sada kada znate osnove Pythona i Minecrafta, napravimo neke super projekte. Sav kod može se preuzeti s Githuba.

Automatizirani graditelj mostova

Ovaj će program učinkovito izgraditi most preko vode. Kad igrač dođe blizu vodenog prostora, program će pretvoriti nekoliko blokova u kamen. Kako Minecraft koristi koordinatni sustav, vrlo je lako doći do lokacije igrača, zajedno s vrstom blokova oko igrača. Minecraft Pi je malo ograničen, pa nije moguće skupno ažurirati više različitih blokova. Međutim, ovo ponašanje možete lako kodirati sami.

Izradite novu datoteku ( Datoteka> Nova datoteka ) i spremite kao ' 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)

Obratite pažnju na to kako vrijednost y zapravo gleda na y - 1. Ovo je razina poda. Kad bi se upotrijebila vrijednost y, skripta bi tražila blokove na razini koljena - ne bi radila baš najbolje! Mc.getBlock () vraća id bloka za zadane koordinate. Kako su x, y i z koordinate igrača, možete ih zbrajati ili oduzimati da biste dobili položaje oko igrača. Ne morate koristiti vrijednosti x, y i z, mogli biste koristiti bilo koji broj, no možda ne znate kako se taj određeni blok odnosi na player - bolje je koristiti vrijednosti u odnosu na player. Pokrenite ovu datoteku iz naredbenog retka i pogledajte što će se dogoditi.

Trebali biste vidjeti da se mala površina zemlje pretvara u kamen kad igrač dođe do vodene površine. Nije sjajno - možete hodati dovoljno brzo da izazovete problem. To biste mogli riješiti pretvaranjem veće količine vode u kopno. Završni dio metode mc.setBlocks () je ID bloka. Jedan je ID bloka za kamen. Ovo možete promijeniti u drvo, travu ili bilo što drugo. Da želite, ovo biste vrlo lako mogli pretvoriti u složen dizajn - možda viseći most!

Gumb Super Mining

Ovaj će primjer kratki rad na rudarstvu. Sastoji se od fizičkog gumba koji će, kada se pritisne, iskopati 10 blokova u kockicama. Počnimo s gumbom. Slično gumbima na Arduinu, trebat će vam mala količina elektronike, a sve bi se to trebalo naći u osnovnom početnom setu:

  • 1 x Oglasna ploča
  • 1 x trenutni prekidač
  • 1 x 220 ohmski otpornik
  • Ženski> muški kablovi za preskakanje
  • Muški> Muški kabeli za preskakanje

Evo kruga:

Pi-Button-Connection

Ovaj otpornik naziva se 'pull down' otpornik. Pomaže osigurati da je ono što Pi misli da je gumb pritisnut, doista pritisnuto. Ovo ne morate koristiti, međutim preporučuje se jer ćete bez toga pronaći mnogo šuma i lažnih očitanja.

Gumb je spojen na pin 14. Opći namjenski ulazni izlaz (GPIO). Možete koristiti bilo koji GPIO pin, međutim pogledajte prikaz izvoda prvo, budući da se njima sve ne može kontrolirati iz Pi -a i malo se razlikuju među modelima.

Sada kada je gumb spojen, vrijeme je da ga testirate. Izradite novu datoteku i spremite je kao ' button_test.py '. Dodajte ovaj kod, spremite ga i pokrenite u Terminalu.

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

Pritisnite Control + C da biste zaustavili skriptu. Ako sve radi ispravno, trebali biste vidjeti 'DUGME RADI!' u terminalu. Primijetite kako, poput Minecraft modula, ovaj test koristi RPi.GPIO i vremenske module. Oni omogućuju Pi -u pristup hardverskim pinovima i pružaju korisne funkcije mjerenja vremena.

Sada završimo ostatak koda. Izradi novu datoteku pod nazivom ' super_mine.py '. Evo koda:

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 () vraća igračima trenutne koordinate, koje su zatim spremljene u x, y i z. The setBlocks () metoda govori Minecraftu da ispuni sve blokove između početka i kraja sljedećim blokom. Nula je blok-id za zrak. To možete promijeniti u drugi ID bloka kako biste ispunili područje. Također možete promijeniti koordinate na +100 ili čak +1000 blokova, međutim Pi se može početi boriti ako previše poludite. Uočite kako je y + 10 isto za obje linije. Ovo možete promijeniti u y - 10 ako želite ukloniti blokove pod zemljom.

Teleportiranje

Druga jednostavna upotreba ovog gumba mogla bi biti 'teleport'. Minecraft Pi Api nudi način postavljanja pozicije igrača. Sljedeći kôd će 'teleportirati' player na unaprijed postavljeno mjesto:

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

Imajte na umu da njegova metoda prihvaća tri parametra; x, y i z - tako da ih možete postaviti na bilo što kako biste odmah teleportirali player na to mjesto.

Napravite kopiju datoteke super_mine ( Datoteka> Spremi kopiju kao ) i izmijeniti ga zamjenom if sa sljedećim:

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

Ova bi datoteka sada trebala izgledati ovako:

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

Spremi kao ' teleport.py 'i trči.

Možda ćete otkriti da se igrač zaglavio u nekim blokovima kada to koristite, u tom slučaju ćete morati prilagoditi koordinate poznatom otvorenom prostoru (gornji lijevi dio zaslona prikazuje vašu trenutačnu lokaciju).

Izgradite Kuću

Posljednji zadatak ovog gumba je izgradnja kuće. Slično poput gore navedenog primjera brzog rudarenja, ovo će jednostavno zamijeniti blokove koji okružuju igrač kako bi napravili kuću. Za različite materijale (prozore, zidove itd.) Koristit će se različiti blokovi. Kako bi se stvari lakše kodirale, stvorit će se čvrsti blok, a zatim ukloniti unutrašnjost (postaviti blok na zrak), to će stvoriti šuplju ljusku. Mogli biste dodati dodatke poput kreveta ili vrata, međutim projekt Minecraft Pi je malo nedovršen, i iako ti objekti rade kada ih igrač postavi, nisu briljantni kada koristite 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

Spremi ovo kao ' house.py 'i trči. Sve je u redu, trebali biste vidjeti kako se pojavljuje mala kućica (možda ćete se morati okrenuti da biste je pronašli). Vrlo je jednostavno, otvor i nekoliko prozora. U teoriji nema ograničenja koliko veliku ili složenu zgradu možete izgraditi.

Napravite mini igru

Zatim napravimo mini igru! To će biti vrlo jednostavno, kad igrač stane na pijesak, on će se nakon slučajnog vremena pretvoriti u lavu. Ovo je dobra igra za napraviti jer biste mogli osmisliti vlastite razine ili je izmijeniti kako biste otežali stvari. Za ovaj primjer gumb vam neće trebati.

Izradite novu datoteku i spremite je kao ' mini_game.py '. Evo koda:

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

Ovaj je kod dobar početak za slučajno () funkcija: random.uniform (0,1, 2,5) će generirati slučajan broj između 0,1 (1/10 sekunde) i 2,5 (2 1/2 sekunde). Povećanje ovih brojeva olakšat će igru.

Isprobaj! Stanite na pijesak i on će se uskoro pretvoriti u lavu. To bi mogla biti osnova složenije igre.

Napravite još jednu mini igru

Pretpostavka za ovu igru ​​je jednostavna - nemojte stajati na drvenom podu kad vrijeme istekne. Igrač se teleportira u 'arenu'. Prisiljeni su mirno stajati do početka igre. Kad se pokrene, pod će se pretvoriti u vodu kad istekne mjerač vremena. Igrač mora stajati u sigurnoj zoni (dijamantni blokovi) da bi preživio. Svaka razina smanjuje mjerač vremena za jednu sekundu. Nakon svake uspješne razine, sigurno područje se povećava. Pogledajte donji kod:

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

Spremi ovo kao ' mini_game_2.py 'i dajte mu priliku.

Pi 2 ima nekih problema s performansama dok radi Minecraft. Grafikon upotrebe središnje procesorske jedinice (CPU) ( gornji desni kut ) nikada ne pokazuje veliko opterećenje, pa to mora biti posljedica lošeg dizajna i optimizacije od strane programera. Ti problemi nisu povezani s pokretanjem koda (nastavljaju se i kad Python nije pokrenut), no dodatno ih komplicira ova mini igra. Ako se vaš Pi doista muči, možda ćete htjeti smanjiti veličinu arene ili overclockati svoj Pi.

kako vratiti iphone 5s bez itunes

Detektor dijamanata

Napravimo drugi krug. Ovo će upotrijebiti diodu koja emitira svjetlo (LED) za osvjetljavanje kada se ispod nje nalaze dijamanti (unutar 15 blokova). Evo što vam treba:

  • 1 x Oglasna ploča
  • 1 x LED
  • 1 x 220 ohmski otpornik
  • Ženski> muški kablovi za preskakanje
  • Muški> Muški kabeli za preskakanje

Evo kruga:

Spojite anodu (dugačka noga) na GPIO pin 14. Ovaj pin djeluje kao +5v. Spojite katodu (kratka noga) na masu.

Koristio sam jeftinu rudnu igračku i izmijenio je uklanjanjem stražnjeg poklopca i elektronike, a zatim sam ispod stavio LED diodu. Ovo biste lako mogli učiniti trajnim pomoću vrućeg ljepila ili nečeg sličnog.

Spremi ovaj kôd kao ' dijamanti.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

Kad se ispod uređaja nalazi blok dijamantske rude (unutar 15 blokova), svjetlo će bljeskati.

ThinkGeek Minecraft Light -Up plava kamena dijamantna ruda - zasigurno ćete držati svinjare podalje KUPITE ODMAH NA AMAZONU

Jeste li napravili nešto super s Minecraft Pi? Javite mi u komentarima što ste postigli ili koliko ste uspjeli u igrama.

Nadamo se da vam se sviđaju stavke koje preporučujemo i raspravljate! MUO ima pridružena i sponzorirana partnerstva pa od nekih vaših kupnji primamo dio prihoda. To neće utjecati na cijenu koju plaćate i pomaže nam da ponudimo najbolje preporuke proizvoda.

Udio Udio Cvrkut E -pošta Isplati li se nadogradnja na Windows 11?

Windows je redizajniran. No, je li to dovoljno da vas uvjeri da prijeđete s Windows 10 na Windows 11?

Pročitajte Dalje
Povezane teme
  • Uradi sam
  • Programiranje
  • Minecraft
  • Malina Pi
  • Elektronika
  • Piton
O autoru Joe Coburn(136 objavljenih članaka)

Joe je diplomirao računalne znanosti na Sveučilištu Lincoln, UK. On je profesionalni programer softvera, a kad ne leti bespilotnim letjelicama ili ne piše glazbu, često ga se može zateći kako fotografira ili proizvodi video zapise.

Više od Joea Coburna

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu