Vous êtes sur la page 1sur 7

Vos dons permettent Wikilivres de continuer exister ! Merci de votre soutien.

Pygame Introduction Pygame


Un livre de Wikibooks. Pygame/Introduction Pygame Aller : Navigation, rechercher

Introduction Pygame Importation et initialisation Dplacer une image Chimp - Ligne par ligne Introduction au module Sprite Introduction au module Surfarray Guide du dbutant Concevoir des jeux avec Pygame o Code final de Tom's Pong

Traduit de l'anglais, l'original par Pete Shinners : http://www.pygame.org/docs/tut/intro/intro.html [archive]

Sections
[masquer]

1 Introduction Pygame 2 Histoire 3 Un avant-got 4 Python et les jeux 5 En conclusion 6 Vue d'ensemble des modules de Pygame

[modifier] Introduction Pygame


Cet article est une introduction la bibliothque Pygame pour les programmeurs Python. La version originale est parue dans le Pyzine volume 1 issue 3. Cette version contient des rvisions trop mineures pour crer un nouvel article. Pygame est une bibliothque d'extension de Python [archive], enveloppe de la bibliothque SDL [archive].

[modifier] Histoire
Pygame a commenc durant l't 2000. Connaissant le langage C depuis des annes, j'ai dcouvert Python et SDL en mme temps. Si vous tes dj familiaris avec Python, (qui en tait la version 1.5.2), vous pourriez avoir besoin d'une introduction SDL : Simple Directmedia Librairy. Cre par Sam Lantinga, SDL est une bibliothque multi-plateforme crite en C afin de grer le multimdia, elle est comparable DirectX. Elle a t utilise par des centaines de projets commerciaux et de jeux open-source. J'ai t impressionn par la propret et la simplicit des deux projets et j'ai vite ralis qu'associer Python et SDL tait une ide intressante. J'ai dcouvert un petit projet existant avec exactement la mme ide : PySDL. Cr par Mark Baker, PySDL tait une implmentation de SDL pour Python. L'interface tait propre mais je trouvais que ce code tait trop proche du C. La mort de PySDL m'a encourag lancer un nouveau projet. J'ai cherch faire un projet tirant rellement profit de Python. Mon but tait de permettre de raliser facilement des choses simples aussi bien que des choses plus complexes. Pygame a commenc en octobre 2000. Six mois plus tard, la version 1.0 faisait son apparition.

[modifier] Un avant-got
Je trouve que le meilleur moyen pour saisir le fonctionnement d'une nouvelle bibliothque est de directement regarder un exemple parlant. Dans les premiers jours avec Pygame, j'ai cr une animation de balle rebondissante en 7 lignes de code. Jetons un coup d'il une version simplifie de la mme chose.

1. import sys, pygame

2.
3. pygame.init()

4.
5.

6.
7. size = width, height = 320, 240

8.
9. speed = [2, 2]

10.
11. black = 0, 0, 0

12.
13.

14.
15. screen = pygame.display.set_mode(size)

16.
17.

18.
19. ball = pygame.image.load("ball.bmp")

20.
21. ballrect = ball.get_rect()

22.
23.

24.
25. while 1:

26.
27. for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit()

28.
29.

30.
31.

32.
33.
ballrect = ballrect.move(speed) if ballrect.left < 0 or ballrect.right > width: speed[0] = -speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1]

34.
35.

36.
37.

38.
39.

40.
41.

42.
43.

44.
45. screen.fill(black) screen.blit(ball, ballrect) pygame.display.flip()

46.
47.

48.
49.

50. (Si vous voulez essayer cet exemple, mettez une image nomme ball.bmp [archive] dans le mme dossier.)

