Menu
CoddyTech

Aide-mémoire pygame

Dernière mise à jour

Installation et boucle de jeu

Tout programme pygame ouvre une fenêtre, puis répète une boucle jusqu'à ce que le joueur quitte.

OpérationCode
Installer pygame-cepython3 -m pip install pygame-ce
Importer et démarrer pygameimport pygame pygame.init()
Ouvrir une fenêtrescreen = pygame.display.set_mode((640, 480))
Définir le titre de la fenêtrepygame.display.set_caption("My Game")
Créer une horlogeclock = pygame.time.Clock()
La boucle de jeurunning = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill("black") pygame.display.flip() clock.tick(60)
Tout fermer après la bouclepygame.quit()

Affichage

L'écran est une Surface ; rien n'apparaît tant que vous n'appelez pas flip.

OpérationCode
Afficher la frame terminéepygame.display.flip()
N'afficher que certaines zonespygame.display.update([rect1, rect2])
Effacer l'écranscreen.fill((30, 30, 46))
Taille de la fenêtrescreen.get_size(), screen.get_width()
L'écran sous forme de Rectscreen.get_rect()
Fenêtre redimensionnablepygame.display.set_mode((640, 480), pygame.RESIZABLE)
Plein écran à la taille du bureaupygame.display.set_mode((0, 0), pygame.FULLSCREEN)

Couleurs et dessin

Les fonctions de pygame.draw prennent une surface, une couleur et une position. width=0 remplit.

OpérationCode
Couleur en RVB(255, 140, 0)
Couleur par nom ou en hexadécimal"tomato", "#ff8c00", pygame.Color("gold")
Rectanglepygame.draw.rect(screen, "red", (x, y, w, h))
Contour et coins arrondispygame.draw.rect(screen, "red", rect, width=2, border_radius=8)
Cercle (par son centre)pygame.draw.circle(screen, "blue", (cx, cy), radius)
Lignepygame.draw.line(screen, "white", (x1, y1), (x2, y2), 3)
Polygonepygame.draw.polygon(screen, "green", [(0, 0), (40, 0), (20, 30)])
Ellipse dans un rectanglepygame.draw.ellipse(screen, "purple", (x, y, w, h))

Rect

Un Rect stocke une position et une taille en nombres entiers.

OpérationCode
Créer un Rectplayer = pygame.Rect(x, y, width, height)
Placer par n'importe quel pointplayer.center = (320, 240), player.bottom = 400
Bords et coinsleft, right, top, bottom, topleft, midbottom
Déplacer sur placeplayer.move_ip(dx, dy)
Copie déplacéemoved = player.move(dx, dy)
Garder dans l'écranplayer.clamp_ip(screen.get_rect())
Agrandir autour du centrebigger = player.inflate(20, 20)
Positions décimales (pygame-ce)pygame.FRect(10.5, 20.25, 40, 40)

Images, Surfaces et blit

Chargez les images une seule fois, avant la boucle, puis faites-en un blit à chaque frame.

OpérationCode
Charger une image avec transparenceimg = pygame.image.load("player.png").convert_alpha()
Charger une image opaquebg = pygame.image.load("sky.png").convert()
Dessiner une imagescreen.blit(img, (x, y))
Dessiner centréscreen.blit(img, img.get_rect(center=(320, 240)))
Nouvelle Surface videpanel = pygame.Surface((200, 100))
Surface transparentelayer = pygame.Surface((200, 100), pygame.SRCALPHA)
Rendre toute une Surface translucideimg.set_alpha(128)
Découper une frame dans une planche de spritesframe = sheet.subsurface((0, 0, 32, 32))
Enregistrer une capture d'écranpygame.image.save(screen, "shot.png")

Transformations

Chaque fonction renvoie une nouvelle Surface ; transformez l'original, pas le dernier résultat.

