====== 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