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é
- Segment 1 (1 h) : Base du Jeu
- Segment 2 (30 min) : Gestion des déplacements du serpent
- Segment 3 (30 min) : Gestion de la nourriture et de la taille du serpent
- Segment 4 (1 h) – Personnaliser le jeu
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
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)
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.
- 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 :
- Ajouter un son lorsque le serpent mange un pion
- Créee un pion d’une autre couleur, qui par exemple augmente la vitesse de jeu du serpent.
- Niveaux de difficulté : Proposez différents niveaux de difficulté avec des variations de vitesse, de taille d’écran ou d’obstacles.
- Peaufiner le visuel actuel etc..