Snake sur Pygame

Les Makers vont apprendre à programmer un jeu de serpent en utilisant la bibliothèque Pygame, en gérant les mouvements du serpent, les collisions, la génération de la nourriture, l’affichage graphique et en implémentant des fonctionnalités de jeu telles que la détection de la victoire et la réinitialisation du jeu.

Objectifs pédagogiques

  • La gestion des mouvements du serpent et des événements clavier.
  • La détection et la gestion des collisions avec les murs et le serpent lui-même.
  • La génération aléatoire de la nourriture et sa gestion.
  • L’affichage graphique du serpent, de la nourriture et des éléments du jeu.

Compétences techniques

Compétences design

Compétences projet

La place dans le module

Cette activité vient après le jeu Memory et avant l’activité Labyrinthe

Jour 1

Jour 2

Jour 3

Jour 4

Jour 5

1h

🤩

30 min

🤩

30 min

🤩

1h

🤩

Matériel

  • Un ordinateur avec une connexion Internet
  • Un compte Replit

Déroulé de l'activité

Segmentation de l’activité

Détail de l’activité

Segment 1 (1 h) Base du jeu

 
1/ Introduction et objectif du projet (5 minutes) 

Explique aux makers le jeu snake que vous allez créer ensemble.

  • Fais une démo active du projet exemple pour les anims en partage d’écran.
    • N’oublie pas que quand tu lances le jeu, tu dois cliquer à l’intérieur de la fenêtre pour pouvoir ensuite te diriger à l’aide des fleches directionnelles
Le but est simple : Le serpent doit manger des pions qui lui servent de nourriture et le font grandir. On se sert des touches directionnelles pour diriger le serpent. Si l’on touche un bord de la fenêtre, on a perdu !
 

Anims :

  • C’est une activité guidée, pour qu’ils découvrent et comprennent la création d’un jeu Pygame. Tu dois créer un projet toi aussi, et coder avec eux !
  • Pour rappel, on peut vérifier que Pygame fonctionne grâce aux erreurs dans la console, et généralement tester le jeu que vers la fin de la programmation. Il est donc essentiel de prendre ton temps et bien les guider. T’assurer que c’est ok pour eux.
 
2/ ETAPE 1 : Création du projet et initialisation du jeu (15 minutes) 
Il est temps de créer un projet replit avec un template Pygame
Et le personnaliser avec l’initialisation de départ. Tu peux renvoyer les makers à la section « Code de départ dans replit » et le faire avec eux sur ton projet de démo active. 
Voici le code installé sur cette étape :
  • les imports 
  • pygame.int()
  • L’affichage de la fenêtre
    • On change le nom de la variable displaysurf par fenêtre
    • On stocke la largeur et la hauteur dans des variables pour les utiliser plus tard dans notre code
  • On donne un nom à notre jeu
  • On va aussi donner de suite les couleurs que l’on veut pour notre fenêtre, el serpent, et les pions à manger. (laisse leur le temps de se choisir des couleurs personnalisées)
  • On rectifie la boucle While avec un clic de barre espace en + devant toutes les lignes de la boucle for
  • On ajoute fenetre.fill() avant l’affichage de la fenêtre pour prendre en compte la couleur de fond que l’on a choisi
2/ ETAPE2 : Dimensions et nombre de cellules du jeu (10 minutes) 

On va initialiser 3 variables pour représenter la taille des cellules (comme une grille imaginaire qui va nous permettre de nous déplacer à l’intérieur de notre fenêtre de jeu)

3/ ETAPE3 : Contrôler la vitesse du jeu (10 minutes) 

Pour éviter que le serpent ne se déplace trop vite et que ce ne soit pas jouable, on va crée comme dans les défis pygame, une horloge pour maitriser la vitesse

On crée la variable de l’horloge pour contrôler la vitesse du jeu

Puis on l’appelle dans la boucle While, juste avant l’update. 

Elle est mise sur 5 pour avoir un serpent qui se déplace lentement. On pourra changer sa vitesse plus tard si on souhaiter corser le jeu !

3/ ETAPE4 : Coder les déplacements du serpent (20 minutes) 

On va créer une méthode pour positionner le serpent au début du jeu. 

  • On initialise le serpent avec 3 segments
    • Le serpent commence avec la tête à la position (9, 5) et deux segments supplémentaires vers la gauche
  • Puis la direction par laquelle il va partir au début du jeu

ATTENTION : La méthode depart_serpent() commence le jeu, donc la boucle while apparait DEDANS maintenant.

Fais tout de suite ton indentation, en ajoutant un TAB devant chaque ligne déjà posée dans la boucle while.

Puis on appelle la méthode depart_serpent(), à la toute fin de notre code et en dehors de la boucle while. 

C’est ce qui lancera le jeu et la boucle.