OpérationCode
Redimensionnerpygame.transform.scale(img, (64, 64))
Mettre à l'échelle par un facteurpygame.transform.scale_by(img, 2)
Redimensionner en lissantpygame.transform.smoothscale(img, (64, 64))
Faire pivoter (sens antihoraire, en degrés)pygame.transform.rotate(img, 45)
Faire pivoter autour du centrerotated = pygame.transform.rotate(original, angle) rect = rotated.get_rect(center=rect.center)
Retourner horizontalementpygame.transform.flip(img, True, False)

Événements et clavier

Utilisez les événements pour un appui unique et get_pressed() pour les touches maintenues.

OpérationCode
Lire les événements de la framefor event in pygame.event.get():
Fenêtre ferméeevent.type == pygame.QUIT
Une touche a été enfoncéeevent.type == pygame.KEYDOWN and event.key == pygame.K_SPACE
Une touche a été relâchéeevent.type == pygame.KEYUP
Caractère saisievent.unicode
Touches maintenues en ce momentkeys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: x -= 5
Direction à partir de deux touchesdx = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]
Touches enfoncées pendant cette frame (pygame-ce)pygame.key.get_just_pressed()[pygame.K_SPACE]
Constantes des touchesK_a...K_z, K_0...K_9, K_UP, K_RETURN, K_ESCAPE, K_LSHIFT
Nom d'une touchepygame.key.name(event.key)
Événement personnaliséHIT = pygame.event.custom_type() pygame.event.post(pygame.event.Event(HIT))

Souris

Boutons : 1 gauche, 2 milieu, 3 droit.

OpérationCode
Un bouton a été enfoncéevent.type == pygame.MOUSEBUTTONDOWN and event.button == 1
Où il a été enfoncéevent.pos
Position actuelle du pointeurx, y = pygame.mouse.get_pos()
Boutons maintenus en ce momentleft, middle, right = pygame.mouse.get_pressed()
La souris a bougéevent.type == pygame.MOUSEMOTION, event.rel
La molette a tournéevent.type == pygame.MOUSEWHEEL, event.y
Clic dans un boutonbutton_rect.collidepoint(event.pos)
Masquer le pointeurpygame.mouse.set_visible(False)

Sprites et groupes

Un sprite garde une image et un rect ; un groupe en met à jour et en dessine plusieurs.

OpérationCode
Classe de spriteclass Coin(pygame.sprite.Sprite): def __init__(self, pos): super().__init__() self.image = coin_img self.rect = self.image.get_rect(center=pos)
Créer un groupecoins = pygame.sprite.Group()
Ajouter à un groupecoins.add(Coin((100, 50)))
Mettre à jour tous les spritescoins.update()
Dessiner tous les spritescoins.draw(screen)
Retirer un sprite de tous ses groupescoin.kill()
Groupe d'un seul spriteplayer = pygame.sprite.GroupSingle(Player())

Collisions

Deux Rect entrent en collision quand ils se chevauchent ; des bords simplement en contact ne comptent pas.

OpérationCode
Deux rectanglesa.colliderect(b)
Point à l'intérieurrect.collidepoint(x, y)
Le premier d'une listerect.collidelist(walls) # index or -1
Sprite contre un groupehits = pygame.sprite.spritecollide(player, coins, True)
Au moins une collisionpygame.sprite.spritecollideany(player, enemies)
Groupe contre groupepygame.sprite.groupcollide(bullets, enemies, True, True)
Au pixel prèspygame.sprite.spritecollide(a, group, False, pygame.sprite.collide_mask)
Cerclespygame.Vector2(a).distance_to(b) < r1 + r2

Texte et polices

Faites le rendu du texte sur une Surface, puis un blit.

OpérationCode
Police par défautfont = pygame.font.Font(None, 36)
Police systèmefont = pygame.font.SysFont("arial", 24)
Fichier de policefont = pygame.font.Font("pixel.ttf", 32)
Rendre du textetext = font.render("Score: 10", True, "white")
L'afficher centréscreen.blit(text, text.get_rect(center=(320, 40)))
Retour à la ligne automatique (pygame-ce)font.render(story, True, "white", None, 400)
Taille sans rendufont.size("Hello")
Polices installéespygame.font.get_fonts()

