« Pygame/Introduction à Pygame » : différence entre les versions
Contenu supprimé Contenu ajouté
Corrections mineures et remise en forme |
|||
Ligne 1 :
{{Pygame - Menu}}
Traduit de l'anglais, l'original par ''Pete Shinners'' :<br/>
http://www.pygame.org/docs/tut/intro/intro.html
== Indroduction à Pygame ==
Cet article est une introduction à la bibliothèque Pygame pour les programmeurs Python. La version originale est parue dans le Pyzine volume 1 issue 3. Cette version contient des révisions trop mineures pour créer un nouvel article. Pygame est une bibliothèque d'extension de Python, enveloppe de la bibliothèque SDL.
== Histoire ==
Pygame a commencé durant l'été 2000. Connaissant le langage C depuis des années, j'ai découvert Python et SDL en même temps. Si vous êtes déjà familiarisé avec Python, (qui en était à la version 1.5.2), vous pourriez avoir besoin d'une introduction à SDL : ''Simple Directmedia Librairy''. Créée par Sam Lantinga, SDL est une bibliothèque multi-plateforme écrite en C afin de gérer le multimédia, elle est comparable à DirectX. Elle a été utilisée 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 réalisé qu'associer Python et SDL était une idée intéressante.
J'ai découvert un petit projet existant avec exactement la même idée : PySDL. Créé par Mark Baker, PySDL était une implémentation de SDL pour Python. L'interface était propre mais je trouvais que ce code était trop proche de C. La mort de PySDL m'a encouragé à lancer un nouveau projet.
J'ai cherché à faire un projet tirant réellement profit de Python. Mon but était de permettre de réaliser 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.
== Un avant-goût ==
Je trouve que le meilleur moyen pour saisir le fonctionnement d'une nouvelle bibliothèque 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 simplifiée de la même chose.
<source lang="python" line>
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("ball.bmp")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
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]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
</source>
* C'est la façon la plus simple d'obtenir une animation de balle rebondissante. On voit au début du code l'importation et l'initialisation du module Pygame, ce qui ne change pas vraiment d'un programme à un autre. Le <tt>import pygame<tt> importe toutes les modules disponibles de Pygame. L'appel de <tt>pygame.init()</tt> initialise chacun de ces modules.
* ''A la ligne 8'', une fenêtre graphique est créée par l'appel de <tt>pygame.display.set_mode()</tt>. Pygame et SDL nous simplifie la vie en sélectionnant par défaut les modes graphiques les plus adaptés au matériel graphique. Vous pouvez outrepasser ce mode et Pygame compensera tout ce que le matériel ne peut pas faire. Pygame représente les images comme des objets Surface. La fonction <tt>display.set_mode()</tt> crée un nouvel objet Surface représentant le graphisme actuel à afficher. Tous les dessins que vous faites sur cette surface seront visibles à l'écran.
* ''A la ligne 10'', nous chargeons
* Ensuite vient le traitement de l'actualisation de la position de la balle.
* ''A la ligne 23'', nous effaçons l'écran
* ''A la ligne 24'', nous dessinons
* La dernière chose dont nous avons besoin, est la mise
Ceci
Le site internet de Pygame possède une documentation de référence complète pour chaque fonction de Pygame et plusieurs tutoriaux pour tout niveau d'utilisateur. Les sources de Pygame viennent avec de nombreux exemples pour une compréhension facilitée.
== Python et les jeux ==
''Python est il approprié pour les jeux ?''</br>
La réponse est : ''Cela dépend 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 réel utilisera pleinement l'ordinateur.
Depuis plusieurs années, il y a une tendance intéressante dans le développement de jeu : l'utilisation de langage de plus haut niveau (plus proches de l'utilisateur que de la machine). Généralement 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 présent dans les moteurs de jeu, tandis que le jeu en lui même est écrit en langage de script de haut niveau. Les jeux comme ''Quake3'' et ''Unreal Tournament'' exécutent ces scripts en tant que bytecode portable.
Dans le courant 2001, les developpeurs de ''Rebel Act Studios'' ont fini leurs 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 3ème personne. Vous contrôlez un guerrier mediéval attaquant et explorant des donjons. Vous pouvez télécharger le 3ème addon pour ce jeu, et vous verrez qu'il n'y a rien d'autre que des fichiers sources en Python.
Beaucoup plus récemment, Python a été utilisé par une grade variété 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'accélération graphique matérielle. 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 afficher 200 FPS, on réalise 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é complètement mon projet avec Pygame : ''SolarWolf'', un jeu d'action et d'arcade. Une chose qui m'a étonné est qu'un an après, il n'avait toujours pas eu besoin de patches, correction de bugs, ou de mises à jour. Le jeu était entièrement 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
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 contrôle total sur tout. Vous constaterez que l'effet indésirable à cela est que vous devrez écrire beaucoup de code ennuyant pour obtenir un cadre plus avancé. Vous aurez besoin d'une meilleure compréhension de ce que vous faite.
== En conclusion ==
Le
Une chose qui a retenu mon attention, est que beaucoup de
Pour finir, mon conseil est de faire au plus simple. Je ne peux me soumettre
== Vue d'ensemble des modules de Pygame ==
Voici un récapitulatif des modules disponibles dans la bibliothèque de Pygame, avec un lien sur la documentation de référence de chacun de ces modules.
{| border="1" cellpadding="10" cellspacing="0"
|
;'''[http://www.pygame.org/docs/ref/cdrom.html Cdrom]'''
: Accéder et contrôler les lecteurs CD audio.
|
; '''[http://www.pygame.org/docs/ref/cursors.html Cursors]'''
|
; '''[http://www.pygame.org/docs/ref/display.html Display]'''
: Configurer la surface d'affichage.
|-
|
; '''[http://www.pygame.org/docs/ref/draw.html Draw]'''
: Dessiner des formes simples comme des lignes et des ellipses sur des surfaces.
|
; '''[http://www.pygame.org/docs/ref/event.html Event]'''
: Gérer les évènements à partir de différents matériels d'entrée (clavier, souris, ...), ainsi que du fenêtrage.
|
; '''[http://www.pygame.org/docs/ref/font.html Font]'''
: Charger et faire un rendu des polices TrueType.
|-
|
; '''[http://www.pygame.org/docs/ref/image.html Image]'''
: Charger, sauver et transférer des images sur des surfaces.
|
; '''[http://www.pygame.org/docs/ref/joystick.html Joystick]'''
: Gérer les joysticks.
|
; '''[http://www.pygame.org/docs/ref/key.html Key]'''
: Gérer le clavier.
|-
|
; '''[http://www.pygame.org/docs/ref/mixer.html Mixer]'''
: Charger et jouer des sons.
|
; '''[http://www.pygame.org/docs/ref/mouse.html Mouse]'''
: Gérer la souris et son affichage.
|
; '''[http://www.pygame.org/docs/ref/movie.html Movie]'''
: Lecture de vidéo à partir de film en MPEG.
|-
|
; '''[http://www.pygame.org/docs/ref/music.html Music]'''
: Jouer des pistes musicales en streaming.
|
; '''[http://www.pygame.org/docs/ref/overlay.html Overlay]'''
: Accès à l'affichage vidéo avancé.
|
; '''[http://www.pygame.org/docs/ref/pygame.html Pygame]'''
: Fonctions de haut niveau pour le contrôle de Pygame.
|-
|
; '''[http://www.pygame.org/docs/ref/rect.html Rect]'''
: Conteneur flexible pour un rectangle.
|
; '''[http://www.pygame.org/docs/ref/sndarray.html Sndarray]'''
: Manipuler des échantillons de données audio.
|
; '''[http://www.pygame.org/docs/ref/sprite.html Sprite]'''
: Objets de haut niveau pour la représentation des images de jeu.
|-
|
; '''[http://www.pygame.org/docs/ref/surface.html Surface]'''
: Objets pour des images et l'écran.
|
; '''[http://www.pygame.org/docs/ref/surfarray.html Surfarray]'''
: Manipuler des données de pixel d'image.
|
; '''[http://www.pygame.org/docs/ref/time.html Time]'''
: Manipuler les temporisateurs et le taux d'image.
|-
|
; '''[http://www.pygame.org/docs/ref/transform.html Transform]'''
: Redimensionner et déplacer des images.
|
|
|}
|