Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
module coin
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. dollar.png
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
