Selection basique de la carte|TP_3.9|UPGRADE configuration.py map.py

This commit is contained in:
Fred Z 2018-02-12 15:39:42 +01:00
parent 3720696c86
commit c011b7d48d
2 changed files with 46 additions and 27 deletions

View File

@ -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

View File

@ -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
<BLANKLINE>
>>> 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)
<class 'str'>
@ -50,8 +47,7 @@ class Map:
O1234
abcde
ABCDE
zyxwv
<BLANKLINE>
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()