Lemmings

1. Descriptif

Ce projet est inspiré du jeu des lemmings. Dans ce jeu, les lemmings marchent dans une grotte représentée par une grille à deux dimensions dont chaque case est soit un mur soit un espace vide, un espace vide pouvant contenir au maximum un seul lemming à un instant donné. Les lemmings apparaissent l'un après l'autre à une position de départ et disparaissent lorsqu'ils atteignent une case de sortie. Chaque lemming a une coordonnée verticale et une coordonnée horizontale désignant la case dans laquelle il se trouve, ainsi qu'une direction( gauche ou droite). Les lemmings se déplacent à tour de rôle, toujours dans l'ordre correspondant à leur introduction dans le jeu, de la manière suivante :

  • Si l'espace immédiatement en-dessous est libre, le lemming tombe d'une case.
  • Sinon, si l'espace immédiatement devant est libre( dans la direction du lemming concerné), le lemming avance d'une case.
  • Enfin, si aucune de ces deux conditions n'est vérifiée, le lemming se retourne.

L'objectif est de voir évoluer une colonie de lemmings en utilisant le paradigme de la programmation objet.Pour cela , trois classes seront créées. Lemming pour les lemmings , Case pour les cases de la grotte et Jeu pour les données globales et le déroulement du jeu.

  • La classe principale Jeu contient:
    • Deux attributs :
      • Un attribut grottecontenant un tableau à deux dimensions de cases (une liste de listes).
      • Un attribut lemmingscontenant un tableau des lemmings actuellement en jeu (une liste).
        • Les méthodes suivantes :
      • __init()__ : la méthode constructeur initialise la grotte à partir d'une carte donnée par un fichier texte dans lequel le caractère # représente un mur et le caractère O la sortie.Les lemmings apparaissent dans une entrée qui est une case vide.
      • affiche(self) : affiche la carte avec les positions et direction de tous les lemmings en jeu.
      • tour(self) : fait agir chaque lemming une fois et affiche le nouvel état du jeu.
      • demarre(self) : lance une boucle infinie attendant des commandes de l'utilisateur :
        • 1 pour ajouter un lemming à l'entrée (si c'est possible)
        • La touche entrée pour jouer un tour.
        • q pour quitter.
  • La classe Lemming contient :

    • 4 attributs :
      • Deux entiers positifs ligne et colonne indiquant repsectivement la ligne et la colonne ou se trouve le lemming.
      • Un attribut direction indiquant la direction du lemming : $1$ pour la droite et $-1$ pour la gauche.
      • Un attribut jeu pointant sur l'instance de la classe Jeu pour laquelle le lemming a été créé, pour pouvoir accéder au terrain et à la liste des lemmings.
        • Les méthodes suivantes :
      • __init(self)__ : la méthode constructeur initialise les attributs précédents.
      • __str(self)__ renvoie:
        • > si le lemming se dirige vers la droite.
        • < si le lemming se dirige vers la gauche.
      • action(self) : déplace ou retourne le lemming.
      • sort(self) : retire le lemming du jeu.
  • La classe Case contient :

    • Deux attributs :
      • terrain contenant le caractère représentant la case( mur, vide ou sortie).
      • lemming contenant l'éventuel lemming présent dans cette case et None si la case est libre.
    • Les méthodes suivantes :
      • __init(self) : la méthode constructeur initialise les attributs.
      • __str(self) renvoie le caractère à afficher pour représenter cette case ou son éventuel occupant.
      • libre(self) renvoie True si la case peut recevoir un lemming (elle n'est ni un mur, ni occupée).
      • depart(self) retire le lemming present de la case
      • arrivee(self, lem) :place le lemming lem sur la case ou le fait sortir du jeu si la case est une sortie.

< A gauche : Le premier lemming entre en jeu 
 dans la grotte par la case vide du haut


                                   A droite > : Plusieurs lemmings en jeu

2. Travail

A faire :

  • Par groupe de deux ou trois, vous devez implémenter en python ce jeu.
  • Aucun module n'est à installer pour développer ce projet.
  • Les seuls modules autorisés sont éventuellement math et random.
  • Cette base pourra être améliorée avec des terrains plus étendus, de nouvelles possibilités d'interaction pour le joueur, comptage des lemmings sauvés, objectifs à atteindre, etc...

A rendre :

Le projet est collectif maisle rendu est individuel. Vous devrez rendre un dossier nommé Lemmings_NOM ou NOM est votre nom de famille, contenant:

  • Un sous dossier 'jeu' contenant :

    • Un fichier lemmings.py avec le code du jeu
    • Le ou les fichiers textes utilisés pour générer les niveaux.
  • Un fichier au format .pdf de 5 pages maximum contenant un rapport avec :

    • La répartition des tâches dans le groupe.
    • Les difficultés rencontrées et les solutions proposées.
    • L'explication d'une partie de code que vous aurez plus spécifiquement travaillé.