Ariketa hau Alexen bidean lore-arrastoa uztean datza. Zeregin samurra da uneko posizioa erabiltzen eta blokeak jartzen jakinda.
Lehenik eta behin, idatzi kode hau pauso bakoitzean loretxoa uzteko:
from mcpi.minecraft import Minecraft
from time import sleep
mc = Minecraft.create()
lorea = 38
while True:
x, y, z = mc.player.getPos()
mc.setBlock(x, y, z, lorea)
sleep(0.1)
Kodea idatzitakoan, hartu bideo-jokoaren kontrola, eta joan oinez apur batean. Eman buelta erdia, eta ikusi utzitako lore-arrastoa.
While True
begizta erabiltzen bada, etenik gabe jaregiten dira loreak. Izan ere, begizta hori erabiltzen da While
egituraren barruko aginduak etengabe betetzeko. Sakatu teklatuan CTRL + C (Phytonen agindu-lerroko leihoan bertan) eta norberak abiarazitako kodeak geldiarazi egiten dira, arestikoa bezalakoa, adibidez.
Esperientzia ikusgarriagoa egin nahi izanez gero, saiatu hegaz egiten eta gero ikusi zeruan utzitako lore-arrastoa.
Eta gauzak apur bat zailtze aldera, nola egin liteke lore-arrastoa belardietan bakarrik uzteko eta ez beste inon?
Horretarako, jakin behar da Alexek zein bloke zapaltzen duen; belarra zapaltzen badu, lorea utziko du, eta bestela ez. Informazio hori eskuratzeko, agindu bat dago API izeneko Minecraften liburutegian, eta ematen zaion koordenatuan zein eratako blokea dagoen esaten du getBlock
funtzioak. Horretarako, idatzi agindu hau:
x, y, z = mc.player.getPos() # uneko kokapena (x, y, z)
uneko_blokea = mc.getBlock(x, y, z) # block ID
print(uneko_blokea)
Kode horretan ikusten da programatzaileak utzitako oharrak direla traola ikurraren atzetik lerro-jauzira artekoak. Horrela adierazten dira idatzi duenak aurrerago gogoratu dezan egindakoaren zergatia, edo idatzi ez duenari argibideak ematearren. Fluxuak ohar horiei ez ikusiarena egiten diete eta, hortaz, ez dute programazioan eragiten.
Harira itzuliz, Alex kokaturik dagoen blokea itzultzen du getBlocke
k: adibidean, 0
balioa duena, airearena. Hori gertatu da funtzioari pasa beharreko datuetan altuerari balio bat edo bloke bat kendu behar zaiolako. Honela eginez, zeren gainean dagoen itzultzen du, edo, beste hitz batzuekin esanda, oinpean zer dagoen jasotzen da:
x, y, z = mc.player.getPos() # jokalariaren uneko posizioa (x, y, z)
beheko_blokea = mc.getBlock(x, y-1, z) # blokearen ID
print(beheko_blokea)
Horrela ezagutu daiteke Alex zutik dagoen (oinpean duen) blokearen id
edo balioa. Bloke ID zerrenda atalean begiratu jasotako hori zein materiali dagokion.
Orain artekoa amaigabeko begizta batean eransten bada, etengabe agertuko da pantailaren aldamenera Alex zapaltzen ari den bloke mota:
while True:
x, y, z = mc.player.getPos()
beheko_blokea = mc.getBlock(x, y-1, z)
print(beheko_blokea)
Ezkerrean inprimatzen du Alexek azpian uneoro duen blokea.
Gogoratu, beste behin ere, prozesu hori laburtzeko IDLEaren leihora joan eta bertan CTRL + C sakatu behar dela.
Bestalde, baldintza-agindua edo if
erabiltzen da programa bateko aukerak adierazteko. Kasu honetan, loretxoa utzi behar den edo ez bereizteko balio du:
belarra = 2
lorea = 38
while True:
x, y, z = mc.player.getPos() # player position (x, y, z)
beheko_blokea = mc.getBlock(x, y-1, z) # block ID
if beheko_blokea == belarra:
mc.setBlock(x, y, z, lorea)
sleep(0.1)
Gehiago ere egin daiteke. Alex dagoen zorua belarra ez baldin bada, belar bihurtzeko agindu dakioke, adibidez:
if block_beneath == belarra:
mc.setBlock(x,y,z, lorea)
else:
mc.setBlock(x,y-1,z, belarra)
Baldintza horrela ezarrita, belardian oinez joan ahala arrastoa uzten da, bestela, behean dagoena (airea, ura...) belar bihurtzen baita. Aitzitik, probatzen hasi eta bide beretik itzuliz gero, berriz ere lore-arrastoa uzten da. Ohartu, beraz, amildegi batean aurrera eginez gero, belarrezko zubia sortuko dela ez erortzeko.