From c011b7d48dfe9a6a11348a67799c98e3e0340fbb Mon Sep 17 00:00:00 2001 From: Fred Z Date: Mon, 12 Feb 2018 15:39:42 +0100 Subject: [PATCH] Selection basique de la carte|TP_3.9|UPGRADE configuration.py map.py --- roboc/configuration.py | 7 +++-- roboc/map.py | 66 ++++++++++++++++++++++++++---------------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/roboc/configuration.py b/roboc/configuration.py index b30962b..5efa5af 100644 --- a/roboc/configuration.py +++ b/roboc/configuration.py @@ -18,9 +18,12 @@ MAZE_ELEMENTS = {'wall': 'O', # elements dispo dans le labyrinthe 'door': '.', 'exit': 'U', 'robo': 'X'} -ERR_MAP_FILE = "ERR_MAP_FILE" +ERR_MAP_FILE = "\t#!@?# Oups… carte «{}» inaccessible!" +ERR_MAP_SIZE = "\t#!@?# Oups… carte «{}», dimensions incorrecte: «{} x {}»" +ERR_MAP_ROBO = "\t#!@?# Oups… robo est introuvable sur la carte «{}»!" ERR_PLAGE = "Il faut saisir un nombre dans la plage indiquée! " ERR_SAISIE = "Il faut saisir un nombre! " +MIN_MAP_SIDE = 3 MSG_DISCLAMER = "Bienvenue dans Roboc." MSG_AVAIBLE_MAP = "Cartes disponible: " MSG_CHOOSE_MAP = "Choississez un numéro de carte: " @@ -31,4 +34,4 @@ DEBUG = False # VARIABLES maps_name_list = list() # liste des maps proposees a l'utilisateur -user_select_map_id = -1 # carte choisie par l'utilisateur +user_select_map_id = -1 # carte choisie par l'utilisateur \ No newline at end of file diff --git a/roboc/map.py b/roboc/map.py index 17fbbac..ba42caa 100644 --- a/roboc/map.py +++ b/roboc/map.py @@ -8,7 +8,8 @@ Ce fichier fait partie du projet `roboc` """ import os -from configuration import MAZE_ELEMENTS, ERR_MAP_FILE +from configuration import MAZE_ELEMENTS, ERR_MAP_FILE, MIN_MAP_SIDE, \ + ERR_MAP_SIZE, ERR_MAP_ROBO class Map: @@ -25,11 +26,7 @@ class Map: _data_text: O1234 abcde ABCDE - zyxwv - - - >>> print("_data_list: {}".format(TestMap._data_list)) - _data_list: ['O1234', 'abcde', 'ABCDE', 'zyxwv'] + zyXwv >>> print("_column_nb: {}".format(TestMap._column_nb)) _column_nb: 5 @@ -37,11 +34,11 @@ class Map: >>> print("_line_nb: {}".format(TestMap._line_nb)) _line_nb: 4 - >>> print("_init_position: {}".format(TestMap._init_position)) - _line_position: + >>> print("_init_robo_position: {}".format(TestMap._init_robo_position)) + _init_robo_position: None - >>> print("_current_position: {}".format(TestMap._current_position)) - _current_position: + >>> print("_robo_position: {}".format(TestMap._robo_position)) + _robo_position: None >>> type(TestMap._data_text) @@ -50,8 +47,7 @@ class Map: O1234 abcde ABCDE - zyxwv - + zyXwv """ @@ -66,24 +62,44 @@ class Map: # contenu de la carte en texte self._data_text = map_data.read() # contenu de la carte ligne a ligne - self._data_list = self._data_text.splitlines() + map_data_list = self._data_text.splitlines() # nbre de colonne de la carte (1ere ligne) - self._column_nb = len(self._data_list[0]) + self._column_nb = len(map_data_list[0]) # nbre de ligne de la carte - self._line_nb = len(self._data_list) + self._line_nb = len(map_data_list) + # positior du robot + self._robo_position = self._data_text.find(MAZE_ELEMENTS['robo']) + # Erreur de chargement du fichier else: - raise FileNotFoundError('{}: {}'.format(ERR_MAP_FILE, map_file)) + self.status = False + self.status_message = ERR_MAP_FILE.format(map_file) - line = int(self._line_nb) - while line == 0: - if self._data_list[line].find(MAZE_ELEMENTS['robo']) != -1: - self._init_position = \ - (line, self._data_list[line].find(MAZE_ELEMENTS['robo'])) + # Quelques controle sur la carte: + # - a t elle des dimensions mini? + if self._column_nb < MIN_MAP_SIDE or self._line_nb < MIN_MAP_SIDE: + self.status = False + self.status_message = ERR_MAP_SIZE.format( + map_file, self._column_nb, self._line_nb + ) - # la position courante est la position initiale - self._current_position = self._init_position - line -= 1 + # - a t elle un robo ( TODO : hors mur)? + elif self._robo_position == -1: + self.status = False + self.status_message = ERR_MAP_ROBO.format(map_file) + + # - a t elle une sortie (dans mur) TODO? + # - a t elle du mur tout autour TODO? + + self._init_robo_position = self._robo_position + self.status = True + + def __getattr__(self, name): + """ + Si un attribut manque a l'appel (_robo_position ou + _init_robo_position) + """ + return None def map_print(self): """ Affiche la carte avec la position de jeu courante """ @@ -111,4 +127,4 @@ if __name__ == "__main__": """ Starting doctests """ import doctest - doctest.testmod() + doctest.testmod() \ No newline at end of file