Molts programes estan escrits de manera lineal. De fet, tots els que hem escrit fins ara ho són! Això vol dir que sempre que s'executa el codi passa el mateix, sense cap canvi. Per exemple,
from mcpi.minecraft import
Minecraft mc = Minecraft.create()
madera = 17
x, y, z = mc.player.getPos()
for i in range(0, 10):
for j in range(0,5):
mc.setBlock(x+1+i,y+j,z,madera)
mc.setBlock(x+1+i,y+j,z+10,madera)
for i in range(0, 10):
for j in range(0,5):
mc.setBlock(x+1,y+j,z+i,madera)
mc.setBlock(x+10,y+j,z+i,madera)
for i in range(0, 10):
for j in range(0,6):
mc.setBlock(x+1+i,y+5+j,z+j,madera)
for i in range(0, 10):
for j in range(1,6):
mc.setBlock(x+1+i,y+10-j,z+5+j,madera)
sempre que s'executi el codi de l'esquerra, apreixerà la figura de la dreta.
IF:
D'altra banda, els programadors, per tal d'automatitzar tasques i donar al programa la "capacitat de prendre decisions", fan servir les estructures de control de flux, i les més utilitzades de totes són els condicionals.
Donat que els condicionals són estructures que s'estudien a qualsevol idioma, és molt fàcil entendre com funcionen a programació. Vegem un exemple:
from mcpi.minecraft import Minecraft
from time import sleep
mc = Minecraft.create()
hierba = 2
flor = 38
while True:
x, y, z = mc.player.getPos() # posició del jugador (x, y, z)
bloc_sobre = mc.getBlock(x, y-1, z) # tipus de bloc
if bloc_sobre == hierba:
mc.setBlock(x, y, z, flor)
sleep(0.1)
Fixa't al comandament "if" del codi anterior. El que fa és demanar si s'acompleix una condició, i si és així executa el codi que està indentat. Si no, simplement passa de llarg.
D'altra banda, s'ha fet servir el comandament "while", que no és més que un bucle (com els for), però que en comptes d'executar-se un nombre determinat de vegades, s'executa sempre que una condició sigui vertadera (True). En aquest cas li hem donat directament el valor True perquè s'executi durant tot el temps que s'està connectat al joc.
Nota també que s'ha importat una funció nova: sleep. Aquesta funció fa que s'aturi l'execució del programa durant un temps que li donam com a paràmetre quan cridem la funció.
Exercici 1: Què penses que fa el codi anterior? Què penses que passaria si llevéssim el bucle while?
Exercici 2: Fes servir l'estructura de l'exemple anterior amb alguns canvis perquè el programa faci que apareguin blocs d'herba per davant a mesura que caminem si ens trobam amb aigua. Aquest programa farà que mai ens enfonsem. Desa l'arxiu amb el nom "perdamuntlaigua.py". Pistes:
Ara no voldràs saber damunt quin bloc estàs col·locat, si no el que tens davant.
Pensa que pots caminar en quatre direccionos: +x, -x, +z i -z.
ELSE:
L'estructura del comandament "if" per ell tot sol és incompleta, ja que diu el que s'ha de fer quan es compleix una condició, però no el que passa si no es compleix. Per donar les instruccions a seguir quan la condició no es compleix es fa servir el comandament "else". Fixa't a l'exemple:
if bloc_sobre == hierba: # condició que s'ha de complir
mc.setBlock(x, y, z, flor) # codi que s'executa en cas de que es compleixi
else: # comandament per donar les instruccions alternatives
mc.setblock(x,y,z,tnt) # codi que s'executa en cas de que no es compleixi la condició
Exercici 3: Utilitza l'estructura "if / else" per fer que quan camini per aigua faci apareixer blocs per caminar damunt i flors per darrera, i la resta del temps que només vagi posant flors. Desa l'arxiu am el nom "ifelse.py".
ELIF:
Pot passar també, que hi hagi diferents possibilitats per fer coses diferents (més d'una condició). Pensa per exemple en el cas en el que volguéssim:
Si camina per l'herba, que planti flors.
Si camina per l'aigua, que posi blocs de roca.
Si vola, que vagi ddeixant blocs de tnt activables.
Aquesta estructura es pot programar amb el comandament "elif", que és la contracció de "else, if...", de la següent manera:
if bloc_sobre == hierba: # condició 1
codi1 # codi que s'executa en cas de que es compleixi la condició 1
elif bloc_sobre == aigua: # condició 2
codi2 # codi que s'executa en cas de que es compleixi la condició 2
else: # comandament per donar les instruccions alternatives
codi 3 # codi que s'executa en cas de que no es compleixi cap condició
Exercici 4: Utilitza l'estructura anterior per programar les accions que es descriuen als punts 1, 2 i 3 d'aquest apartat. Desa l'arxiu amb el nom "elif.py".