Publier avec pygbag
Tu as fait un jeu sympa et maintenant tu veux le partager avec le reste du monde. Avec pygbag, tu transformes ton jeu Pygame en une page web que tout le monde peut jouer dans le navigateur. Pas d’installation, pas d’embêtements. Tu envoies un lien et c’est tout !
Qu’est-ce que pygbag ?
Pygbag compile ton code Python en WebAssembly et l’emballe avec un petit runtime Pygame qui tourne dans le navigateur. Le joueur n’a rien à installer : il ouvre la page et il joue. C’est donc parfait pour partager ton jeu avec tes amis, ta famille ou sur itch.io.
Limitations
Pygbag ne fonctionne pas avec Pgzero (la bibliothèque simplifiée des premières sessions). Il te faut du vrai Pygame, donc c’est disponible à partir de la session 4 et après.
En plus, quelques choses ne marchent pas dans le navigateur :
- Pas d’accès au disque : tu ne peux pas lire ni écrire de fichiers depuis le jeu.
- Pas de threads : n’utilise pas
threadingnimultiprocessing. - Pas d’appels bloquants : tout doit se passer en asynchrone (voir ci-dessous).
Installation
Dans un projet uv :
uv add pygbagOu dans Thonny via le gestionnaire de paquets :
pip install pygbagPréparer ton projet
Pygbag exige que ta boucle principale soit asynchrone. Ça veut dire : ta fonction main devient async def main(), et à chaque itération de frame tu ajoutes await asyncio.sleep(0). Cette seule ligne donne au navigateur la chance de respirer entre les frames.
Ci-dessous, tu trouves une structure de base prête à l’emploi : structure de main.py prête pour pygbag :
import asyncio
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
async def main():
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 60))
pygame.display.flip()
clock.tick(60)
await asyncio.sleep(0) # requis pour pygbag
asyncio.run(main())Adapte le code de ton propre jeu pour que tout se trouve dans async def main(), et n’oublie pas await asyncio.sleep(0) en bas de la boucle while.
Compiler
Dans ton terminal, va dans le dossier avec main.py et lance :
uv run python -m pygbag --build main.pyLe résultat apparaît dans le dossier build/web/. Ce dossier contient tout ce qu’il faut pour héberger ton jeu.
Tester en local
Tu veux d’abord voir si ça marche avant de publier ? Utilise la même commande sans --build :
uv run python -m pygbag main.pyPygbag démarre un serveur web local sur http://localhost:8000. Ouvre ce lien dans ton navigateur et tu joues à ton propre jeu, exactement comme les autres le verront.
Publier
Si tout fonctionne, il y a deux façons de partager ton jeu :
- Via le coach : zippe le dossier
build/web/et donne le fichier zip à ton coach. C’est lui qui s’occupe de l’hébergement. - Via itch.io : crée un compte gratuit sur itch.io, crée un nouveau projet en jeu HTML et téléverse le zip de
build/web/. En quelques minutes, ton jeu a sa propre page que tout le monde peut visiter !
Félicitations ! Tu viens de publier un vrai jeu web. 🎮