====== Le module rectangle ====== Il consiste seulement en la création d'un rectangle de couleur. On précise ses dimensions, sa position et sa couleur. ===== Module de base ===== # rectangle.py import pygame class Rectangle(pygame.sprite.Sprite): def __init__(self, x, y, width, height, color): """ x, y: position du coin supérieur gauche width, height: dimensions color: couleur selon le format (r, g, b) Cette fonction crée un rectangle """ super().__init__() self.image = pygame.Surface((width, height)) self.image.fill(color) self.rect = self.image.get_rect() self.rect.left = x self.rect.top = y ===== Génération de listes ===== Dans un deuxième temps, on réalise qu'on aimerait pouvoir générer des plates-formes en grande quantité. On disposerait alors d'une liste contenant toutes les informations utiles : [ (15, 25, 100, 10), (50, 60, 150, 20), ... ] Cette liste est composée d'éléments ''(x, y, width, height)''. On pourra donner aussi la couleur. Le mot clé **abstractmethod** sera expliqué ensuite. # rectangle.py from abc import abstractmethod import pygame class Rectangle(pygame.sprite.Sprite): ... @abstractmethod def make_plates_formes(liste, color): """ liste: tableau de (x, y, width, height) donnant les caractéristiques des plates-formes à créer color: couleur au format (r, g, b) renvoie un groupe contenant les plates-formes """ groupe = pygame.sprite.Group() for x, y, width, height in liste: pf = Rectangle(x, y, width, height, color) groupe.add(pf) return groupe Quel est le sens de ''%%@abstractmethod%%'' ? Une classe est un modèle qui permet de créer des objets, des objets qui respectent le modèle. Ainsi on pourrait créer un objet ''Carte'' qui représenterait une carte à jouer, et à la création on donnerait les attributs de la carte. Par exemple //Valet//, //Carreau//. La classe définit également des méthodes qui sont des fonctions agissant sur un objet. Par exemple, l'objet ''Carte'' pourrait avoir une méthode ''valeur'' donnant le nombre de point d'une carte dans un certain jeu. Les méthodes concernent toujours la carte en question. Par exemple : >>> c1 = Carte("Valet", "Carreau") >>> c2 = Carte("9", "Pique") >>> c3 = Carte("As", "Pique") >>> c1.valeur() 11 >>> c2.valeur() 9 >>> c3.valeur() 14 Ici, c'est un jeu de bataille. Le valet est au-dessus du 10 et l'as au-dessus du roi. Quand on écrit ''c1.valeur()'', la méthode ''valeur'' s'applique à la carte ''c1''. C'est pour cette raison que le premier argument des méthodes est ''self'', c'est à dire la carte elle-même. Donc la méthode doit s'appliquer à un objet déjà créé (on dit une instanciation de la classe). On peut vouloir ranger dans la classe des fonctions qui concernent le modèle lui-même mais un objet en particulier. C'est le cas ici. On parle alors de **méthode abstraite**, abstraite car elle ne concerne pas un objet.