~ / teaching / Python / tps / 3-snake /

TP3 - Snake

© 2010—2012 - Renaud Blanch

Le but de ce TP est de mettre en application les principes de la programmation impérative avec Python.

Vous allez réaliser une version du jeu Snake en mode texte. Pour cela, vous allez utiliser le module curses qui permet d'utiliser un terminal comme une matrice de charactères.

curses

Lisez pour commencer la documentation du module curses fourni en standard par Python pour vous faire une idée des fonctions offertes et du style de programmation. Vous pourrez notamment vous inspirer du HowTo, Curses Programming with Python.

Récupérez le squelette de programme snake.py. Lisez son code, vérifiez que quand il est exécuté un cadre s'affiche autour du terminal et qu'un caractère est affiché au milieu de la fenêtre. Modifiez le programme pour que le caractère se déplace lorsqu'on utilise les flèches du clavier.

Gameplay

Modifiez le programme pour que le serpent soit créé en bas à gauche de l'écran, qu'il fasse 7 caractères de long et qu'il soit dirigé vers la droite. Faites en sorte qu'il avance d'un caractère à chaque tour de boucle et qu'il tourne à sa droite (resp. gauche) quand on utilise la flèche de droite (resp. gauche).

Écrivez une fonction inside(head, screen_size) qui vérifie si la tête du serpent est toujours dans l'écran. Terminez le jeu en affichant un message GAME OVER clignotant au centre de l'écran jusqu'à ce que le joueur appuie sur une touche lorsque le serpent sort de l'écran ou qu'il entre en collision avec lui-même.

Créez une fonction create_food qui renvoie les coordonnées d'un caractère au hasard en vérifiant qu'il ne fait partie ni des bords, ni du serpent. Utilisez cette fonction pour créer une case nourriture : lorsque le serpent passe dessus, il la mange (il faut alors en tirer une nouvelle) et il s'allonge d'un caractère.

Ajoutez l'affichage d'un score en haut à gauche : il commence à zéro et s'incrémente à chaque fois que le serpent mange de la nourriture.

Bonus

Améliorez le gameplay en permettant par exemple de charger des niveaux (fichiers texte dans lesquels les caractères non-blancs constitueront des murs). Toute autre idée est la bienvenue.

mise à jour : 31 octobre 2012