Hacknutie Minecraftu na Raspberry Pi

Obrázok 1 z 21

21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
Čo je Minecraft?
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov
21 najlepších Minecraft projektov

The Raspberry Pi 2 je prekvapivo schopné zariadenie vzhľadom na jeho cenu pod 30 GBP. Dodáva sa s predinštalovanou verziou Minecraftu spolu s API, ktoré vám umožňuje písať kód, ktorý sa má spustiť vo virtuálnom svete. Urobíte to v Pythone, ktorý sa dá ľahko naučiť. Kombinácia Pi, Pythonu a Minecraftu poskytuje skvelú príležitosť začať objavovať možnosti programovania. A vzrušenie z toho, ako sa dom stavia na virtuálnej krajine, nie je len pre deti.

Skriptovanie v Minecrafte

Minecraft je otvorená sandboxová hra, ktorá nemá dejovú líniu. Niekedy sa to označuje ako „virtuálne Lego“, pretože hráč môže pomocou blokov, ktoré má k dispozícii, postaviť akúkoľvek štruktúru. Verzia dodávaná s Raspberry Pi má obmedzenú sadu funkcií prispôsobenú jej vzdelávacej úlohe – takže sa nemusíte báť, že vás budú prenasledovať napríklad zombie. Interakcia s týmto svetom nevyžaduje žiadne špeciálne nastavenie, iba nedávne zostavenie operačného systému Raspbian plus programovacie prostredie. Vybral by som si Geany, ktorý si môžete nainštalovať otvorením LXTerminal a zadaním:

sudo apt-get install geany

Začnime vytvorením scenára na stavbu domu pred prehrávačom – ale namiesto toho, aby sme ho len prihodili na miesto, ho animujeme. Chystáme sa tiež zabudovať rôzne konfigurovateľné nastavenia, ktoré umožnia hráčovi experimentovať s rôznymi rozmermi a materiálmi. Vďaka tomu bude program modulárny, takže ho možno použiť ako základ pre vytváranie sofistikovanejších studní.

Aby kód fungoval, nahrajte ho do Geany, spustite Minecraft a vytvorte nový svet. Stlačením klávesu Tab uvoľnite kurzor z okna Minecraftu a kliknutím na ikonu ozubeného kolieska v Geany (alebo stlačením F5) spustite skript. Mali by ste vidieť, ako sa dom magicky zostavuje sám. Ak nie, skúste sa otočiť – môže to byť za vami! Môžete vidieť skript v akcii tu. Ako teda scenár funguje? Najprv sa otvorí odkaz na Minecraft:

importovať mcpi.minecraft ako minecraft, čas mc=minecraft. Minecraft.create()

V Pythone je dôležité venovať pozornosť odsadzovaniu, pretože kód je rozdelený do blokov. V tomto prípade sú oba riadky zarovnané s ľavým okrajom: prvý riadok importuje knižnice Minecraft a Time a druhý vytvára objekt Minecraft, ktorý môžeme používať v celom texte. Nasledujúcich 25 riadkov nastavuje niekoľko premenných pre bloky, ktoré budeme používať, aby sme ich mohli označovať napríklad ako wood_planks a nie podľa ich ID bloku (v tomto prípade 5). Potom určíme, ktoré z týchto blokov sa použijú na steny, ktoré na strechu atď. Konštrukciu domu môžeme jednoducho úplne zmeniť tak, že murované steny vymeníme napríklad za dlažobné kocky. Nakoniec nastavíme šírku, dĺžku a výšku nášho požadovaného príbytku.

Teraz voláme funkciu Minecraft mc.player.getTilePos(), aby sme našli hráča v krajine a hodnoty, ktoré come back sa potom používajú na vytvorenie dvoch premenných, vľavo a dole, ktoré popisujú, kde bude prvý roh obydlia byť.

Potom sa štruktúra scenára zhoduje s procesom Minecraftu „ručným“ stavaním domu. Začneme tým, že vyčistíme priestor, takže ak sa hráč rozhodne postaviť dom vo vnútri, povedzme hory, obytná časť nebude z pevného kameňa. Tu je blok kódu – funkcia v Pythone – ktorá robí toto:

def clear_house (jadrový):
ak jadrové ==Pravda:
blast_zone=20
inak:
blast_zone=0
mc.setBlocks (left-blast_zone, player_
zem, spodok+zóna_výbuchu, vľavo+šírka+výbuch_
zóna, hráč_zem+výška+výbuch_
zóna+10, spodná dĺžka-zóna výbuchu, vzduchový_blok)

