Tutoriel PyGame

Comment créer des jeux avec Python et PyGame : introduction aux objets

Dans ce tutoriel, nous allons voir comment créer des jeux vidéo avec Python et PyGame 🙂

Qu’est ce que Pygame et comment l’installer ?

Pygame est un ensemble de modules gratuits et open source conçus pour créer des jeux vidéo.

Nous détaillons ci-après les étapes que vous devez suivre pour installer PyGame dans votre ordinateur. Avant tout, vérifiez que Python est installé dans votre PC.

Pour vérifier, tapez l’invite de commande en tapant cmd dans la barre de programme en bas à gauche. 

Après cela, tapez python3 -m pip install -U pygame –user

 Attendez ensuite que les fichiers nécessaires soient téléchargés sur Internet

 Vérifiez enfin que tout s’est bien passé en ouvrant le IDLE et en tapant :

>>> importer pygame

En cas d’un message d’erreur, il y a plusieurs causes qui peuvent freiner l’installation des modules.

Sinon, il se peut aussi que pip soit obsolète, vous devez donc le faire.

Tapez ensuite pour Windows :

python -m pip installer -U pip

La programmation orientée objet et les jeux

Avant de passer à l’action, nous vous expliquons plusieurs termes que vous allez trouver dans l’univers de PyGame et la programmation en général. Avant de pouvoir écrire quoi que ce soit avec PyGame, vous avez besoin d’une petite introduction théorique sur la programmation orientée objet.

Le concept de type de données et l’univers des jeux / PyGame

 La programmation orientée objet est une autre façon d’aborder un problème de calcul qui réduit le nombre d’instructions dans le programme. Il est également indiqué par l’acronyme OO (Object Oriented)

Dans un langage de programmation, le type d’une donnée détermine quelles sont ses valeurs possibles et quelles opérations peuvent être effectuées dessus. Par exemple, une variable de type int contient un entier et sur celle-ci vous pouvez faire les opérations arithmétiques usuelles, une variable de type str (string) contient une séquence de caractères et sur elle vous pouvez faire les opérations d’addition entre chaînes et de multiplication par un entier, et ainsi de suite. Avec le développement des langages de programmation, la notion de type de données a évolué vers celle, plus complexe, d’objet, qui permet de mieux faire face à des situations plus exigeantes.

Supposons que nous développons un jeu et que nous devions programmer un “ennemi” que nous devons combattre. On se demande : quelles données vais-je devoir mémoriser (lire et écrire) pour déterminer son comportement ?

Pendant ce temps, l’ennemi aura une image que nous devons dessiner sur l’écran dans une position donnée (coordonnées), puis l’ennemi aura une valeur de santé. A chaque fois que nous le frapperons, sa santé diminue, quand il atteint zéro nous devons le faire mourir…. Si l’ennemi est un guerrier, il aura des armes ou une armure, s’il est un sorcier, une quantité de mana et de sorts qu’il pourra effectuer… Pour définir son comportement, il faudra donc plusieurs variables de types différents.

Les langages de programmation orientés objet

Mais il y a encore un problème : dans le jeu on pourrait avoir plusieurs ennemis en même temps, et chacun d’eux aura son image, sa position, sa santé, son arme… Les ennemis apparaîtront et disparaîtront continuellement, et chaque temps, nous devrions créer des variables pour l’image, la position, la santé, etc. Nous serions rapidement submergés par un grand nombre de variables difficiles à gérer. Il serait beaucoup plus pratique de “regrouper” toutes les données d’un ennemi en une seule grande variable qui contient de nombreuses sous-variables comme son image, sa position,  , son arme, son état et force…

Pour surmonter ces problèmes, les langages de programmation les plus modernes ont développé le concept d’objet, qui désigne un type de données complexes contenant de nombreuses autres données en leur sein. Ces langages nous permettent de concevoir un objet, en définissant un schéma qui indique quelles données il contient et quelles opérations peuvent être effectuées dessus, et de créer des variables dans nos programmes qui ont l’objet comme type, en accédant avec une syntaxe très simple aux données qu’ils contiennent. Ce type de programmation est appelé  programmation orientée objet et les langages qui le supportent sont souvent appelés « langages orientés objet 

Heureusement, python est un langage de programmation orienté objet 🙂

Utiliser les objets : Les attributs et les méthodes

Maintenant, nous comprenons qu’un objet en programmation contient plusieurs fonctions que l’on peut appeler pendant que nous programmons.

