# Voiture

class `Voiture.``Voiture`(x, y, lettre, sens, taille)
  Variables

    - x (int) – La position en abscisse

    - y (int) – La position en ordonnée

    - lettre (str) – La lettre qui identifie la voiture

    - sens (Sens) – Le sens de la voiture : horizontale ou verticale

    - taille (Taille) – La taille de la voiture : deux ou trois

    - case (list) – La liste des cases de la grille occupées par la voiture

  `__init__`(x, y, lettre, sens, taille)

    Constructeur de la classe.

    Paramètres

      - x (int) – La position en abscisse

      - y (int) – La position en ordonnée

      - lettre (str) – La lettre qui identifie la voiture

      - sens (Sens) – Le sens de la voiture : horizontale ou verticale

      - taille (Taille) – La taille de la voiture : deux ou trois

        >>> from Sens import Sens
        >>> from Taille import Taille
        >>> voiture = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)

  `__eq__`(voiture)

    Indique l’égalité ou non entre 2 voitures.

    On condisère que 2 voitures sont identiques si :

    - leur lettre sont identiques

    - leurs positions sont identiques

    - leur taille sont identiques

    La méthode retourne donc :

    - `True` : Les deux voitures sont identiques

    - `False` : Les deux situations sont différentes

    Paramètres

      a (Situation) – Une voiture

    Type renvoyé

      `boolean`

        >>> from Sens import Sens
        >>> from Taille import Taille
        >>>
        >>> voiture_un = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)
        >>> voiture_deux = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)
        >>> voiture_trois = Voiture(2,2,"C",Sens.VERTICAL,Taille.DEUX)
        >>>
        >>> voiture_un == voiture_deux
        True
        >>> voiture_un == voiture_trois
        False

  `__str__`()

    Génère une chaine de charactères indiquant la lettre de la voiture.

        >>> from Sens import Sens
        >>> from Taille import Taille
        >>>
        >>> voiture = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)
        >>> print(voiture)
        [A]

  `generer_cases_utilises`()

    Génère la liste des cases utilisées par la voiture.

    Une voiture avec une taille de 2 générera une liste de 2 cases.

    Une voiture avec une taille de 3 générera une liste de 3 cases.

    Cette méthode est appelée par le constructeur pour initialiser l’attribut case.

    Type renvoyé

      `list(tuple())`

        >>> from Sens import Sens
        >>> from Taille import Taille
        >>>
        >>> voiture = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)
        >>> voiture.case
        [(2, 2), (2, 3)]

  `info`()

    Retourne les informations d’une voiture :

    - La lettre

    - La position

    - Le sens

    - La taille

    - Les cases utilisées

    Type renvoyé

      `dictionnary`

        >>> from Sens import Sens
        >>> from Taille import Taille
        >>>
        >>> voiture = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)
        >>> voiture = Voiture(2,2,"A",Sens.VERTICAL,Taille.DEUX)
        >>> voiture.info()
        {'lettre': 'A', 'position': (2, 2), 'sens': <Sens.VERTICAL: 2>, 'taille': <Taille.DEUX: 2>, 'case': [(2, 2), (2, 3)]}

  `move`(direction, situation)

    Effectue le déplacement d’une voiture et retourne la nouvelle situation après déplacement.

    Paramètres

      - direction (Direction) – La direction dans laquelle il faut bouger la voiture

      - situation (type) – La situation de jeu d’origine

    Type renvoyé

      `Situation`

        >>> from Sens import Sens
        >>> from Taille import Taille
        >>> from Situation import Situation
        >>> from Direction import Direction
        >>>
        >>> # Création d'une voiture
        >>> voiture = Voiture(2,2,"X",Sens.HORIZONTAL,Taille.DEUX)
        >>>
        >>> #Création d'une situation
        >>> situation = Situation([voiture])
        >>> situation.afficher()
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][X][X][ ][ ]
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][ ][ ][ ]
        >>>
        >>> #Génération de la nouvelle situation
        >>> nouvelle_situation = voiture.move(Direction.DROITE, situation)
        >>> nouvelle_situation.afficher()
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][X][X][ ]
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][ ][ ][ ]
        [ ][ ][ ][ ][ ][ ]