Introducció als jocs amb pygame i pgu¶
Biblioteques¶
Animació¶
Fotograma: imatge. La classe
pygame.Surface.Estructura d’una animació:
Inicialitzar els elements de l’animació.
Visualitzar l’estat inicial.
Per cada fotograma:
Calcular el nou estat dels elements després de 1/n segons on n és el nombre de fotogrames per segon.
Visualitzar l’estat dels elements a la pantalla.
Sprites¶
Sprites: elements del joc que canvien de posició o d’aspecte.
El mòdul
pygame.sprite.La classe
pygame.Surface.La classe
pygame.Rect.
Exemple¶
joc_1.py,conf_1.py,pilotes_1.py,pilota.png.La classe Jugant i els mètodes init, paint, loop i update.
El mòdul conf.
Exercicis:
Canvia el nombre de fotogrames per segon.
Canvia les mides de la pantalla.
Afegeix més pilotes.
Exercicis¶
Videojoc¶
Videojoc: animació + interacció.
Esdeveniments: tecla premuda, botó deixar anar, moviment del ratolí…
Estructura d’un joc:
Inicialitzar els elements del joc.
Per cada fotograma:
Tractar els esdeveniments produïts en els darrers 1/n segons.
Calcular el nou estat dels elements després de 1/n segons.
Visualitzar l’estat dels elements a la pantalla.
Exemples¶
Blocs bàsics d’un programa amb pygame i PGU¶
pygame: Sprites¶
Pygame, a més de tot l’entorn gràfic, sonor, etc. aporta classes per a definir sprites i també grups de sprites.
Típicament, un sprite del nostre joc seguirà aquesta estructura:
class <Nom_de_l_sprite>(pygame.sprite.Sprite):
def __init__(self, ...):
super().__init__()
self.image = ... # ha de ser una Surface
self.rect = ... # ha de ser un Rect
def update(self):
# Actualitza l'sprite per al fotograma actual
La visualització d’un sprite és automàtica: es pinta la l’atribut image a la posició que indica l’atribut rect de la finestra gràfica.
PGU: Etapes del joc¶
PGU (Pygame Utilities) aporta la gestió de les etapes (estats) del joc i realitza el bucle principal del joc. També inclou elements típics d’una interfície gràfica d’usuari (widgets).
Típicament, un joc amb PGU tindrà aquesta estructura:
class Joc(engine.Game):
# Només una sola classe
# Inicialitza el joc i permet canviar entre les etapes
class <Nom_de_l_etapa>(engine.State):
# Una per cada etapa del joc
def init(self):
# crea tots els elements del joc: sprites, grups de sprites, ...
def event(self, event):
# tracta els events rebuts durant un fotograma
def loop(self):
# actualitza els elements del joc per al fotograma actual
def update(sel, screen):
# pinta tots els elements del joc a la finestra (screen),
# és a dir, visualita un fotograma
Pygame: mòduls, classes, mètodes i funcions més usades¶
Mòdul
pygame. Defineix les funcions:pygame.init(): inicialitza Pygame.pygame.quit(): finalitza Pygame.
Mòdul
pygame.display: gestiona la pantalla. Defineix les funcions:pygame.display.set_mode(): inicialitza la pantalla.pygame.display.flip(): visualitza els darrers canvis a la pantalla.pygame.display.get_surface(): retorna la imatge (pygame.Surface) associada a la pantalla.
Mòdul
pygame.event: gestiona la cua d’esdeveniments. Defineix la funció:Funció
pygame.event.get(): retorna la llista d’esdeveniments produïts des del darrer get.
Mòdul
pygame.image: entrada i sortida d’imatges. Defineix la funció:Funció
pygame.image.load(): retorna la imatge (pygame.Surface) carregada des d’un fitxer.
Mòdul
pygame.locals: agrupa constants de diferents mòduls.Classe
pygame.Rect: rectangle. Defineix el mètode:pygame.Rect.move_ip(): canvia el rectangle aplicant-li un desplaçament.
I els atributs:
pygame.Rect.x,pygame.Rect.ypygame.Rect.top,pygame.Rect.left,pygame.Rect.bottom,pygame.Rect.rightpygame.Rect.topleft,pygame.Rect.bottomleft,pygame.Rect.topright,pygame.Rect.bottomrightpygame.Rect.midtop,pygame.Rect.midleft,pygame.Rect.midbottom,pygame.Rect.midrightpygame.Rect.center,pygame.Rect.centerx,pygame.Rect.centerypygame.Rect.size,pygame.Rect.width,pygame.Rect.heightpygame.Rect.w,pygame.Rect.hClasse
pygame.sprite.Group: conjunt d’sprites. A més de les operacions habituals dels conjunts, defineix els mètodes:Classe
pygame.sprite.Sprite: classe pare per als sprites (elements que es mouen o canvien d’aspecte). Defineix el mètode:pygame.sprite.Sprite.update(): actualitza l’estat de l’sprite. Es crida un cop per fotograma.
I els atributs:
pygame.sprite.Sprite.image: imatge (pygame.Surface) associada a l’sprite.pygame.sprite.Sprite.rect: rectangle (pygame.Rect) amb la posició de l’sprite dins d’una altra imatge, normalment la pantalla.
Classe
pygame.Surface: imatges, matrius de píxels. Defineix els mètodes:pygame.Surface.convert(): converteix la imatge al format més adient per la pantalla.pygame.Surface.convert_alpha(): converteix la imatge amb transparència al format més adient per la pantalla.pygame.Surface.fill(): omple de color una imatge sencera o un rectangle de la imatge.pygame.Surface.blit(): enganxa una imatge al damunt.pygame.Surface.get_rect(): retorna el rectangle associat a la imatge. La posició del rectangle és la (0, 0) i la mida és l’amplada i l’alçada de la imatge.
Classe
pygame.time.Clock: rellotge. Defineix el mètode:pygame.time.Clock.tick(): retorna els milisegons que han passat des de la darrera crida a aquest mateix mètode. L’argument opcional indica el nombre màxim de fotogrames per segon. Alenteix el càlcul dels fotogrames si cal.