Introducció als jocs amb pygame i pgu

Biblioteques

  • pygame: imatges, rellotge, sprites, esdeveniments, fonts, so…

  • pgu: etapes, gui, tiles…

Animació

  • 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

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:

        1. Canvia el nombre de fotogrames per segon.

        2. Canvia les mides de la pantalla.

        3. 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