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

✏️ TP 6 - Prog. objets niv.4

Ce TP est la suite directe du TP 5.

Question 1

On veut qu'il soit impossible pour un Personnage de sortir du Terrain, il faut le restreindre dans l'aire de jeu.

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

  1. chaque Personnage aura besoin de savoir sur quel Terrain il se trouve, donc ajouter un attribut (par exemple terrain) dans le constructeur de Personnage. Le Terrain doit être spécifié au moment de la création du perso, donc ajouter également un paramètre au constructeur, et initialiser la valeur de l'attribut avec la valeur du paramètre.
  2. Jusqu'à présent, le déplacement du Personnage se fait en modifiant sa position depuis la classe Jeu, mais cela n'est pas bon car ce n'est pas la responsabilité de Jeu. Jeu devrait plutôt demander au Personnage de se déplacer en appelant une de ses méthodes (de la classe Personnage), et ensuite c'est le perso lui-même qui ferait son propre déplacement selon sa propre logique. Ainsi il pourrait éviter de sortir du Terrain par exemple, mais on pourrait aussi ajouter d'autres contraintes facilement plus tard.

    Ajouter dans la classe Personnage une méthode pour se déplacer. La méthode prend 2 paramètres (en plus de self):

    1. un int pour le nombres de cases de déplacement horizontalement sur le terrain du perso
    2. un second int pour verticalement

    C'est dans cette méthode qu'on empêche le Personnage de sortir de son terrain.

  3. Dans méthode démarrer de la classe Jeu, utiliser la nouvelle méthode de Personnage pour déplacer le perso joueur.
  4. Vérifier que ça fonctionne: le perso ne devrait plus pouvoir sortir du terrain.

Question 2

On veut ajouter des murs sur notre terrain. Pour l'instant ils ne bloquent pas le perso du joueur.

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

  1. Ajouter pour chaque Terrain un attribut qui est un tableau à 2 dimensions, dans lequel vous stockerez si oui ou non chaque case contient un mur ou pas. Un mur (et l'absence de mur) peut être représenté dans chaque case du tableau par un int (0 = un mur, autre valeur = pas de mur par exemple) ou un bool (True = un mur, False = pas de mur), au choix.

    On peut considérer qu'un Terrain ne contient aucun mur après sa création, ils seront ajoutés un par un en modifiant directement son tableau de murs.

  2. Modifier la méthode déssiner de la classe Terrain pour prendre en compte les murs et les dessiner. Vous pouvez utiliser deux fois le caractère "█" pour faire un carré dans la console, comme ceci: ██. Les cases vides sont toujours dessinées avec le caractère "·" à ne pas confondre avec le point "."

    Quand un Personnage se trouve sur la même case qu'un mur, c'est lui qui est dessiné, pas le mur, pour éviter de perdre de vue le perso du joueur.

  3. Après la création du Terrain, en bas du programme, lui ajouter quelques murs avant de lancer le Jeu, et vérifier que vous les voyez. Mais vous pouvez passer à travers pour le moment.

Question 3

Maintenant on veut empêcher le perso du joueur de passer à travers les murs.

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

  1. Ajouter les contraintes nécessaires, dans la méthode pour se déplacer de la classe Personnage, que vous avez ajoutée précédemment.
  2. Sur votre Terrain, créez une pièce, des murs et divers obstacles.
  3. Vérifiez que le perso du joueur est bloqué par les murs.