Hackování Minecraftu na Raspberry Pi

Obrázek 1 z 21

21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
Co je Minecraft?
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů
21 nejlepších Minecraft projektů

The Raspberry Pi 2 je překvapivě schopné zařízení, vezmeme-li v úvahu jeho cenu pod 30 liber. Dodává se s předinstalovanou verzí Minecraftu spolu s rozhraním API, které vám umožní psát kód pro spuštění ve virtuálním světě. Uděláte to v Pythonu, který se snadno učí. Kombinace Pi, Pythonu a Minecraftu poskytuje skvělou příležitost začít zkoumat možnosti programování. A vzrušení z toho, jak se dům staví na virtuální krajině, není jen pro děti.

Skriptování v Minecraftu

Minecraft je otevřená sandboxová hra, která nemá dějovou linii, kterou by se dala sledovat. Někdy je to popisováno jako „virtuální Lego“, protože hráč může pomocí bloků, které má k dispozici, postavit jakoukoli strukturu. Verze dodávaná s Raspberry Pi má omezenou sadu funkcí přizpůsobenou její vzdělávací roli – takže se nemusíte bát, že vás budou pronásledovat například zombie. Interakce s tímto světem nevyžaduje žádné speciální nastavení, pouze nedávné sestavení operačního systému Raspbian plus programovací prostředí. Rozhodl bych se pro Geany, kterou si můžete nainstalovat otevřením LXTerminal a zadáním:

sudo apt-get install geany

Začněme vytvořením scénáře pro stavbu domu před hráčem – ale místo toho, abychom ho jen plácli na místo, ho animujeme. Chystáme se také zabudovat různá konfigurovatelná nastavení, která hráči umožní experimentovat s různými rozměry a materiály. Díky tomu bude program také modulární, takže jej lze použít jako základ pro vytváření sofistikovanějších wellingů.

Aby kód fungoval, načtěte jej do Geany, poté spusťte Minecraft a vytvořte nový svět. Stisknutím klávesy Tab uvolněte kurzor z okna Minecraftu a kliknutím na ikonu ozubeného kolečka v Geany (nebo stisknutím F5) spusťte skript. Měli byste vidět, jak se dům kouzelně smontuje sám. Pokud ne, zkuste se otočit – může to být za vámi! Můžete vidět skript v akci tady. Jak tedy scénář funguje? Nejprve se otevře odkaz na Minecraft:

importovat mcpi.minecraft jako minecraft, čas mc=minecraft. Minecraft.create()

V Pythonu je důležité věnovat pozornost odsazení, protože tak je kód rozdělen do bloků. V tomto případě jsou oba řádky zarovnané s levým okrajem: první řádek importuje knihovny Minecraft a Time a druhý vytváří objekt Minecraft, který můžeme používat po celou dobu. Následujících 25 řádků nastavuje několik proměnných pro bloky, které budeme používat, abychom je mohli označit jako, řekněme, wood_planks spíše než podle jejich ID bloku (v tomto případě 5). Následně určíme, který z těchto bloků bude použit na stěny, který na střechu a tak dále. Konstrukci domu snadno zcela změníme tím, že vyměníme cihlové zdi například za dlažební kostky. Nakonec nastavíme šířku, délku a výšku našeho požadovaného obydlí.

Nyní voláme funkci Minecraft mc.player.getTilePos(), abychom našli hráče v krajině a hodnoty, které come back se pak používají k vytvoření dvou proměnných, vlevo a dole, které popisují, kde bude první roh obydlí být.

Poté struktura scénáře odpovídá procesu Minecraftu „ručního“ stavění domu. Začneme tím, že vyčistíme prostor, takže pokud se hráč rozhodne postavit dům uvnitř, řekněme v hoře, obývací prostor nebude z pevného kamene. Zde je blok kódu – funkce v Pythonu – která dělá toto:

def clear_house (nukleární):
if nukleární==Pravda:
blast_zone=20
jiný:
blast_zone=0
mc.setBlocks (left-blast_zone, player_
země, dole+zóna výbuchu, vlevo+šířka+výbuch_
zóna, hráč_země+výška+výbuch_
zóna+10,spodní délka-zóna výbuchu, vzduchový_blok)

Když zavoláme clear_house, předáme parametr nukleární. Má hodnotu True nebo False. Můžete to zkusit zavolat pomocí True, abyste vyčistili větší objem kolem cílové oblasti, nebo to zavolat pomocí False, abyste omezili vzdálenost na vnitřní rozměry domu. V Minecraftu se funkce mc.setBlocks používá k vytvoření kostky bloků předáním souřadnic ve třech rozměrech protilehlých rohů následovaných typem bloku, který chcete použít. V tomto případě vyčistíme prostor, takže použijeme vzduch.

