Ceci est une ancienne révision du document !
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
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
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
Table des matières
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
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.