Son et musique

Chargez les sons une seule fois. La musique lit une piste en streaming depuis son fichier.

OpérationCode
Charger un sonjump = pygame.mixer.Sound("jump.ogg")
Le jouerjump.play()
Volume du sonjump.set_volume(0.5)
Charger une musiquepygame.mixer.music.load("theme.ogg")
Musique en boucle infiniepygame.mixer.music.play(-1)
Pause et reprisepygame.mixer.music.pause(), pygame.mixer.music.unpause()
Arrêter la musiquepygame.mixer.music.stop()

Temps et timers

Les ticks sont en millisecondes.

OpérationCode
Limiter le nombre d'images par secondeclock.tick(60)
Delta time en secondesdt = clock.tick(60) / 1000
Images par seconde actuellesclock.get_fps()
Millisecondes depuis initpygame.time.get_ticks()
Événement de timer répétéSPAWN = pygame.event.custom_type() pygame.time.set_timer(SPAWN, 1000)
Timer à usage uniquepygame.time.set_timer(SPAWN, 2000, loops=1)
Arrêter un timerpygame.time.set_timer(SPAWN, 0)

Vector2

Des nombres décimaux pour les positions et les vitesses.

OpérationCode
Créer un vecteurpos = pygame.Vector2(100, 200)
Déplacer selon une vitessepos += velocity * dt
Longueurvelocity.length()
Même vitesse en diagonaleif direction.length() > 0: direction = direction.normalize()
Distance entre deux pointspos.distance_to(target)
Faire pivotervelocity.rotate(90)
Avancer vers un point (pygame-ce)pos.move_towards_ip(target, 5)

Le code pygame dont vous avez besoin pour créer un jeu 2D en Python, classé par tâche : la boucle de jeu, l'affichage, les couleurs et le dessin, Rect, les images et blit, la mise à l'échelle et la rotation, le clavier et la souris, les sprites et les groupes, les collisions, le texte, le son, les timers et Vector2. Chaque ligne est un court extrait à copier, à côté de ce qu'il fait.

Tout est écrit pour pygame-ce 2.5, l'édition communautaire de pygame, qui s'importe toujours avec import pygame. Les lignes marquées pygame-ce utilisent ses ajouts ; toutes les autres fonctionnent aussi avec le pygame original. Testez n'importe quel extrait dans le playground pygame, qui exécute pygame dans votre navigateur sans rien installer. Vous débutez en Python ? Commencez par l'aide-mémoire Python.

FAQ sur l'aide-mémoire pygame

Cet aide-mémoire pygame est-il gratuit ?

Oui. Il est gratuit et sans inscription. Ajoutez-le à vos favoris ou imprimez-le en PDF depuis votre navigateur, et revenez dès que vous avez besoin de l'appel exact pour un groupe de sprites, un son ou un test de collision.

Cet aide-mémoire fonctionne-t-il avec pygame et pygame-ce ?
Oui. Les deux s'importent avec import pygame et partagent presque toute l'API. Les lignes marquées pygame-ce (FRect, scale_by, get_just_pressed, le retour à la ligne du texte et move_towards_ip) nécessitent pygame-ce, et tout le reste fonctionne avec l'un ou l'autre.
Pourquoi ma fenêtre pygame ne répond-elle pas ?
La boucle de jeu ne lit pas les événements. Appelez pygame.event.get() une fois à chaque frame, même si vous ignorez les événements, et terminez chaque frame par pygame.display.flip() et clock.tick(60).
Faut-il utiliser les événements ou key.get_pressed() pour les entrées ?
Utilisez un événement KEYDOWN pour les actions qui se produisent une fois par appui, comme sauter ou ouvrir un menu. Utilisez pygame.key.get_pressed() pour les actions qui durent tant qu'une touche est maintenue, comme marcher.
Illustration des langages de programmation de Coddy

Apprenez Pygame avec Coddy

Commencer