Jakmile vyklidíme prostor, je čas přejít ke stavbě. Každá z těchto stavebních etap probíhá ve své vlastní funkci. Na konci skriptu uvidíte funkci nazvanou main(), která řídí tok programu tím, že postupně volá každou fázi konstrukce. Rozumným pojmenováním funkcí a jejich voláním z main() je snadné pochopit, co program dělá:

def main():
clear_house (nepravda)
start_pos=[vlevo, dole, hráč_
přízemní]
build_floor (start_pos)
course=build_walls (start_pos)
add_door (poloha_dveří)
time.sleep (zpoždění*10)
build_roof (start_pos, course)

Další funkce volaná v main() vytvoří podlahu – používá mc. setBlocks znovu pro vyřezání základu (pro umělecký efekt) a poté přidejte kostku dlaždic o hloubce jednoho bloku, abyste vytvořili pevnou podlahu v našem domě.

Stavění zdí

Funkce build_walls je srdcem programu. Nejúčinnějším způsobem, jak vytvořit plášť domu, by bylo připlácnout pevnou kostku cihel a pak použít clear_house k vyřezání interiéru. Chceme však, aby dům vypadal, jako by se sám stavěl, takže musíme bloky umisťovat jednotlivě, jeden po druhém. Zde je zjednodušená verze kódu pro stavbu zdí:

def build_course (start_pos, směr,
chod):
bloky = 1
current_horiz=start_pos[0]
current_vert=start_pos[1]

if direction==”up” or
směr=="dolů":
počet_bloků=délka
jiný:
počet_bloků=šířka

zatímco blokuje mc.setBlock (current_horiz, player_
země+kurz, aktuální_vert, zeď_blok)
if direction==”up”:
current_vert-=1
elif direction==”dolů”:
aktuální_vert+=1
elif direction==”vpravo”:
aktuální_horiz+=1
jiný:

aktuální_horiz-=1
bloky=bloky+1 # přesun na další blok
čas.spánek (zpoždění)

Začneme uložením výchozí pozice – bude to pozice posledního bloku položeného z předchozí řady bloků. Poté určíme, kolik bloků položíme v závislosti na tom, zda jdeme po délce budovy nebo její šířce.

Fáze budování je obsažena v bloku while – pokračuje, dokud nepoložíme všechny bloky. mc.setBlock umístí jeden blok na zobrazené souřadnice a poté jednu z těchto souřadnic zvýší v závislosti na směru, ve kterém pokládáme. Výsledkem je, že bloky jsou položeny podél stěny před zatáčením rohu a pokračují v obdélníku, dokud není kurz dokončen.

Konečná verze kódu je trochu více zapojená, přidává okna na každou stěnu. Okna jsou dynamicky dimenzována tak, že mají polovinu délky stěny a jsou vystředěná. Zaznamenává také polohu dveří; přidá se, jakmile se postaví zdi. Dráhy se ovládají z funkce build_walls, která opakuje funkci build_course pro každý řádek bloků, dokud nedosáhne konečné výšky.

Můžete si dokonce zkusit postavit svůj dům v oceánu nebo ve vzduchu – udělejte to dvojitým stisknutím mezerníku, abyste mohli létat, a dalším stisknutím se před spuštěním skriptu zvedněte. Změňte proměnné wall_block a roof_block, abyste viděli, co se stane, když vytvoříte stěny nebo střechu ze zlata nebo dokonce z lávy. Pomocí úplného seznamu můžete přidat vlastní bloky tadya přidáním související proměnné do skriptu. Náročnější úpravy mohou zahrnovat přidání více podlaží do konstrukce, pokud je proměnná výška nastavena na dostatečně velkou hodnotu. Vymyslete, jak přidat například věžičky, a máte z toho hrad Minecraft.

Tyto úpravy mohou znít triviálně, ale profesionálně programuji více než 20 let a stále mě baví, když úryvek kódu funguje tak, jak má. Pokud jste ještě nikdy neprogramovali, doufám, že to zkusíte – a pokud máte v domácnosti fanouška Minecraftu, doporučuji mu nechat kód a zjistit, kam ho zavede. Odkazy na zdroje Minecraft Pi najdete na kevpartner.co.uk/programming.