Introducció a les funcions i els esdeveniments
En Blocs, les funcions
servien com una eina poderosa per a fer que els jocs complexos foren més fàcils de llegir, així com per a reduir la redundància dins dels jocs.
Concepte: Funcions en Python
Les funcions
en Python són un poc més complexes per a començar que les funcions
en Blocs. No obstant això, les funcions en Python s’utilitzen molt més comunament que en blocs, així que no tardaràs molt a acostumar-te a la nova sintaxi.
def nom_funcio():
# contingut de la funció
nom_funcio()
En aquest fragment de codi, fixa’t en els següents elements de la funció:
def
: indica l’inici d’una nova funcióname
: el nom de la funció que estàs creant- Codi indentat: les instruccions indentades (tabulades) són el contingut de la funció (equivalent als blocs dins de la funció); en aquest cas, la funció no fa res, ja que només hi ha un comentari dins d’ella.
name()
: crida la funcióname
, executant el codi que se li assigna.
Exemple #1: Di Hola
-
Revisa el codi següent:
def digues_hola(): game.splash("hola")
- Converteix el codi a Blocs
- Identifica quins blocs provenen de quines parts del codi
Tasca #1: Fes un Registre
- Crea una funció anomenada
crea_registre
- En la funció, fes un
game.splash
amb la frase “CREANT REGISTRES” - Després del
game.splash
, utilitzaprint
per a registrar la frase “Estic aquí!” a la consola - Crida la funció dues vegades.
Concepte: Funcions com a bucles
En blocs podiem utilitzar el bloc al actualitzar
per a repetir un bloc de codi moltes vegades. En Python, podem fer el mateix definint una funció i utilitzant després game.on_update_interval
per a cridar la funció a intervals regulars. Haurem de definir la funció abans de cridar-la i especificar l’interval en mil·lisegons.
def imprimeix_hola_cada_segon():
print("Hola!")
game.on_update_interval(1000, imprimeix_hola_cada_segon)
En aquest exemple, imprimeix_hola_cada_segon
s’executarà cada segon, mostrant “Hola!” a la consola.
Concepte: Funcions com a esdeveniments
Recordem que els esdeveniments són accions que es produeixen en el joc, com ara prémer un botó o solapar dos sprites.
En Python, podem utilitzar funcions per a respondre a esdeveniments. Això és similar a com ho fèiem en Blocs amb els blocs quan A premut
i quan A alliberat
.
def quan_a_premut():
print("A premut!")
controller.A.on_event(ControllerButtonEvent.pressed, quan_a_premut)
En aquest exemple, quan_a_premut
s’executarà cada vegada que el botó A es premi.
Un altre event important és on_overlap
. Aquest esdeveniment es produeix quan dos sprites es solapen.
Per a utilitzar aquest esdeveniment, primer hem de definir una funció que es cridarà quan es produeixi l’esdeveniment. A continuació, cridem sprites.on_overlap
amb els dos SpriteKinds (tipus de sprite) que volem que es solapen i la funció que volem que s’executi.
def quan_es_solapen(sprite, altre_sprite):
game.alert("Col·lisió!!")
sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, quan_es_solapen)
En aquest exemple, quan_es_solapen
s’executarà cada vegada que un sprite de tipus player
es solapi amb un sprite de tipus enemy
.
Una vegada s’ha detectat la solapació, podem fer qualsevol cosa amb els sprites que vulguem. Per exemple, podem fer que un dels sprites desaparegui (amb sprite.destroy()
), que tots dos desapareguin o que acabi el joc (amb game.game_over(True)
o game.game_over(False)
, depenent de si el jugador ha guanyat o perdut).
def quan_es_solapen(sprite, altre_sprite):
sprite.destroy()
print("Els sprites s'han solapat!")
Exemple #2: Solapar
-
Revisa el codi següent:
def quan_es_solapen(sprite, altre_sprite): sprite.destroy() altre_sprite.destroy() game.game_over(False)
- Identifica què passarà quan els sprites es solapen
- Executa el codi i comprova si la teva predicció era correcta
Tasca #2: Repetir i Solapar
- Crea un nou projecte a Arcade
- Crea un jugador que es mogui amb les tecles de direcció
- Fes que cada segon aparegui un nou enemic a la part superior de la pantalla i baixi cap avall
- Fes que quan el jugador se solapi amb un enemic s’acabi el joc.
Avaluació
Crea un document i:
- Respon a les següents preguntes:
- Per què les funcions són importants en la programació de jocs?
- Quina és la diferència entre una funció i un esdeveniment?
- Repte: Què passarà si crides una funció que no has definit?
- Resol els següents exercicis curts i enganxa el codi al document:
- Crea una funció que imprimeixi “Hola!” a la consola. Crida la funció dues vegades.
- Crea una funció que crei un nou enemic a la part superior de la pantalla i el faci baixar cap avall. Fes que la funció es cridi cada vegada que es premi el botó A.
Puja el document a l’aula virtual (tasca 2.2.6).