spájame
slovenskú
IT komunitu
pridaj sa
Registrácia · Login

Dominika Delejová 22.3.2018
Hodnoť článok:
1 0

Raspberry Pi a hra Minecraft II.: Staviam - staviaš - staviame

V tejto časti sa naučíme "čarovať", potom si postavíme pár budov a na konci si zahráme krátku hru. Vyskúšame si prehľadávanie zoznamu pomocou cyklu a ďalšie funkcie sveta Minecraft.

Každý nový program budeme začínať rovnako. Vložíme si balíky a vytvoríme spojenie so svetom.

# Vloženie balíkov
from mcpi.minecraft import Minecraft
from mcpi import block

# Vytvorenie spojenia so svetom
mc = Minecraft.create()

Čarodej!

Naše prvé dnešné dobrodružstvo začneme kúzlom. Všetko čoho sa dotkneme sa premení na ovocie.

# Nekonečný cyklus
while True:
    blockHits = mc.events.pollBlockHits()

    # Prejdenie všetkých zasiahnutých kociek zo zoznamu
    for hit in blockHits:
        mc.setBlock(hit.pos.x, hit.pos.y, hit.pos.z, block.MELON)  # Zmena kocky na melón

Náš program si vložíme do nekonečného cyklu while True. Tým sa bude neustále opakovať a naše "čarovanie" tak ukončíme až kombináciou kláves CTRL+C. Následne použijeme funkciu pollBlockHits(). Tá zaznamená všetky zasiahnutia kocky mečom. Jej návratová hodnota je zoznam, ktorý si uložíme do premennej blockHits.

Aby sme sa dostali k hodnotám zo zoznamu, musíme s premennou pracovať ako s klasickým poľom. To znamená, že jeho hodnoty sú dostupné ako prvky poľa, ktoré vieme indexovať a určovať veľkosť poľa. Aby sme sa dostali k jednotlivým hodnotám, prejdeme si jeho všetky prvky cyklom for.

Teraz už len zmeníme typ kocky zasiahnutých blokov. Na to použijeme funkciu setBlock(). Typ kocky si môžme zvoliť napríklad melón, prípadne ľad, diamant alebo čo Vám len zíde na um.

Gratulujem, naučili ste sa čarovať!


Ako dotykom čarovného prútika sa kocka zmení na melón.

Nezabúdajte, že kocky je možné meniť len pri dotyku mečom. Iným nástrojom to nebude možné. Na zasiahnutie cieľa používajte pravé tlačidlo myši (nie ľavé ako na útok).

Ľadový úkryt

Samotný základ Minecraft hry je v stavaní objektov. Je načase, aby sme si aj my niečo vyskúšali postaviť. Začneme niečím malým a možno trochu neštandardným. Bude to iglu.

Na postavenie úkrytu pred chladnou nocou nám stačí funkcia setBlocks(), ktorú sme si spomínali už v úvodnej časti. Dôležité je iba použitie správnych rozmerov budovy.

Vyskúšajme si jednu navrhnúť. Jej rozmery budú 11x5x11 blokov. Po vytvorení tohto súvislého bloku kociek si budeme musieť vytvoriť voľný priestor v jej vnútri. Na to použijeme kocky vzduchu, ktoré vytvoria súvislý "prázdny" blok o jednu kocku menší ako bol predošlý. Zostane nám celý obvod iglu.

# Získanie pozície hráča
x, y, z = mc.player.getPos()

# Steny iglu
mc.setBlocks(x + 1, y, z + 1, x + 10, y + 5, z + 10, block.ICE)

# Vnútro budovy
mc.setBlocks(x + 2, y + 1, z + 2, x + 9, y + 4, z + 9, block.AIR)

Po postavení týchto stien nám chýba už len jediná vec. Vchod. Použijeme teda nasledovný kus kódu, ktorý nám vytvorí do nášho iglu vstup.

# Vchod
mc.setBlocks(x + 5, y + 1, z + 1, x + 6, y + 3, z + 1, block.AIR)

A čo tak vytvoriť si peknú podlahu?

# Bloky pre podlahu z červeného dreva
mc.setBlocks(x + 2, y, z + 2, x + 9, y, z + 9, block.WOOL.id, 14)

