🐍projets

Creer un jeu Snake en Python avec Pygame

30 mars 2026 5 min de lecture

Pourquoi programmer Snake pour la NSI ?

Tu cherches un projet Python à la fois ludique et formateur pour la spécialité NSI ? Le jeu Snake est un excellent choix ! Ce classique intemporel te permettra de consolider plusieurs notions clés du programme :

  • La programmation orientée objet (POO) : pour modéliser le serpent, la pomme et le jeu lui-même.
  • La gestion des événements : pour capturer les touches du clavier et diriger le serpent.
  • Les boucles et conditions : au cœur de la logique du jeu.
  • L'utilisation de bibliothèques externes : ici, Pygame pour l'affichage graphique et la gestion du temps.

En plus d'être un excellent exercice, tu auras à la fin un jeu fonctionnel dont tu pourras être fier. C'est aussi l'occasion parfaite de personnaliser ton projet (changer les couleurs, ajouter des obstacles, un système de niveaux...) pour impressionner ton professeur !

Mise en place : installer Pygame et structurer le projet

Avant de coder, il faut préparer ton environnement. Si tu n'as pas encore Pygame, ouvre ton terminal (ou l'invite de commandes) et tape :

pip install pygame

Ensuite, crée un nouveau fichier Python, par exemple snake_game.py. Nous allons structurer notre code de manière claire. Une bonne pratique en NSI est de séparer les responsabilités. Nous allons créer trois grandes classes :

  • Snake : gère le corps du serpent, ses déplacements et sa croissance.
  • Food (la nourriture) : gère l'apparition aléatoire de la pomme.
  • Game : la classe principale qui orchestre tout, gère la fenêtre Pygame, la boucle de jeu et les collisions.

Cette approche modulaire est essentielle pour créer des programmes lisibles et maintenables, une compétence très valorisée en NSI.

Créer les classes Snake et Food

La classe Snake

Le serpent sera représenté par une liste de segments (des tuples de coordonnées x, y). Nous initialisons le serpent avec une tête et quelques segments de corps. La direction est gérée par un vecteur (dx, dy).

Les méthodes principales de cette classe seront :

  • move() : ajoute une nouvelle tête dans la direction actuelle et retire la queue (sauf si le serpent a mangé).
  • grow() : empêche de retirer la queue au prochain mouvement, ce qui allonge le serpent.
  • draw() : utilise Pygame pour dessiner chaque segment à l'écran.
  • check_collision() : vérifie si la tête touche les bords ou le corps du serpent.

La logique de déplacement est un parfait exercice sur les listes en Python !

La classe Food

Beaucoup plus simple, cette classe a pour rôle de se placer aléatoirement sur la grille. Sa méthode principale est randomize_position(), qui utilise le module random de Python pour générer des coordonnées. Il faut aussi s'assurer que la nourriture n'apparaisse pas sur le serpent. Nous verrons cela dans la boucle principale.

La boucle principale du jeu avec Pygame

C'est le cœur battant de ton application. La boucle de jeu Pygame suit toujours le même schéma, que tu retrouveras dans presque tous tes projets :

  1. Initialisation : création de la fenêtre, de l'horloge pour régler les FPS, et des instances de tes classes (Game, Snake, Food).
  2. Boucle principale (while running) :
    • Gestion des événements : avec pygame.event.get(), on écoute la fermeture de la fenêtre et les touches pressées (flèches directionnelles).
    • Mise à jour de la logique : on appelle snake.move(), on vérifie les collisions avec la nourriture (si oui, on fait grandir le serpent et on repositionne la nourriture) et avec les bords/le corps (Game Over).
    • Rafraîchissement de l'écran : on remplit l'écran d'une couleur, on dessine le serpent et la nourriture, et on affiche éventuellement le score.
    • Contrôle de la vitesse : clock.tick(10) limite le jeu à 10 images par seconde, ce qui donne une vitesse de jeu classique pour Snake.

Cette structure est fondamentale. La comprendre, c'est avoir les clés pour créer bien d'autres jeux en 2D.

Aller plus loin : idées d'amélioration pour ton projet NSI

Une fois que ton jeu Snake de base fonctionne, tu peux le rendre unique et démontrer tes compétences avancées. Voici quelques pistes :

  • Ajouter un menu de démarrage et un écran de Game Over avec des boutons.
  • Implémenter un système de score qui s'affiche à l'écran et un meilleur score sauvegardé dans un fichier texte.
  • Créer des niveaux : ajoute des obstacles immobiles que le serpent doit éviter.
  • Personnalisation graphique : remplace les carrés de couleur par des sprites (petites images).
  • Augmenter la difficulté progressive : la vitesse du serpent peut augmenter légèrement tous les 5 points.

Ces améliorations touchent à des concepts importants comme la persistance des données (fichiers), la gestion d'états (menu, jeu, fin) et la complexité algorithmique. Elles feront toute la différence dans ton projet final !

Conclusion et ressources

Félicitations ! En suivant ce guide, tu as construit un jeu vidéo complet en Python. Tu as manipulé des structures de données (listes), utilisé une bibliothèque graphique (Pygame) et implémenté une logique de jeu solide. Ce projet est une vitrine parfaite de tes compétences en NSI.

N'hésite pas à explorer la documentation officielle de Pygame pour découvrir d'autres fonctionnalités (sons, polices de caractères...). Le code source complet de ce projet sera bientôt disponible dans la section "Projets" du site. Bonne continuation dans ton apprentissage de la programmation !

📚 Pour aller plus loin

Questions fréquentes

Je débute en Pygame, ce projet est-il trop difficile pour moi ?

Pas du tout ! Ce tutoriel est conçu pour les débutants en Pygame. Nous partons des bases (installation, création de fenêtre) et avançons pas à pas. Si tu connais les bases de Python (variables, boucles, fonctions, listes), tu es parfaitement capable de le suivre. C'est en faisant ce genre de projet concret que l'on apprend le mieux.

Mon serpent peut traverser les murs, comment je le corrige ?

Cela signifie que la vérification de collision avec les bords n'est pas active ou contient une erreur. Dans la classe `Snake`, la méthode `check_collision` doit comparer les coordonnées de la tête (`self.body[0]`) avec les limites de l'écran (par exemple, si `x < 0` ou `x >= largeur_ecran` ou `y < 0` ou `y >= hauteur_ecran`). Assure-toi que cette méthode est bien appelée dans la boucle principale et qu'elle déclenche correctement l'état "Game Over".

La nourriture apparaît parfois sur le corps du serpent, comment l'éviter ?

Il faut ajouter une vérification après avoir généré les coordonnées aléatoires de la nourriture. Dans la méthode `randomize_position` de la classe `Food`, ou juste après son appel dans la boucle principale, tu dois t'assurer que la nouvelle position (`self.position`) n'est pas contenue dans la liste `snake.body`. Tu peux utiliser une boucle `while` pour regénérer la position tant qu'elle est occupée par le serpent.

Puis-je présenter ce projet pour mon Grand Oral du bac ?

Absolument ! Un projet comme Snake est un excellent support pour le Grand Oral. Tu peux l'utiliser pour illustrer ta maîtrise de la spécialité NSI. Prépare-toi à expliquer les concepts algorithmiques clés (gestion de liste pour le serpent, logique de collision, boucle d'événements), à montrer ton code et à discuter des améliorations que tu as apportées. Cela démontre concretement tes compétences en résolution de problèmes.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
Snake PythonPygame projet
Pixel