Le code doit toucher le bord de notre fichier sans indentation

Enfin : d

Dans la boucle while, on code les déplacements du serpent en cours de jeu

Les makers testent leur code et vérifie qu’ils n’ont pas d’erreur en console.

Segment 2 (30 minutes) : Gestion des déplacements du serpent

 
1/ ETAPE5 : Gérer les directions du serpent (30 minutes)

On initialise les 4 variables qui vont permettre au serpent de se déplacer en haut, en bas, à gauche et à droite.

Pour pimenter le jeu, on ne va pas autoriser le serpent à passer du haut vers le bas, et vice versa. Il devra forcément passer âr un côté d’abord ! On ne va pas non plus le laisser passer de gauche à droite ou vice et versa, il devra d’abord aller en haut ou en bas

Puis dans la boucle while, on gère les évènements suivant la touche directionnelle sur laquelle nous allons appuyer

 

Enfin : on dessine le serpent pour avoir un aperçu des déplacements et directions du serpent, que nous venons de programmer.

 

Les makers testent leur code, et doivent obtenir un serpent qui se dirige très bien, cependant pour le moment il grossit a chaque fois qu’il se déplace ! 

Segment 3 (30 minutes) Gestion de la nourriture et de la taille du serpent

 
1/ ETAPE6 : Gestion de la nourriture (25 minutes)

Maintenant, on va gérer les pions que va manger le serpent. Et c’est grâce à eux que l’on va pouvoir maitriser si le serpent grossit ou non. On lui dira de grossir, uniquement quand il mange. Sinon il se déplace et ne grossit pas !

On va placer le pion toujours de façon aléatoire. Pour cela on a donc besoin d’importer le module random

  • Et on va initialiser le pion dans la méthode depart_serpent()
    • On lui donne une position horizontale aléatoire, et une poisition verticale aléatoire

Et l’on ajoute une nouvelle condition pour lui dire : 

  • De générer un nouveau pion si le serpent mange celui en place 
    • On ne code rien d’autre, le serpent va grandir comme lors de notre test précédent
  • Sinon, si en se déplaçant le serpent n’a pas mangé de pion, alors on lui supprime un segment
    • C’est ce qui va l’empecher de grandir quand il ne mange rien !

Enfin : on peut dessiner le pion, sous le dessin du serpent

2/ ETAPE7 : Gestion des collisions avec les bords (5 minutes)

Les makers testent leur jeu.

Ils peuvent voir que le serpent se déplace bien, qu’il peut manger des pions, grossir quand il mange, et ne pas bouger de taille lorsqu’il ne mange pas. 

Par contre il traverse les bords de la fenêtre ! 
On va donc coder les collisions avec les bords, pour que le jeu recommence à zéro quand on les touche, car c’est perdu 

Pour cela, on code une condition qui définit les bords de la fenêtre, et on lui dit de recommencer une partie !

Les makers peuvent faire leur test final avant de passer à la suite, la personnalisation de leur projet.

Segment 4 (1 h) Personnaliser le jeu

1/ Ajouter du son (20 minutes) 

Apprends leur a ajouter du son dans leur jeu. Fais leur en démo active.
Dans le projet exemple aux anims, tu vas trouver les étapes pour mettre du son dans les commentaires ### BONUS ###

Pour apprendre à la faire et les guider, partage leur la ressources makers, sur le chapitre ajouter du son. Un véritable pas à pas vous y attend !

Laisse leur le temps de choisir leurs sons, puis code avec eux cette partie. Faites les teste jusqu’à réussite de tous.

2/ Personnalisation (30 minutes) 

Encourage-les à ajouter leur touche personnelle, à partager leurs expériences et à organiser une démonstration de leurs versions personnalisées du jeu Snake.  

Les Makers vont pouvoir personnaliser leur projet en semi-autonomie. Quelques idées pour enrichir leur jeu Snake :

  1. Ajouter un son lorsque le serpent mange un pion
  2. Créee un pion d’une autre couleur, qui par exemple augmente la vitesse de jeu du serpent.
  3. Niveaux de difficulté : Proposez différents niveaux de difficulté avec des variations de vitesse, de taille d’écran ou d’obstacles.
  4. Peaufiner le visuel actuel etc..
ANIMS : guide les et aide les si ils ont besoin de toi. Si tu as du temps, tu peux toi aussi créer du bonus en partage d’écran sur ton projet, et leur donner des idées et l’exemple du code !
 
TIMING : Si tu manques de temps, tu peux en récupérer sur cette partie. Si au contraire tu as de l’avance, laisse les pratiquer plus longtemps !
2/ Partage de projets (10 min)
Prends le temps de faire un partage de projets de tes makers, en partage d’écran, et voir leurs personnalisations.

Tips 

RAS

Retour en haut