C'est la faon la plus simple d'obtenir une animation de balle rebondissante. On voit au dbut du code l'importation et l'initialisation du module Pygame, ce qui ne change pas vraiment d'un programme un autre. Le import pygame importe toutes les modules disponibles de Pygame. L'appel de pygame.init() initialise chacun de ces modules. la ligne 8, une fentre graphique est cre par l'appel de pygame.display.set_mode(). Pygame et SDL nous simplifie la vie en slectionnant par dfaut les modes graphiques les plus adapts au matriel graphique. Vous pouvez outrepasser ce mode et Pygame compensera tout ce que le matriel ne peut pas faire. Pygame reprsente les images comme des objets Surface. La fonction display.set_mode() cre un nouvel objet Surface reprsentant le graphisme actuel afficher. Tous les dessins que vous faites sur cette surface seront visibles l'cran. la ligne 10, nous chargeons notre image de balle. Pygame supporte une grande varit de format d'image, comme la bibliothque SDL_image, les formats pris en compte sont : JPG, PNG, TGA et GIF. La fonction pygame.image.load() nous retourne la surface contenant l'image de balle. La surface gardera toutes les proprits (couleur cl et/ou de transparence alpha) du fichier d'origine. Aprs le chargement de

l'image de la balle, nous crons une variable ballrect. Pygame possde un objet trs utile nomm Rect qui reprsente une zone rectangulaire. Dans la partie du code charge de l'animation, nous verrons quel est le rle des objets Rect.

la ligne 13, notre programme est initialis et prt tre lanc. l'intrieur d'une boucle infinie qui gre les vnements gnrs par l'utilisateur, le code dessine et fait bouger la balle. Si vous tes familier avec la programmation de GUI (Graphical User Interface, ou Interface Utilisateur Graphique), vous avez certainement une notion de ce que sont les vnements. Avec Pygame, il s'agit de la mme chose. Lorsqu'un vnement se produit, le programme l'intercepte et agit en consquence. Le premier vnement pris en compte est l'action de quitter le programme. Si cet vnement survient, le programme agit en consquence en appelant la mthode sys.exit(). Ensuite vient le traitement de l'actualisation de la position de la balle. Les lignes 17 et 21 dplace la variable ballrect par sa vitesse courante. Si la balle s'est dplace l'extrieur de l'cran, la vitesse de la balle est inverse pour qu'elle reparte dans l'autre sens. a ne correspond pas exactement aux lois de Newton, mais ce n'tait pas l'objectif de ce premier programme de toute faon. la ligne 23, nous effaons l'cran en le remplissant de noir. Si vous n'avez jamais travaill avec des animations, ceci peut vous paratre trange. Vous pouvez vous demander : Pourquoi avons-nous besoin de tout effacer ? Pourquoi n'avons-nous pas juste la balle bouger sur l'cran ?, ceci n'est pas vraiment la manire de fonctionner des animations sur ordinateur. Une animation n'est rien de plus qu'une succession d'images, mais cette succession des images est tellement rapide que le cerveau humain voit une animation. screen n'est qu'une image que l'utilisateur voit. Si vous n'avez pas pris le temps d'effacer la balle de l'cran, nous pourrions voir la trace de la balle tout en continuant de voir la balle dans ses nouvelles positions. la ligne 24, nous dessinons l'image de la balle sur l'cran. Le dessin de ces images est gr par la mthode Surface.blit(). Un blit signifie que l'on copie les couleurs de chaque pixel d'une image sur une autre. Avec la mthode blit(), on prend une surface dite source que l'on applique sur la surface destination, le tout une position dfinie. La dernire chose dont nous avons besoin, est la mise jour de l'affichage visible. Pygame gre l'affichage avec un double tampon (double buffer). Quand nous avons fini de dessiner, nous faisons appel la fonction pygame.display.flip(). Ceci fait que tout ce que nous avons dessin sur la Surface screen devient visible. Cette mise en tampon fait que nous sommes sr de voir des images compltes dessine l'cran. Sans cette manipulation par tampon, l'utilisateur verrait l'image se dessiner au fur et mesure sur son cran.