Keď zavoláme clear_house, zadáme parameter nukleárny. Má hodnotu True alebo False. Môžete to skúsiť volať pomocou True, aby ste vyčistili väčší objem okolo cieľovej oblasti, alebo to volať pomocou False, aby ste obmedzili vzdialenosť na vnútorné rozmery domu. V Minecrafte sa funkcia mc.setBlocks používa na vytvorenie kocky blokov tak, že jej prenesiete súradnice v troch rozmeroch protiľahlých rohov, za ktorými nasleduje typ bloku, ktorý chcete použiť. V tomto prípade čistíme priestor, takže používame vzduch.

Keď sme vyčistili priestor, je čas prejsť na stavbu. Každá z týchto stavebných etáp prebieha vo svojej vlastnej funkcii. Na konci skriptu uvidíte funkciu s názvom main(), ktorá riadi tok programu postupným volaním každej fázy konštrukcie. Rozumným pomenovaním funkcií a ich volaním z main() je ľahké pochopiť, čo program robí:

def main():
clear_house (nepravda)
start_pos=[vľavo, dole, hráč_
zem]
build_floor (start_pos)
course=build_walls (start_pos)
add_door (pozícia_dverí)
time.sleep (oneskorenie*10)
build_roof (start_pos, course)

Ďalšia funkcia volaná v main() vytvára podlahu – používa mc. setBlocks znova vyrezať základ (pre umelecký efekt) a potom pridať kocku podlahových dlaždíc s hĺbkou jedného bloku, aby sme vytvorili pevnú podlahu v našom dome.

Budovanie stien

Srdcom programu je funkcia build_walls. Najúčinnejším spôsobom, ako vytvoriť škrupinu domu, by bolo zraziť pevnú kocku z tehál a potom použiť clear_house na vyrezanie interiéru. Chceme však, aby dom vyzeral, že sa stavia sám od seba, preto musíme bloky umiestňovať jednotlivo, jeden po druhom. Tu je zjednodušená verzia kódu na stavbu stien:

def build_course (start_pos, smer,
kurz):
bloky = 1
current_horiz=start_pos[0]
current_vert=start_pos[1]

ak smer==“hore“ alebo
smer=="dole":
počet_blokov=dĺžka
inak:
počet_blokov=šírka

zatiaľ čo bloky mc.setBlock (current_horiz, player_
pozemok+kurz, aktuálny_vert, stenový_blok)
ak smer==”hore”:
current_vert-=1
elif direction==”dole”:
current_vert+=1
smer elif==”vpravo”:
current_horiz+=1
inak:

aktuálny_horiz-=1
bloky=bloky+1 # presun na ďalší blok
time.sleep (meškanie)

Začneme uložením začiatočnej pozície – bude to pozícia posledného bloku položeného z predchádzajúceho radu blokov. Potom určíme, koľko blokov položiť, v závislosti od toho, či ideme po dĺžke budovy alebo jej šírke.

Fáza budovania je obsiahnutá v bloku while – pokračuje, kým nepoložíme všetky bloky. mc.setBlock umiestni jeden blok na zobrazené súradnice a potom zvýši jednu z týchto súradníc v závislosti od smeru, v ktorom kladieme. Výsledkom je, že bloky sa položia pozdĺž steny pred zahnutím rohu a pokračujú v obdĺžniku, kým sa kurz nedokončí.

Konečná verzia kódu je trochu viac zapojená, pridáva okná na každú stenu. Okná sú dynamicky dimenzované tak, že majú polovicu dĺžky steny a sú vycentrované. Zaznamenáva aj polohu dverí; pridáva sa, keď sú postavené steny. Trate sa ovládajú z funkcie build_walls, ktorá opakuje funkciu build_course pre každý rad blokov, až kým nedosiahne konečnú výšku.

Môžete si dokonca skúsiť postaviť svoj dom v oceáne alebo vo vzduchu – urobte to tak, že dvakrát stlačíte medzerník, aby ste mohli lietať, potom opätovným stlačením sa zdvihnite pred spustením skriptu. Zmeňte premenné wall_block a roof_block, aby ste videli, čo sa stane, ak vytvoríte steny alebo strechu zo zlata alebo skutočne lávy. Môžete pridať svoje vlastné bloky podľa úplného zoznamu tua pridanie priradenej premennej do skriptu. Náročnejšie úpravy môžu zahŕňať pridanie viacerých podlaží do konštrukcie, ak je premenná výška nastavená na dostatočne veľkú hodnotu. Vymyslite, ako napríklad pridať vežičky, a máte stavy hradu Minecraft.

Tieto vylepšenia môžu znieť triviálne, ale profesionálne programujem už viac ako 20 rokov a stále mám vzrušenie, keď úryvok kódu funguje tak, ako má. Ak ste ešte nikdy neprogramovali, dúfam, že to vyskúšate – a ak máte v domácnosti fanúšika Minecraftu, navrhujem, aby ste ho nechali na kóde a videli, kam ho zavedie. Odkazy na zdroje Minecraft Pi nájdete na kevpartner.co.uk/programming.