Pour utiliser un objet, vous devez d’abord créer une variable qui a l’objet lui-même comme type (on l’appelle une instance de l’objet). Les données qui y sont intégrées sont appelées attributs : chaque attribut a un nom et pour y accéder, nous utilisons la syntaxe avec la période que nous connaissons déjà.

variable_name.attribute_name

 Un objet type Ennemi ( Ou Ennemi )

Ainsi, par exemple, dans notre jeu, nous pourrions définir un objet de type Enemy, qui a des attributs tels que la position, la santé, etc. à ce stade, il est possible de créer des variables Enemy, dont chacune rassemble tous les attributs d’un ennemi : si nem est une telle variable, on pourrait écrire quelque chose

comme ceci :

 if nem.position == (0, 0): # on lit l'attribut position pour savoir si on touche # the enemy 
     nem.salute = nem.salute - 10 # hit! we read and write the health attribute to remove 
   # 10 points if nem.salute <= 0: . . . # the enemy dies

 Les merveilles de la programmation orientée objet ne s’arrêtent pas là : en plus des attributs, chaque objet peut également avoir des fonctions caractéristiques qui lui sont associées. Par exemple, supposons que dans notre jeu, il existe différentes classes de personnages : un guerrier peut nous attaquer avec une arme, tandis qu’un sorcier peut lancer un sort ou préparer une potion (mais un guerrier ne peut pas lancer de sorts et un sorcier ne peut pas utiliser une “arme ). Ainsi, un objet pourra faire des choses que lui seul peut faire, c’est-à-dire avoir des fonctions qui lui sont associées : on les appelle, en programmation orientée objet, des méthodes, et on peut aussi les appeler en utilisant la syntaxe avec un point.

variable_name.method_name (parameters)

Par exemple, supposons que notre nem soit un sorcier ; nous pourrions écrire quelque chose comme ceci

if nem.mana> = 100: # check if mana attribute is sufficient …
 nem.spear_spear ("Summon goblin") # and call the magic_spear () method 
else: # otherwise ... 
   nem.drink_pot ("Elixir mana") # recover mana
 

Les listes Python et pygame

Vous vous rendez peut-être compte que vous avez également déjà vu quelques exemples de cette syntaxe dans la programmation Python de base. Les listes Python sont en fait des objets, et de nombreuses opérations sur celles-ci sont effectuées en appelant des méthodes : par exemple, si l est une variable de type liste, l.append (a) ajoute un élément dans la file d’attente, l.sort () réorganise les éléments par ordre alphabétique ou croissant, etc.

A noter qu’en Python le point est utilisé de deux manières différentes : il peut séparer le nom d’un module de celui de sa fonction (par exemple pygame.init() ou le nom d’une variable de celui de son attribut ou de sa méthode. Nous utiliserons tout le temps et il faut être prudent et ne pas s’embrouiller si on veut bien comprendre le code qu’on écrit

Les objets dans le langage PyGame

Comme nous l’avons expliqué, Pygame est une bibliothèque qui contient des objets “prêts à l’emploi” adaptés à la création de graphiques, d’animations et de sons, et nous nous limiterons à apprendre à les utiliser pour nos besoins. 

Voici juste quelques conseils indispensables pour comprendre le code que nous écrirons plus tard :

  • Dans les langages OOP, chaque objet a une fonction particulière, appelée constructeur, conçue pour créer une instance de l’objet. Le constructeur a le même nom que l’objet (suivi de crochets et de paramètres éventuels), et, s’il est contenu dans un certain sous-module pygame, nous devrons l’appeler en préfixant pygame et le nom du sous-module comme nous l’avons déjà dit . Par exemple, pour créer une variable clk de type Clock (un objet pygame qui a les fonctions d’une horloge), nous écrirons clk = pygame.time.Clock(). Cependant, les constructeurs ne sont pas le seul moyen de créer des objets, car dans pygame, ce sont aussi d’autres fonctions qui renvoient des objets.
  • Les noms d’objets dans Pygame sont en majuscules (par exemple Rect, Clock, Sprite) : ce n’est pas obligatoire en Python, mais c’est une convention largement utilisée. C’est une erreur très courante chez les débutants de confondre le nom de l’objet avec le nom de la variable : les deux noms doivent être différents (dans l’exemple précédent Clock est le nom de l’objet (et donc aussi du constructeur) et clk le nom de la variable).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *