Pygame Snake
Jeu du Snake avec le module Pygame
Pygame est une librairie Python apportant la SDL (Simple Directmedia Library), une bibliothèque libre multi-plateformes permettant la gestion du multimédia dans la programmation. Utile pour la programmation de jeux avec graphiques
Ce projet consiste à realiser (en partie) le jeu Snake. Il traite des types abstraits personnalisés.
Le Snake est un genre de jeu vidéo dans lequel le joueur dirige un serpent qui grandit et constitue ainsi lui-même un obstacle. Ce jeu est apparu pour la première fois en 1976 (Editeur Gremlin) sous le nom de Blockade. Les consoles de jeu à l’époque possédaient un CPU de 8-bit (MOS Technology 6507 @ 1.19 MHz) et une RAM de 128 octets. Depuis, le jeu a connu de nombreux clones.
snake retro game
Le type serpent proposera pour interface les fonctions suivantes:
- affiche
- tete
- ajoute_tete
- supprime_queue
Une version de ce projet sur microbit est accessible ici.
Editeur
Le module Pygame est installé sur votre ordinateur. Utilisez un IDE python comme IDLE ou pyzo.
Script initial
Le script suivant donne les éléments de base du programme.
Copier-coller celui-ci dans la fenêtre du fichier main.py.
Creation d’un type abstrait serpent
Le serpent est un objet qui stocke les données d’une certaine manière, et qui propose quelques fonctions utiles pour interragir avec lui (une interface). Il s’agit donc d’un type abstrait.
Pour représenter le serpent, comme dans le jeu snake, les coordonnées des pixels du serpent seront stockées dans une Liste [(x1,y1),(x2,y2),...].
Interface
Vous allez programmer chaque fonction de l’interface à partir des renseignements suivants. Ces fonctions seront placées dans le proggramme, avant la boucle principale.
- fonction
affiche
L’affichage de chaque pixel du serpent necessite une boucle bornée:
- fonction
tete
- fonction
ajoute_teteIl peut être necessaire d’ajouter un pixel au serpent. Celui-ci s’ajoutera à la fin de la liste de coordonnées:
- fonction
supprime_queue
A chaque déplacement, cela ajoute un pixel à la fin de la liste. Il s’agit de la tête du serpent. Il faut alors retirer le premier pixel (serpent[0]) si l’on veut que sa longueur reste constante.
deplacement du serpent vers le bas
Dans le programme main.py
-
Définissez une variable qui stocke les coordonnées du serpent:
serpent = [(400,200),(400,210), (400,220), (400,230)] -
Dans la boucle principale:
- recuperer les coordonnées x1 et y1 de la tête du serpent (utiliser la fonction
tete) - modifier les valeurs de x1 et y1 en fonction de la direction du deplacement
- Ajoutez des conditions pour que le pixel ne sorte pas de l’écran. On peut faire changer de direction lorsque le bord de l’écran est touché par le pixel:
if x1 > 800 or x1 < 0: ... - Ajouter les coordonnées du pixel x1, y1 à la fin de la liste
serpent(ajoute_tete) - Supprimer le premier pixel du serpent, celui placé en
serpent[0]avecsupprime_queue - Afficher le serpent une fois ses coordonnées recalculées avec la fonction
affiche.
- recuperer les coordonnées x1 et y1 de la tête du serpent (utiliser la fonction
Le jeu devrait être à present fonctionnel.
Créer un module
Vous pouvez maintenant améliorer la mise en forme de votre programme: Mettre les fonctions de l’interface dans un nouveau fichier.
Dans le fichier que vous nommerez utils.py, déplacer les fonctions: tete, ajoute_tete, et supprime_queue. (Sur Trinket, il suffira d’ajouter un nouvel onglet dans l’editeur python et de nommer cet onglet: utils.py).
Pour faire référence à ces fonctions, il faudra ajouter la ligne suivante dans le programme main.py:
Questions
- Expliquer: Comment le programme gère les déplacements du serpent?
- Cette gestion des déplacements, est-elle facilitée par l’interface du type serpent? Si oui, comment?
- Quelles fonctionnalités du jeu manque-t-il pour que celui-ci soit complet?
- Si vous deviez créer le jeu complet:
- quelles fonctions ajouteriez vous à l’interface serpent?
- Quelle autre structure de données envisageriez-vous?
Correction fichier main.py
Correction fichier utlis.py
Microbit: Petit jeu de type Snake en 2D
Se rendre à la page du TP de term NSI et approfondir la seance.
Liens
Ce TP est inspiré de la page www.edureka.co