Ceci conclut notre courte introduction Pygame. Pygame possde plusieurs modules pour grer les entres de la souris, du clavier et du joystick. Il est aussi possible de mixer des fichiers audio et de dcoder des flux musicaux. Avec les Surfaces, vous pouvez dessiner de simples formes (ronds, ...), les faire pivoter, et/ou les mettre une certaine chelle. Avec en plus un module pour des manipulations de pixels sur les images en temps rel avec les NumPy arrays. Pygame peut lire les videos MPEG et supporte les CDs audio. Pygame a

galement la capacit d'agir en tant que couche d'affichage multi-plateforme pour PyOpenGL. La plupart des modules de Pygame sont crits en C, peu sont en Python. Le site internet de Pygame possde une documentation de rfrence complte pour chaque fonction de Pygame et plusieurs tutoriaux pour tout niveau d'utilisateur. Les sources de Pygame viennent avec de nombreux exemples pour une comprhension facilite.

[modifier] Python et les jeux


Python est il appropri pour les jeux ? La rponse est : Cela dpend du jeu. Python est en fait capable de faire tourner des jeux. Cela vous surprendra toujours de savoir tout ce qu'il est possible de faire en 30 millisecondes. Toutefois, il n'est pas difficile de plafonner une fois que votre jeu commencera devenir plus complexe. N'importe quel jeu fonctionnant en temps rel utilisera pleinement l'ordinateur. Depuis plusieurs annes, il y a une tendance intressante dans le dveloppement de jeux : l'utilisation de langage de plus haut niveau (plus proches de l'utilisateur que de la machine). Gnralement un jeu est divis en 2 parties majeures. Le moteur de jeu, qui doit tre le plus rapide possible, et la logique de jeu, qui commande le moteur de jeu. Il n'y a pas si longtemps, le moteur tait crit en assembleur avec quelques portions de C. De nos jours, le C est plus prsent dans les moteurs de jeu, tandis que le jeu en lui mme est crit en langage de script de haut niveau. Les jeux comme Quake3 et Unreal Tournament excutent ces scripts en tant que bytecode portable. Dans le courant 2001, les developpeurs de Rebel Act Studios ont fini leur jeu, Severance: Blade of Darkness. Ce jeu utilise un moteur de jeu 3D modifi, le reste du jeu est crit en Python. Le jeu est un jeu d'action la 3me personne. Vous contrlez un guerrier medival attaquant et explorant des donjons. Vous pouvez tlcharger le 3me addon pour ce jeu, et vous verrez qu'il n'y a rien d'autre que des fichiers sources en Python. Beaucoup plus rcemment, Python a t utilis par une grande varit de jeux comme Freedom Force et Humungous' Backyard Sports Series. Pygame et SDL s'utilisent comme un excellent moteur de jeu en C pour des jeux en 2D. Les jeux trouvent en grande partie ce dont ils ont besoin dans la SDL pour le graphisme. SDL peut avantageusement utiliser l'acclration graphique matrielle. Vous pouvez optimiser le jeu pour lui faire afficher entre 40 et 200 FPS (images par seconde). Lorsque l'on voit qu'un jeu en Python peut afficher 200 FPS, on ralise que Python et les jeux peuvent se combiner. Il est impressionnant de savoir que Python et SDL fonctionne sur de multiple plateformes. Par exemple, en mai 2001, j'ai actualis compltement mon projet avec Pygame : SolarWolf, un jeu d'action et d'arcade. Une chose qui m'a tonn est qu'un an aprs, il n'avait toujours pas eu besoin de patches, correction de bugs, ou de mises jour. Le jeu tait entirement developp sous Windows mais tournait aussi sous Linux, Mac OSX et plusieurs Unix sans aucun travail de ma part. Mais il y a clairement beaucoup de limitations. La meilleure manire de grer l'acclration matrielle n'est pas toujours la meilleure faon d'avoir de meilleurs rsultats pour une