Použijeme drevenú podlahu červenej farby, ktorej id je 14. Farbu dreva si je možné zvoliť z rôznych odtieňov od 0 - 15. Ale je len na vašej predstavivosti, aký typ podlahy či celej budovy si zvolíte.


Iglu, ktoré vás ochráni pred nebezpečenstvom.

Pyramída

Poďme si vyskúšať menej tradičné tvary. Medzi tie nepochybne patrí pyramída.

height = 10                             # výška pyramídy
levels = range(height)                  # rozsah
pos = mc.player.getTilePos()

x, y, z = pos.x + height, pos.y, pos.z  # pripočítanie výšky k súradnici x

# stavanie pyramídy z piesku po úrovniach
for level in levels:
    mc.setBlocks(x - level, y, z - level, x + level, y, z + level, block.SAND)
    y += 1                              # zvýšenie súradnice o 1

Určíme si výšku pyramídy. Tú sme si zvolili 10 blokov a uložili do premennej height. Pomocou funkcie range() sme si vygenerovali pole celých čísel od 0 po 9, ktoré využijeme pri cykle for. Funkcia má za úlohu vytvoriť zoznam čísel podľa stanoveného rozsahu.

K súradnici x pripočítame zadanú výšku, kvôli správnemu rozloženiu kociek. Následne za pomoci cyklu for budeme vytvárať bloky. Začneme najširšou časťou pyramídy a postupne zmenšovaním rozmerov a zvyšovaním výšky vytvoríme bloky piesku usporiadané nad sebou v tvare pyramídy.


10 stupňová pyramída.

Podobným skladaním blokov rôznych tvarov a veľkostí si môžete vystavať rôzne vlastné objekty a dokonca celé mesto.

Hra na lávu

Určite sa mnoho z vás ako malé deti zabávalo skákaním po pohovke alebo posteli, pri čom ste sa nemohli dotknúť zeme. Tá totiž predstavovala horúcu lávu.

Aj teraz si zahráme podobnú hru. Avšak rozdiel bude v tom, že nebudeme skákať po nábytku ale po piesku. A láva nebude len v našich predstavách.

V tomto programe využijeme funkciu getBlock(x, y, z). Tá vráti typ bloku nachádzajúceho sa na súradniciach x, y, z ako celé číslo. Pre piesok ide o hodnotu 12. V podmienke si teda zistíme či dlaždica, nad ktorou sa nachádza hráč je piesok a má túto hodnotu. V prípade, že áno, program po pol sekunde čakania zmení kocku na lávu.

# vloženie balíka pre čas
from time import sleep

# hodnota bloku piesku
sand = 12

while True:
    pos = mc.player.getTilePos()                        # zistenie pozície hráča
    blockBelow = mc.getBlock(pos.x, pos.y-1, pos.z) 	# dlaždica pod hráčom
    if blockBelow == sand:                              # nachádza sa hráč na piesku?
        sleep(0.5)                                      # čakanie pol sekundy
        mc.setBlock(pos.x, pos.y-1, pos.z, block.LAVA)  # zmena bloku na lávu

Jedinou šancou hráča je buď sa dlho nezdržiavať na jednom mieste alebo utekať čím skôr preč z piesočného povrchu. Záchranou môže byť buď zeleň alebo voda, v ktorej láva stuhne.


Nestabilný piesok.

Viac informácií o programovaní Minecraftu v jazyku Python nájdete:
https://www.raspberrypi.org/magpi-issues/Essentials_Minecraft_v1.pdf
alebo v knihe Adventures in Minecraft(Martin O’Hanlon, David Whale).
Predchádzajúca časť: Raspberry Pi a hra Minecraft I.: Orientačný beh
Kódy na stiahnutie: minecraftPi.zip
Na záver pár funkcií, Minecraft API: http://www.stuffaboutcode.com/p/minecraft-api-reference.html.

Hodnoť článok:
1 0

0 komentárov k článku:

Komentovať môžu iba prihlásení

Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)

Prihlás sa tu, ak už máš profil na Zajtra.sk:


Zabudol som heslo

Zajtra.sk > Programovanie > Seriály > Raspberry Pi a hra Minecraft II.: Staviam - staviaš - staviame


Kritika

Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!

Reklama

Seriály zo Zajtra.sk

Reklama