====== module coin ======
{{ :nsi:tds:pygame:plateforme:dollar.png?nolink&100|}}
Une pièce (coin) pourrait avoir une valeur variable ; il pourrait y avoir divers récompenses (comme les fruits qui passaient dans Pac-Man et qu'il fallait attraper).
On suppose donc que la récompense est identifiée par son type. Pour l'instant, il n'y a qu'un seul type de récompense, on pourra améliorer plus tard.
Ce type de pièce est représenté par l'image ci-contre que vous pouvez télécharger. {{ :nsi:tds:pygame:plateforme:dollar.png?linkonly|}}
Il faut le placer dans le même répertoire que les autres.
# coin.py
import pygame
class Coin(pygame.sprite.Sprite):
TYPES = {
"dollar":{
"filename": 'dollar.png',
"valeur":10,
"size":(20, 20)
}
}
def __init__(self, x, y, coin_type):
"""
x, y: position du centre de la pièce
coin_type: type de pièce
Cette fonction crée une récompense
"""
super().__init__()
assert coin_type in Coin.TYPES
attributes = Coin.TYPES[coin_type]
image = pygame.image.load(attributes["filename"])
image = image.convert_alpha()
self.image = pygame.transform.scale(image, attributes["size"])
self.valeur = Coin.TYPES[coin_type]["valeur"]
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.centery = y
On a défini une constante ''TYPES'' que l'on peut atteindre avec ''Coin.TYPES''.
Il s'agit d'une constante qui est attachée à la classe elle-même. Cette constante permet de lister les différents types de récompenses que l'on pourrait désirer. Ici on n'a seulement ''%%"dollar"%%''. On voit qu'on n'aurait aucune peine à en définir d'autres.
La production de l'image est un peu compliquée : il faut récupérer le fichier image avec ''pygame.image.load''. ''%%convert_alpha%%'' permet de tenir compte de la transparence de certains éléments de l'image. ''pygame.transform.scale'' permet de la redimensionner à la taille désirée.
Le choix fait ici est critiquable : à chaque création de ''Coin'', il faut accéder au système de fichier pour lire le fichier image. On verra plus tard qu'il serait plus avantageux de ne charger qu'une seule fois les différentes images nécessaires.
Comme pour les rectangles, il est bienvenu de prévoir une fonction pour créer plusieurs coins.
# coin.py
import pygame
from abc import abstractmethod
class Coin(pygame.sprite.Sprite):
...
@abstractmethod
def make_coins(liste):
"""
liste: tableau de (x, y, coin_type) donnant les caractéristiques des coins à créer
renvoie un groupe contenant les coins
"""
groupe = pygame.sprite.Group()
for x, y, coin_type in liste:
c = Coin(x, y, coin_type)
groupe.add(c)
return groupe