Calamars et Pythons

Créons un jeu 2D avec arcade

Introduction

Sommaire

  • Introduction
  • arcade
  • Le jeu
  • Programmons !
  • Conclusion

Vincent Poulailleau

  • Indépendant
  • Formateur (Python mais pas que)
  • Enseignant bac+1 à bac+5 (Python mais pas que)
  • Ingénieur (Python mais pas que)
  • @vpoulailleau un peu partout sur internet
qrcode https://www.linkedin.com/in/vpoulailleau/

www.linkedin.com/in/vpoulailleau/

qrcode https://www.lecalamar.fr/posts/2025-11-02-pyconfr-calamars-et-pythons/

www.lecalamar.fr/posts/2025-11-02-pyconfr-calamars-et-pythons/

Qualité du code

Pour rendre le code accessible au plus grand nombre

  • Code assez simple
  • Pas de docstrings
  • Pas d'annotations de type
  • Pas de TDD
  • Pas de tests autres que manuels
  • Pas de CI/CD
  • Pas de Clean Architecture

Mais en vrai, la qualité c'est important !

Sacré calamar !

Mais pourquoi avoir choisi de parler de calamar ?

Pour une raison très personnelle

arcade

arcade

Bibliothèque Python pour créer des jeux

Orientée 2D

Tourne sous Windows, Linux, Mac, Raspberry Pi…

API simple et bien documentée

Créé par Paul V. Craven quand il donnait des cours

https://arcade.academy

arcade pygame
Licence MIT Licence LGPL
2016 (9 ans) 2000 (25 ans)
OpenGL 3.3+ / pyglet SDL 2
Annotations de type Pas d'annotations
Gestion rotation/scale Support Android
Tiled Map Editor

Comparaison de FPS sur des sprites en mouvement

FPS comparison

Sacré calamar !

  • Le calamar a 3 cœurs
    • Deux cœurs branchiaux
    • Un cœur systémique

Sacré calamar !

une bande de potes calamars

Une bande de potes

Le jeu

calp

Calamars et Pythons

Installez uv

  • https://docs.astral.sh/uv/getting-started/installation/

Lancez le jeu

  • uvx calp

D'autres méthodes existent

Règles du jeu

Nous sommes un calamar

Nous adorons Python plus que tout

Des icônes de langages de programmation apparaissent

Attrapons les icônes Python (+3 points)

Repoussons les autres (-1 point par icône non repoussée)

Parties de 30 secondes

Règles du jeu

rules

Sacré calamar !

Le calamar n'a que deux tentacules

Mais il a 8 ou 10 bras

un calamar

Trève de blabla, programmons !

Création du projet

pyproject.toml

README.md

.python-version

src/calp/__init__.py

Première exécution

Deuxième exécution

pre-commit

  • Lance des outils avant chaque commit
  • pre-commit.com
  • Formateur de code
  • Linter

.pre-commit-config.yaml

pyproject.toml

pre-commit + ruff

pre-commit + ruff

Sacré calamar !

Le calamar est apparu il y a environ 200 000 000 ans

Homo sapiens a environ 300 000 ans

Installation d'arcade

Installation d'arcade

Ouverture d'une fenêtre

arcade ne sait ouvrir qu'une fenêtre à la fois

Vidons le fichier src/calp/__init__.py

Créons le fichier src/calp/main.py

Ouverture d'une fenêtre

Une meilleure fenêtre

Créons src/calp/constants.py

Une meilleure fenêtre

Modifions src/calp/main.py

Une meilleure fenêtre

Créons src/calp/main_window.py

Sacré calamar !

  • Le calamar a un cerveau torique
    • Autour du tube digestif
    • Il meurt s'il fait de trop grosses bouchées

Icône dans la barre des tâches

Création d'une aborescence pour les médias

Icône dans la barre des tâches

Modifions src/calp/main_window.py

Le grand plongeon

Ajoutons des vagues, nous sommes dans l'eau

Modifions src/calp/main_window.py

Le grand plongeon

Modifions src/calp/main_window.py

Vertex Buffer Object

Limitez les communications entre CPU et GPU

=> Performance quand beaucoup de tracés

VBO

Vertex Buffer Object

Modifions src/calp/main_window.py

Vertex Buffer Object

Modifions src/calp/main_window.py

Sacré calamar !

  • Les deux tentacules servent à attrapper les proies
    • Le volume d'un tentacule est constant
    • Sur contraction rapide de muscles
      • Le diamètre diminue de 20%
      • La longueur augmente de 70%

