diff --git a/source/pygame/exemple/LecteurAudio.PNG b/source/pygame/exemple/LecteurAudio.PNG new file mode 100644 index 00000000..c0e5e2c1 Binary files /dev/null and b/source/pygame/exemple/LecteurAudio.PNG differ diff --git a/source/pygame/exemple/loadBg.py b/source/pygame/exemple/loadBg.py index 070a777c..76048e7b 100644 --- a/source/pygame/exemple/loadBg.py +++ b/source/pygame/exemple/loadBg.py @@ -1,3 +1,4 @@ + """Exemple d'affichage d'une image de fond.""" import pygame from pygame.locals import QUIT, RESIZABLE diff --git a/source/pygame/exemple/mixerEx.py b/source/pygame/exemple/mixerEx.py index 3417af28..ef44d187 100644 --- a/source/pygame/exemple/mixerEx.py +++ b/source/pygame/exemple/mixerEx.py @@ -1,29 +1,57 @@ -"""Exemple d'utilisation des modules pygame.event et pygame.mixer.""" -import pygame -from pygame.locals import K_RETURN, K_SPACE, KEYDOWN, KEYUP, QUIT, RESIZABLE +"""Exemple d'utilisation: lecteur audio.""" +import pygame +from pygame.locals import QUIT pygame.init() -fenetre = pygame.display.set_mode((200, 200), RESIZABLE) +fenetre = pygame.display.set_mode((400, 300)) son = pygame.mixer.Sound("./exemple/Tinquen.wav") -continuer = True -joue = False +# definition de couleurs +red = (200, 0, 0) +green = (0, 200, 0) +bright_red = (255, 0, 0) +bright_green = (0, 255, 0) + +# definition de texte +myFont = pygame.font.SysFont("monospace", 20) + +continuer = 1 +joue = 0 while continuer: for event in pygame.event.get(): if event.type == QUIT: - continuer = False - elif event.type == KEYDOWN: - if event.key == K_SPACE: - if not joue: - son.play() - joue = True - else: - pygame.mixer.unpause() - elif event.key == K_RETURN: + continuer = 0 + + # on dessine 2 rectangles, qui nous serviront de boutons + pygame.draw.rect(fenetre, green, (50, 100, 100, 50)) + pygame.draw.rect(fenetre, red, (250, 100, 100, 50)) + + # recuperation de la posision de la souris + mouse = pygame.mouse.get_pos() + + # si la souris est dans les limites d'un rectangle, il s'illumine. + if 50 + 100 > mouse[0] > 50 and 100 + 50 > mouse[1] > 100: + # si on appuie, le son se lance + if event.type == pygame.MOUSEBUTTONDOWN: + son.play() + pygame.draw.rect(fenetre, bright_green, (50, 100, 100, 50)) + else: + pygame.draw.rect(fenetre, green, (50, 100, 100, 50)) + + if 250 + 100 > mouse[0] > 250 and 100 + 50 > mouse[1] > 100: + if event.type == pygame.MOUSEBUTTONDOWN: son.stop() - joue = False - elif event.type == KEYUP: - if event.key == K_SPACE: - pygame.mixer.pause() + pygame.draw.rect(fenetre, bright_red, (250, 100, 100, 50)) + else: + pygame.draw.rect(fenetre, red, (250, 100, 100, 50)) + + # affichage du texte dans le bouton improvisé. + play = myFont.render("Play!", 1, (0, 0, 0)) + fenetre.blit(play, (75, 100)) + + stop = myFont.render("Stop!", 1, (0, 0, 0)) + fenetre.blit(stop, (275, 100)) + + pygame.display.update() pygame.quit() diff --git a/source/pygame/exemple/simpleWindow.py b/source/pygame/exemple/simpleWindow.py index 1efa95e8..ab1267cf 100644 --- a/source/pygame/exemple/simpleWindow.py +++ b/source/pygame/exemple/simpleWindow.py @@ -1,3 +1,4 @@ + """Exemple d'affichage d'une fenêtre simple.""" import pygame from pygame.locals import QUIT diff --git a/source/pygame/index.rst b/source/pygame/index.rst index 4c743fd3..3c9e2136 100644 --- a/source/pygame/index.rst +++ b/source/pygame/index.rst @@ -1,8 +1,5 @@ -.. _pygame-tutorial: - -========== -``pygame`` -========== +Pygame +====== .. image:: logo_pygame.png :align: right @@ -11,7 +8,7 @@ Par Dany Chea [#dc]_ Introduction -============ +------------ Pygame est un module qui offre des outils permettant de créer des jeux. Le module est lui-même subdivisé en plusieurs sous-modules, ce qui permet de ne pas appeler des modules qui seraient inutiles. @@ -22,7 +19,7 @@ Liste des sous-modules de Pygame: +------------------+------------------+-------------------+-------------------+ | `pygame.camera` | `pygame.cdrom` | `pygame.cursors` | `pygame.display` | +------------------+------------------+-------------------+-------------------+ -| `pygame.draw` | `pygame.event` | `pygame.examples` | `pygame.font` | +| `pygame.draw` | `pygame.event` |`pygame.examples` | `pygame.font` | +------------------+------------------+-------------------+-------------------+ | `pygame.freetype`| `pygame.gfxdraw` | `pygame.image` | `pygame.joystick` | +------------------+------------------+-------------------+-------------------+ @@ -35,9 +32,7 @@ Liste des sous-modules de Pygame: | `pygame.test` | `pygame.time` | `pygame.transform`| `pygame.version` | +------------------+------------------+-------------------+-------------------+ -.. À quoi ça sert? - -Indépendemment du jeu que l’on veut créer, sa réalisation passe nécessairement par cinq étapes: +Indépendemment du jeu que l’on veut créer, sa réalisation passe nécessairement par 5 étapes: #. Initialisation de pygame #. Appel des modules nécessaires @@ -45,79 +40,71 @@ Indépendemment du jeu que l’on veut créer, sa réalisation passe nécessaire #. Boucle infinie #. Fermeture du programme -Initialisation --------------- - +l'initialisation: +----------------- Afin de pouvoir utiliser le module Pygame, il va falloir d'abord l'importer, puis l'initier de la manière suivante: .. code-block:: pycon + >>> import pygame + >>> pygame.init() - >>> import pygame - >>> pygame.init() - - -``pygame.locals`` -^^^^^^^^^^^^^^^^^ - -pygame contient une quantité de constantes prédéfinies, qui sont chargées dans le namespace pygame, lors de l’importation de celui-ci. Ainsi, lorsque l’on veut utiliser une des constantes, il faut à chaque fois l’appeler en préfixant pygame. suivi du nom de la constante. Afin d’éviter ce préfixe, on peut faire une importation des constantes depuis :py:mod:`pygame.locals`, comme ci-dessous: - +Pygame.locals: +-------------- +Pygame contient une quantité de constantes prédéfinies, qui sont chargées dans le namespace pygame, lors de l’importation de celui-ci. Ainsi, lorsque l’on veut utiliser une des constantes, il faut à chaque fois l’appeler en préfixant pygame. suivi du nom de la constante. Afin d’éviter ce préfixe, on peut faire une importation des constantes depuis pygame.locals, comme ci-dessous: .. code-block:: python + >>> from pygame.locals import * - >>> from pygame.locals import * - -Appel des fonctions utiles --------------------------- - -C’est dans cette partie que l’on va initialiser la fenêtre, ainsi que tout les éléments dont on aura besoin. +Appel des fonctions utiles: +--------------------------- +c’est dans cette partie que l’on va initialiser la fenêtre, ainsi que tout les éléments dont on aura besoin. par exemple, pour afficher une fenêtre: .. code-block:: pycon - >>> fenetre = pygame.display.set_mode((200, 200)) + >>> fenetre = pygame.display.set_mode((200, 200)) -Dans cet exemple, on appelle la fonction :py:func:`~pygame.display.set_mode` du module display. Ce que l’on obtient en retour, c’est un objet de la classe Surface qui est défini par Pygame. +Dans cet exemple, on appelle la fonction :py:meth: set_mode du module display. Ce que l’on obtient en retour, c’est un objet de la classe Surface qui est défini par Pygame. Résultat: .. image:: exemple/firstWindow.PNG -La boucle infinie ------------------ - +La boucle infinie: +------------------ Si on se contentait d’exécuter le code ci-dessus, on n’obtiendrait le résultat que pendant une fraction de seconde, car au moment où le code a fini de s’exécuter, il se termine. Il faut donc créer une boucle infinie, de laquelle on peut sortir au moyen d’une action de l’utilisateur. -Exemple de fenêtre simple -------------------------- - -Cet exemple provient de :ref:`makegames-2`. +Exemple de fenêtre simple: +-------------------------- +Cet exemple provient de la `documentation pygame `_ .. literalinclude:: exemple/simpleWindow.py -Exemples -======== +Exemples: +--------- -Son au maintien d'une touche ----------------------------- - -Cet exemple provient du `tutoriel OpenClassrooms`_ +Petit lecteur audio simple +^^^^^^^^^^^^^^^^^^^^^^^^^^ +Cet exemple est inspiré du `tutoriel Openclassroom `_ .. literalinclude:: exemple/mixerEx.py -Dans cet exemple, on a utilisé deux modules: :py:mod:`pygame.mixer`, qui est utilisé pour la gestion de sons et :py:mod:`pygame.event`, qui est utilisé pour la gestion des touches au clavier. +Dans cet exemple, plusieurs modules sont utilisés, notamment: pygame.mixer, qui est utilisé pour la gestion de sons, pygame.event, qui est utilisé pour la gestion des touches au clavier, pygame.draw, pour dessiner les boutons et pygame.mouse, pour récupérer les coordonnées de la souris. +Ici, on a créé un petit lecteur audio. Lorsque l'on appuie sur play/stop, le son de lance/s'arrête. +pour créer les boutons, on a utilisé la fonction de dessin de pygame.draw. +pour l'illumination des boutons au passage de la souris, il faut récupérer la position de la souris, et la comparer avec la zone dans laquelle est dessinée le rectangle. -Lors de l’appui, et du maintient de la touche espace, on joue le son qui a été chargé, ou on continue la lecture si le son était sur pause. Lorsque la touche est relâchée, le son est mis sur pause. +résultat: -Affichage simple d'images -------------------------- +.. image:: exemple/LecteurAudio.PNG -.. literalinclude:: exemple/loadBg.py +Affichage simple d'images: +^^^^^^^^^^^^^^^^^^^^^^^^^^ -Dans cet exemple, on commence par charger une image. Cette image n’étant pas forcément dans un format supporté par pygame, la fonction pygame.convert est utilisée afin de s’assurer que l’image pourra s’afficher correctement. +.. literalinclude:: exemple/loadBG.py -.. convert est également une méthode. Et c'est dommage d'être resizable et de ne - rien faire avec ça. +Dans cet exemple, on commence par charger une image. Cette image n’étant pas forcément dans un format supporté par pygame, la fonction pygame.convert est utilisée afin de s’assurer que l’image pourra s’afficher correctement. .. code-block:: pycon @@ -131,14 +118,10 @@ Enfin, on peut afficher l’image en la “collant” sur la fenêtre de base, a Il est a noter que la fonction blit prend en paramètre une Surface, donc l’objet à afficher, ainsi que la position, en sachant que la coordonnée (0,0) est en haut à gauche de la fenêtre. -.. blit est une méthode j'imagine. Conclusion -========== - -*pygame* est un module très complet, qui nous permet de réaliser des jeux avec une certaine rapidité. Les quelques méthodes présentées ici ne sont qu’une infime partie des méthodes que propose pygame. Afin d’en avoir une liste exhaustive, il est recommandé d’aller consulter la documentation officielle de :py:mod:`pygame`, +---------- +Pygame est un module très complet, qui nous permet de réaliser des jeux avec une certaine rapidité. Les quelques méthodes présentées ici ne sont qu’une infime partie des méthodes que propose pygame. Afin d’en avoir une liste exhaustive, il est recommandé d’aller consulter la documentation officielle de pygame, disponible à cet endroit: `documentation pygame `_ .. [#dc] - -.. _tutoriel OpenClassrooms: https://openclassrooms.com/courses/interface-graphique-pygame-pour-python/le-son-5