Les funcions són blocs de codi reutilitzables que duen a terme tasques específiques.
Encara no hem xerrat d'elles, però ja les hem utilitzat. Pensa en els programes als que has escrit coses com:
mc.postToChat("Hello world!!")
x, y, z = mc.player.getPos()
mc.setBlock(x+1+i,y+k,z+j,tnt,1)
"postToChat", "getPos" i "setBloc" són funcions que estan predefinides. Això vol dir que el programador que va escriure la connexió amb el Minecraft va pensar que aquestes funcions serien coses útils que tots els usuaris podrien fer servir i les va escriure. Per tant, sempre que cream la connexió amb:
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
estam important (import) totes aquestes funcionalitats.
Això planteja dues qüestions:
El programador de la connexió només va escriure aquestes tres funcions? Doncs no. N'hi ha moltes més que es poden consultar al següent enllaç.
Podem escriure les nostres pròpies funcions per tal d'automatitzar més tasques amb menys codi? Doncs sí.
Anem a veure exemples de les dues coses.
Exemple 1: mc.setBlocks(x0,y0,z0,x1,y1,z1,tnt,1)
Aquest cas és molt semblant a "setBlock", però com que Python és fàcil de llegir, ja hauràs notat que està en plural. Això ens permet fer conjunts de blocs donant el punt d'inici (x0,y0,z0) i el final (x1,y1,z1).
I ara et demanaràs, per què no ho hem vist abans? Doncs perquè d'aquesta manera, al punt anterior s'ha pogut treballar amb els bucles (loops) de Python, que són un concepte realment bàsic a la programació.
Exercicis:
Torna a fer els exercicis 5 i 6 del punt anterior, però en aquesta ocasió utilitza "setBlocks". Desa els arxius amb els noms terrab.py i quepetib.py.
Quina de les dues formes de fer feina et sembla més fàcil, més directa? Comences a entendre els avantatges d'escriure funcions?
Exemple 2: Funció per crear un arbre i més...
Ara anem a veure com crear les nostres pròpies funcions. Començarem amb una funció que crearà un arbre.
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
def makeTree(x,y,z):
madera = 17
hojas = 18
aire = 0
mc.setBlocks(x,y,z,x,y+3,z,madera)
mc.setBlocks(x-2,y+4,z-2,x+2,y+5,z+2,hojas)
mc.setBlocks(x-1,y+6,z-1,x+1,y+7,z+1,hojas)
mc.setBlock(x-1,y+7,z-1,aire)
mc.setBlock(x+2,y+5,z-2,aire)
mc.setBlock(x+2,y+4,z+2,aire)
mc.setBlocks(x+1,y+6,z-1,x+1,y+7,z-1,aire)
mc.setBlocks(x+1,y+6,z+1,x+1,y+7,z+1,aire)
mc.setBlocks(x-1,y+6,z+1,x-1,y+7,z+1,aire)
x, y, z = mc.player.getPos()
makeTree(x+1,y,z)
Fixa't en que per crear la funció s'ha de començar amb el comando "def" i que tot el contingut d'aquesta funció ha d'anar indentat.
Fixa't també en que quan cridam la funció "makeTree(x+1,y,z)" li hem de passar entre parèntesi les coordenades, ja que les necessita per anar col·locant els blocs.
Exercicis:
Dóna un cop d'ull a la funció per entendre el que fa. Personalitza el tipus d'arbre al teu gust (tipus de fusta i de fulles, distribució de les fulles,...). Desa l'arxiu amb el nom arbre.py.
Escriu una segona funció que faci apareixer un bosc d'arbres fent servir la funció que has creat i un o més bucles "for". Crida la funció al final de l'arxiu i observa els resultats. Desa l'arxiu amb el nom bosc.py.