Al llarg d'aquest tema es pretén fer una aproximació original i entretinguda a conceptes bàsics de programació. Per fer-ho, utilitzarem el llenguatge python aplicat al control del joc Minecraft. Tots dos són ben coneguts, però per a tots aquells que no hagin sentit mai xerrar d'ells, aquí teniu una petita descripció:
Per què Python? Perquè el fan servir grans empreses, perquè és simple però potent, perquè té una sintaxi llegible i ordenada, perquè s'utilitza a moltes àrees, i perquè té una comunitat d'usuaris molt activa.
Per què Minecraft? Per què segueix Minecraft sent tan popular? És complicat contestar a aquesta pregunta. Resulta que Minecraft ha venut ni més ni menys que 54 milions de còpies a tot el món. Aquesta dada ve acompanyat d'un altre igual d'impressionant: ja ven més en consoles que en PC, on el joc va començar com una alfa, i després una beta i després un joc que sempre acaba expandint-se més i més... Per què nassos segueix la gent jugant-ho?
No és difícil d'entendre per què Minecraft té tant encant. És un LEGO digital, al cap i a la fi, i tothom en el seu interior té un arquitecte boig. Per molt que el joc tingui ja moltes més coses que fer que construir casetes, la gent segueix fent això com a boja: una casa en l'arbre, una casa subterrània, una submarina, una amb un volcà al voltant...
1. Preparatius per poder programar dins Minecraft
Obre el joc Minecraft: Menú --> Jocs --> Minecraft Pi.
Quan el joc s'hagi carregat, clica damunt "Start Game" --> "Create New".
Juga un poc i familiaritza't amb els controls del joc:
4. Obre l'IDE de Python: Menú --> Programació --> Python 3. Col·loca les finestres una al costat de l'altra, de manera que puguis treballar amb les dues.
Dins d'aquesta finestra de Python ja es pot començar a programar tot el que veurem a continuació, però s'ha de tenir present que, al tancar el programa, res es desarà. Per tant, és convenient crear un arxiu nou (File --> New) per cada codi que escriurem, de manera que l'arxiu es pugui desar amb l'extensió ".py" ii tornar a executar quan volguem i tantes vegades com volguem.
5. Estableix la connexió entre Python i Minecraft. crea un nou fitxer i escriu el següent codi (intentem ):
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
Des d'aquest moment, l'arxiu ha creat la connexio amb el joc, per tant, tot el que es programi dins d'ell s'executarà a la nostra partida de Minecraft!!!
2. Enviar missatges al joc
Per anar augmentant poc a poc la dificultat, la següent passa que podem donar és enviar missatges al chat del joc. Simplement afegeix la següent línia al codi anterior:
mc.postToChat("Hello world")
El missatge entre cometes pot ser qualsevol. Desa els canvis a un fitxer que s'anomeni "missatge.py" dins d'una carpeta creada per aquest tema a on desarem tots els nostres arxius.
Una vegada que hem posat nom a l'arxiu, per anar desant els canvis, simplement haurem de pitjar Ctrl + S.
Per executar-ho, simplement pitja la tecla F5 i observa el que passa a la pantalla.
NOTA: Fixa't que el codi que estam escrivint no és difícil d'entendre: A la connexió amb el joc "mc" utilitza la funció "postToChat" per imprimir a la pantalla el missatge entre comentes. Això és una característica de Python... sempre intentarà ser fàcil de llegir.
3. Teletransporta't
Anem a intentar fer de capità Kirk o d'Spock teletransportant-mos d'una banda a altra del mapa!! Però, per fer-ho, abans hem d'averiguar a on estam (quines són les nostres coordenades?).
Crea un arxiu nou i escriu la connexió amb el joc tal com hem vist anteriorment.
Afegeix la següent línia al teu codi:
x, y, z = mc.player.getPos()
De nou, aquesta instrucció torna a ser fàcilment llegible. Hem creat 3 variables (x, y, i z) i estam enmagatzemant la posició que hem trobat (getPos --> get position) del nostre jugador (player) dins el joc amb el que estam connectats (mc). Fàcil no??
Ara només ens falta dir fins on volem anar. Inclou la següent línia:
mc.player.setPos(x, y+100, z)
Hem de tenir present quines són les direccions al mapa. La x i la z són les direccions horitzontals i la y és la direcció vertical.
Tenint en compte això, el codi anterior torna a ser fàcil de llegir. Hem fet servir la funció setPos (set position) per moure el jugador 100 unitats en la direcció y (altura).
Pots probar de canviar la posició en les altres direccions. Pensa en que els desplaçaments poden ser positius o negatius.
4. Col·loca un bloc
El Minecraft és un joc de creativitat al que hem d'anar col·locant blocs per construir diferents coses. Anem a veure com es duu a terme aquesta funció tan important.
Crea un arxiu nou i escriu la connexió amb el joc tal com hem vist anteriorment.
Afegeix el següent codi al teu arxiu:
x, y, z = mc.player.getPos()
mc.setBlock(x+1, y, z, 1)
Fixa't que ja saps què significa la primera línia i que la segona segur que l'entens a un 90%. Efectivament, aquesta segona línia utilitza la connexió amb el joc (mc) per col·locar un bloc (setBlock) just al costat teu (a 1 unitat de distància en direcció x). El darrer paràmetre té que veure amb el tipus de bloc. De fet, el nombre 1 representa un bloc de pedra.
Per tal d'experimentar amb els tipus de blocs, aquí tens un codi que evita fer referència als materials pel seu número, cosa que pot ser molt confusa, i defineix una sèrie de variables molt més reconeixibles per fer-les servir a la construcció (Guia completa de blocs). Prova diferenst tipus:
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
aire = 0
roca = 1
hierba = 2
tierra = 3
lava = 10
madera = 17 # Paràmetre extra = tipus de fusta (integer)
hierbaalta = 31 # Paràmetre extra = tipus d'herba (integer)
lana = 35 # Paràmetre extra = color (integer)
flor = 38
tnt = 46 # Paràmetre extra = apagat (0) / activat (1)
antorcha = 50 # Paràmetre extra = orientació (integer)
x, y, z = mc.player.getPos()
mc.setBlock(x,y,z+1,lava)
Fixa't que alguns blocs tenen un paràmetre extra que ve determinat també per un altre nombre sencer. Això permet seleccionar diferents tipus de fusta o pedra, orientacions (al cas en els que el bloc no és totalment cúbic) i més propietats... Prova per exemple:
mc.setBlock(x,y,z+1,tnt,1)
Dóna amb l'espasa damunt del bloc i... jo no em quedaria aprop.
5. Bucles. Sentències de control
Evidentment, haver de programar per col·locar un bloc no té massa gràcia... no té sentit fer més feina. Però, què passa si podem col·locar molts d'una tirada?
Els bucles són estructures de control que existeixen a tot els llenguatges de programació i que permeten repetir una tasca un nombre indefinit de vegades. Anem a posar un exemple per entendre-ho:
for i in range(1, 10):
mc.setBlock(x,y,z+i,tnt,1)
Pensa en el que pot fer aquest bucle. Veus ara l'avantatge de programar? S'automatitzen tasques!!
NOTA 1: fixa't en que "range(1 , 10)" farà que i recorri els nombres des de 1 fins a 9. El darrere nombre del parèntesi no està incòs.
NOTA 2: fixa't en que tot el contingut del bucle "for" està "indentat" (i.e.: està tirat cap a la dreta una distància d'un tabulador). Aquesta "indentació" és clau a Python, ja que és el fet que determina quina part del codi estarà de dins del bucle i, per tant, es repetirà el nombre de vegades que fixem amb el range.
Exercicis amb bucles:
Utilitza el bucle "for" per crear una columna de 20 blocs d'altura. Desa l'arxiu amb el nom columna.py.
Crea una fila de blocs de flors (un jardí) de 10 blocs de llarg. Desa l'arxiu amb el nom jardi.py.
Anem a fer la primera construcció. Utilita els "for" per crear una torre de 10 blocs d'alt i 4 x 4 d'ample. Pensa que ha d'estar buida per poder entrar. Desa l'arxiu amb el nom torre.py.
Pensa com pots fer per crear amb únic "for" una escala de fusta de 10 graons. Desa l'arxiu amb el nom escala.py.
Imagina que vols fer el terra d'una construcció de roca que ha de fer 10 x 5 blocs de llarg (x) i ample (z). Combina dos bubles "for" per crear aquesta superfície. Desa l'arxiu amb el nom terra.py.
Combina 3 "for" per crear un cub de tnt de 5 x 5 x 5 amb el paràmetre extra activat. Fes que peti!! Desa l'arxiu amb el nom quepeti.py.
Fes servir el que saps de bucles per crear la teva primera casa programada. Desa l'arxiu amb el nom firsthome.py.
Copia el codi de tots els exercicis anteriors a un document de text i envia-ho.