Ajoutons un corps au calamar

Modifions src/calp/main_window.py

Ajoutons un corps au calamar

Créons src/calp/calamar.py

Ajoutons un visage au calamar

Modifions src/calp/calamar.py

Sacré calamar !

La plupart des calamars font moins de 60 cm de long.

Certains atteignent 13 m.

D'autres pèsent une demie tonne.

Ajoutons les bras au calamar

Modifions src/calp/calamar.py

Animons les bras

Modifions src/calp/calamar.py

Sacré calamar !

gravure de calamar

Gravure d'un calamar géant échoué en 1877 sur la baie Trinity, à Terre-Neuve

Ajoutons les ventouses

Modifions src/calp/calamar.py

Selection des bras au clavier

Modifions src/calp/main_window.py

Selection des bras au clavier

Modifions src/calp/calamar.py

Mouvement des bras au clavier

Modifions src/calp/calamar.py

Sacré calamar !

Certains calamars volent

Ou plutôt sautent, au-dessus de l'eau, sur plus de 30 m !

Utilisons la souris

Modifions src/calp/main_window.py

Utilisons la souris

Modifions src/calp/calamar.py

Ajoutons les icônes à attrapper

Modifions src/calp/main_window.py

Ajoutons les icônes à attrapper

Ajoutons src/calp/icon.py

Sacré calamar !

Le calamar est comestible

Alors souvent appelé encornet

Détection de collision de sprite

Modifions src/calp/main_window.py

Détection de collision de sprite

Modifions src/calp/calamar.py

Détection de collision de sprite

Modifions src/calp/icon.py

Affichons le score

Modifions src/calp/main_window.py

Affichons le score

Modifions src/calp/calamar.py

Affichons le score

Créons src/calp/score.py

Sacré calamar !

des calamars se font dorer la pilule

Des calamars se font dorer la pilule

Affichons les high scores

Modifions src/calp/score.py

Affichons les high scores

Modifions src/calp/main_window.py

Sacré calamar !

des calamars prêts à déguster

Des calamars prêts à être dégustés

Ajoutons du son

Ajoutons du son

Modifions src/calp/main_window.py

Ajoutons du son

Modifions src/calp/calamar.py

Un petit shader pour la route

Ajout d'un effet spécial (feu d'artifice quand on repousse une icône)

Basé sur un fragment shader OpenGL

Sujet encore expérimental dans arcade

Un petit shader pour la route

Modifions src/calp/main_window.py

Un petit shader pour la route

Ajoutons src/calp/assets/firework.glsl

Un petit shader pour la route

Ajoutons src/calp/fireworks.py

Un petit shader pour la route

Modifions src/calp/calamar.py

Sacré calamar !

Le calamar peut être sculpté

le calamar peut être sculpté

Distribuons le jeu

Utilisons PyInstaller

PyInstaller permet de créer un fichier exécutable contenant tout notre projet

Résultat dépendant de l'OS

Distribuons le jeu

PyInstaller a besoin de configuration pour les cas particuliers

Ajoutons hook-arcade.py

Distribuons le jeu

Exécutons PyInstaller

Conclusion

Bilan

arcade est assez agréable à utiliser

arcade est bien documenté

Nous avons vu les notions de base, il est possible d'en savoir plus dans la documentation officielle

Que de chemin parcouru !

  • Création d'un projet
  • Installation d'arcade
  • Ouverture d'une fenêtre
  • Icône dans la barre des tâches
  • Tracé de formes géométriques
  • Animation du jeu
  • Tracé de sprites

Que de chemin parcouru !

  • Gestion du clavier
  • Gestion de la souris
  • Détection de collision de sprites
  • Tracé de textes
  • Modes de fonctionnement (View)
  • Lecture de sons
  • Utilisation de shader
  • Distribution du jeu

Sacré calamar !

Mais au fait, pourquoi tous ces calamars ?

  • C'est mon animal préféré :
  • C est la 1ière lettre du prénom de mon 1ier enfant
  • A est la 1ière lettre du prénom de mon 2ème enfant
  • L est la 1ière lettre du prénom de mon 3ème enfant
  • AMAR est le nom de ma compagne
qrcode https://www.lecalamar.fr/posts/2025-11-02-pyconfr-calamars-et-pythons/

www.lecalamar.fr/posts/2025-11-02-pyconfr-calamars-et-pythons/

qrcode https://www.linkedin.com/in/vpoulailleau/

www.linkedin.com/in/vpoulailleau/