Selection basique de la carte|TP_3.9|UPGRADE configuration.py map.py
This commit is contained in:
parent
3720696c86
commit
c011b7d48d
|
@ -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
|
66
roboc/map.py
66
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
|
||||
<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()
|
Loading…
Reference in New Issue