Algo. et prog. 2 en
Logo de Python
Arnaud COUTURIER - Python 3.10

✏️ TP 7 - Prog. objets niv.5

Ce TP est la suite directe du TP 6.

Question 1

Il est temps d'ajouter quelques ennemis sur notre Terrain. Ils ne font rien, et ne bloquent pas le joueur pour le moment, mais ils sont affichés.

Faites selon la façon qui vous convient, ou utilisez la façon ci-dessous:

  1. Le Terrain et le Jeu doivent avoir chacun leur propre liste des Personnages ennemis: le Terrain pour pouvoir les dessiner, et le Jeu pour les faire saluer et ainsi afficher leurs détails (nom, vie etc...). Donc ajouter les attributs là il faut. Les ennemis doivent être ajoutés après l'instanciation du Jeu et du Terrain. Si on ajoute un ennemi au Terrain, attention à l'ajouter également au Jeu, pour que le dessin du terrain et les salutations correspondent bien.
  2. La création d'une méthode avoir_ennemi_a_position() dans la classe Terrain devrait vous aider. Elle prend en paramètres (en plus de self) le x et y d'une case sur laquelle vous souhaitez savoir si un ennemi s'y trouve, et la méthode renvoie le premier ennemi sur la case en question s'il y en a un ou plusieurs, None sinon. Elle sera utile pour dessiner le Terrain, et dans la classe Personnage plus tard.
  3. Pour vérifier que ça fonctionne: ajouter 2 ennemis au terrain, chacun avec un nom et un symbole différent pour leur affichage sur le terrain, vous les voyez dans le Terrain, vous voyez leur salutation à chacun, et le joueur peut passer à travers.

Question 2

Désormais le joueur peut attaquer et tuer les ennemis en se déplaçant vers eux. Les dégâts sont affichés pendant une ou deux secondes. Le jeu s'arrête lorsque tous les ennemis sont vaincus et un message de victoire est affiché. Si le joueur quitte avant, le message de game over est affiché.

Faites selon la façon qui vous convient, ou utilisez la façon ci-dessous:

  1. Faites en sorte que les ennemis bloquent le joueur. Cela peut être fait dans la méthode de déplacement dans la classe Personnage, et vous pouvez aussi utiliser la méthode avoir_ennemi_a_position() de la classe Terrain pour facilement avoir l'ennemi (s'il y en a un) qui se trouve sur la case de destination du perso joueur quand celui-ci se déplace.
  2. Le perso joueur attaque les ennemis vivants qui se trouve sur son chemin, mais ignore les morts.
  3. L'affichage des dégâts est effacé à chaque tour (à cause de os.system()) et il est donc impossible de lire ce qui se passe (quel perso attaque qui). Pour corriger ça, utiliser la fonction sleep() du module time. Elle prend un paramètre: le nombre de secondes à attendre. Quand cette fonction est appelée, le programme se met en pause pour la durée demandée, puis reprend à la ligne suivante de l'appel de la fonction.
  4. Les Personnages morts sont affichés différemment sur le Terrain par rapport à quand ils sont vivants, donc il vous faut un second caractère d'affichage pour chaque perso.
  5. Afficher un message de victoire ou de game over à la fin de la partie, selon comment le jeu se termine. De plus, en cas de victoire, attention à bien afficher tout correctement pour le dernier affichage du Terrain: tous les ennemis sont bien affichés comme morts sur le Terrain et dans leur salutation.