Outils pour utilisateurs

Outils du site


nsi:tds:pygame:pacman:module_data

data.py

Le script contiendra les données utiles comme le réglage de la taille d'une case, ainsi que le chargement des images.

J'utiliserai les images contenus dans cette archive : archive. Il vous faudra la décompresser dans un sous-repertoire images de votre projet.

Voici un exemple de script :

#data.py

# data.py

import pygame

CELL_SIZE = 30
FOLDER = './images/'
EXT = '.png'

IMAGES = {
    "pacman1":    25,
    "pacman2":    25,
    "pacman3":    25,
    "pink_down":  25,
    "pink_up":    25,
    "pink_right": 25,
    "pink_left":  25,
    "red_down":   25,
    "red_up":     25,
    "red_right":  25,
    "red_left":   25,
    "afraid":     25,
    "pastille":   5,
    "pacgum":     15
}

loaded = {}

def load(name:str):
    """
    accède à l'image d'identifiant name.
    si l'image n'est pas déjà dans loaded, l'ajoute.
    renvoie l'image.
    """
    assert name in IMAGES
    if name in loaded:
        return loaded[name]
    image = pygame.image.load(FOLDER + name + EXT)
    image = image.convert_alpha() # gestion transparence
    size = IMAGES[name]
    w, h = image.get_size()
    # on veut que la dimension maximale de w soit calée sur size
    scale_factor = size / max(w, h)
    new_size = int(w * scale_factor), int(h * scale_factor)
    image = pygame.transform.scale(image, new_size)
    loaded[name] = image
    return image

Le dictionnaire IMAGES indiquent la liste des images pouvant être chargées (clés du dictionnaire) et sa dimension qui sera notée size dans la fonction. Les images ne sont pas forcément carrées, alors size indique la dimension maximale.

Par exemple si une image fait 50×20 et que size est 25, alors c'est la dimension 50 qui est réduite à 25, ce qui implique un facteur d'échelle de 0,5 qui sera également appliqué à l'autre dimension. Ainsi l'image sera réduite à 25×10.

La fonction de chargement entretient un cache, c'est à dire une mémoire qui permet d'éviter de recharger ce qui a déjà été chargé. Si on demande l'image pacman1 par exemple, la première fois elle est chargée avec pygame.load, ce qui nécessite un accès au système de fichier. L'image est adaptée : gestion de la transparence, taille. Le résultat est conservé de sorte que lors d'un appel ultérieur, on pourra fournir directement l'image mémorisée.

nsi/tds/pygame/pacman/module_data.txt · Dernière modification : de goupillwiki