acclration logicielle. L'acclration n'est pas disponibles sur toutes les plateformes. Quand un jeu devient trop complexe, il doit souvent se rduire une seule plateforme. La SDL galement quelques limitations de conception, des choses comme le scrolling en plein cran peut rduire fortement la vitesse du jeu, jusqu' ce que ca devienne injouable. SDL n'est pas fait pour tous les types de jeux, mais souvenez-vous que des compagnies comme Loki ont utilis la SDL pour faire fontionner une grande varit de jeux. Pygame est un langage bas niveau quand il est utilis pour coder les jeux. Vous aurez rapidement besoin d'envelopper des fonctions communes pour votre environnement de jeu. C'est en grande partie d au fait qu'il n'y a rien dans Pygame pour ca. Votre programme a le contrle total sur tout. Vous constaterez que l'effet indsirable cela est que vous devrez crire beaucoup de code ennuyeux pour obtenir un cadre plus avanc. Vous aurez besoin d'une meilleure comprhension de ce que vous faite.

[modifier] En conclusion
Le dveloppement en vaut la peine, il y a quelque chose d'excitant dans le fait de pouvoir voir et interagir avec le code que vous avez crit. Pygame est actuellement utilise par plus de 30 projets. Plusieurs sont jouables ds maintenant. Vous allez tre surpris en visitant le site internet de Pygame [archive] en voyant ce que les autres utilisateurs sont capables de faire avec Python. Une chose qui a retenu mon attention, est que beaucoup de personnes se sont mises utiliser Python pour leurs premiers essais en dveloppement de jeu. Je peux voir pourquoi les jeux attirent de nouveaux programmeurs, mais il peut tre difficile de crer un jeu qui requiert une comprhension plus solide du langage. J'ai essay de soutenir ce type d'utilisateurs en crivant plusieurs exemples et tutoriels sur Pygame pour des personnes nouvelles ces concepts. Pour finir, mon conseil est de faire au plus simple. Je ne peux me soumettre une contrainte. Si vous prvoyez de crer votre premier jeu, sachez qu'il y a beaucoup apprendre. Mme un simple jeu est un challenge, et les jeux complexes ne sont pas ncessairement de bons jeux. Lorsque vous comprenez Python, vous pourrez utiliser Pygame pour crer un simple jeu en une ou deux semaines. Mais pour avoir un jeu compltement prsentable, il vous faudra de nombreuses heures de travail.

[modifier] Vue d'ensemble des modules de Pygame


Voici un rcapitulatif des modules disponibles dans la bibliothque de Pygame, avec un lien sur la documentation de rfrence de chacun de ces modules. Cursors [archive] Charger et compiler des images de curseur. Event [archive] Grer les vnements

Cdrom [archive] Accder et contrler les lecteurs CD audio. Draw [archive] Dessiner des formes

Display [archive] Configurer la surface d'affichage. Font [archive] Charger et faire un

simples comme des lignes et des ellipses sur des surfaces.

partir de diffrents matriels d'entre (clavier, souris, ...), ainsi que du fentrage.

rendu des polices TrueType.

Image [archive] Charger, sauver et transfrer des images sur des surfaces. Mixer [archive] Charger et jouer des sons. Music [archive] Jouer des pistes musicales en streaming.

Joystick [archive] Grer les joysticks.

Key [archive] Grer le clavier.

Mouse [archive] Grer la souris et son affichage.

Movie [archive] Lecture de vido partir de film en MPEG. Pygame [archive] Fonctions de haut niveau pour le contrle de Pygame. Sprite [archive] Objets de haut niveau pour la reprsentation des images de jeu. Time [archive] Manipuler les temporisateurs et le taux d'image.

Overlay [archive] Accs l'affichage vido avanc.

Rect [archive] Conteneur flexible pour un rectangle.

Sndarray [archive] Manipuler des chantillons de donnes audio. Surfarray [archive] Manipuler des donnes de pixel d'image.

Surface [archive] Objets pour des images et l'cran. Transform [archive] Redimensionner et dplacer des images.

Rcupre de http://fr.wikibooks.org/w/index.php? title=Pygame/Introduction__Pygame&oldid=349661 Catgorie :

Pygame (livre)