====== Faire tourner des jeux pygame sur une page web ====== ===== Comparatif des moteurs ===== * pygbag : https://pypi.org/project/pygbag/ * démo : https://pmp-p.github.io/pygame-arachnoids-wasm/ * performances : ça a l'air fluide, mais ça consomme pas mal de CPU, même pour de petits jeux * trinket : https://trinket.io/features/pygame (démo ici) * performances : catastrophiques, c'est lent ===== Installer et tester pybag ===== * pip install pygbag --user --upgrade * Rajouter ce dossier dans le path : * Menu démarrer > Modifier les variables d'environnement système (taper "PATH" suffit) * Dans la fenêtre Propriétés système > Paramètres systèmes avancés > Variables d'environnement * Dans la partie Variables utilisateurs : modifier Path * Rajouter ("Nouveau") : C:\Users\micro\AppData\Roaming\Python\Python311\Scripts * Redémarrer Visual Studio Code * La commande pygbag devrait à présent fonctionner * Attention : votre programme doit gérer l'asynchrone. Un programme graphique minimal pour pygbag (dessine juste des rectangles jusqu'à ce qu'on appuie sur la barre espace), doit être codé dans un fichier nommé main.py : import asyncio import random import pygame pygame.init() screen = pygame.display.set_mode((1280, 768)) pygame.mouse.set_visible(False) async def main(): #def main(): running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: running = False pygame.draw.rect(screen, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), pygame.Rect((random.randint(0, 1279), random.randint(0, 767)), (random.randint(0, 1279), random.randint(0, 767)))) pygame.display.flip() await asyncio.sleep(0) pygame.quit() #main() asyncio.run(main()) Note : j'ai laissé en commenté les appels "non asynchrones" qu'on aurait tendance à mettre pour un exécutable local. Mais en réalité le mode asynchrone fonctionnera aussi pour un programme interprété dans une fenêtre d'exécution. * Pour exécuter le programme ci-dessus : ligne de commande pygbag main.py * Un mini-serveur web sera ensuite lancé en attente sur le port 8000 (vérifier le port en texte de la ligne de commande) * http://localhost:8000/ permet ensuite d'exécuter le jeu depuis un navigateur * Le contenu de build/web peut être déployé sur un serveur web pour être exécuté depuis n'importe où