diff --git a/roboc/configuration.py b/roboc/configuration.py index 019334e..3544edd 100644 --- a/roboc/configuration.py +++ b/roboc/configuration.py @@ -18,6 +18,7 @@ MAZE_ELEMENTS = {'wall': 'O', # elements dispo dans le labyrinthe 'door': '.', 'exit': 'U', 'robo': 'X'} +MOVE_TO_STATUS = ['bad', 'wall', 'exit', 'door', 'ok'] ERR_ = "#!@?# Oups… " ERR_MAP_FILE = ERR_ + "carte «{}» inaccessible!" @@ -30,7 +31,9 @@ MIN_MAP_SIDE = 3 MSG_DISCLAMER = "Bienvenue dans Roboc." MSG_AVAIBLE_MAP = "Cartes disponible: " MSG_CHOOSE_MAP = "Choississez un numéro de carte: " +MSG_CHOOSE_MOVE = "Votre deplacement (h pour l'aide): " MSG_SELECTED_MAP = "Vous avez fait le choix #{}, la carte «{}»." + DEBUG = False diff --git a/roboc/map.py b/roboc/map.py index 60a79e9..a5cb5b4 100644 --- a/roboc/map.py +++ b/roboc/map.py @@ -9,7 +9,7 @@ Ce fichier fait partie du projet `roboc` import os from configuration import MAZE_ELEMENTS, ERR_MAP_FILE, MIN_MAP_SIDE, \ - ERR_MAP_SIZE, ERR_MAP_ROBO + ERR_MAP_SIZE, ERR_MAP_ROBO, MOVE_TO_STATUS class Map: @@ -117,7 +117,6 @@ class Map: self.status = False self.status_message = ERR_MAP_FILE.format(map_file) - def __getattr__(self, name): """ Si un attribut manque a l'appel (_robo_position ou @@ -129,22 +128,44 @@ class Map: """ Affiche la carte avec la position de jeu courante """ print(self._data_text) - def move_on_map(self, start, move): + def move_to(self, move): """ Deplace le «robo» sur la carte - :param start: coordonnee de depart :param move: mouvement souhaite - :return: 0: wall, 1: sortie, 2: door, 3: ok + :return: key in MOVE_TO_STATUS """ - # verifie que le start est dans la carte + # decompose le move + direction = move[0] + distance = move[1:] + stop = False - # verifie que le move est possible sur la carte + # direction non conforme + if direction not in DIRECTIONS: + move_to_status = 0 - # effectue le move et met a jour la carte + # move possible + else: + # pour chaque unite de distance on lit le charactere correspondant + while distance != 0 or stop: + next_char = what_is_next_char(direction) + if next_char == MAZE_ELEMENTS['door']: - def restore_backup(self, position): - """ Charge une carte issue d'une sauvegarde """ + elif next_char == MAZE_ELEMENTS['exit']: + + elif next_char == MAZE_ELEMENTS['wall']: + + else: + distance -= 1 + + # effectue le move et met a jour la carte + + move_to_status = + + return move_to_status + + def restore_backup(self, position): + """ Charge une carte issue d'une sauvegarde """ if __name__ == "__main__": diff --git a/roboc/roboc.py b/roboc/roboc.py index 3356ba4..6114c1b 100644 --- a/roboc/roboc.py +++ b/roboc/roboc.py @@ -72,7 +72,6 @@ while user_select_map_id > len(maps_name_list) or user_select_map_id < 0: user_select_map_id < 0: print(ERR_PLAGE) -# DEBUT DE BOUCLE DE TOUR DE JEU # TODO : clear screen print(MSG_SELECTED_MAP.format(user_select_map_id, maps_name_list[user_select_map_id])) @@ -82,13 +81,26 @@ map_file = MAP_DIRECTORY + \ maps_name_list[user_select_map_id] + \ MAP_EXTENTION -# Affichage de la carte et de la position de jeu +# instentiation de la carte choisie current_map = Map(map_file) + +# DEBUT DE BOUCLE DE TOUR DE JEU +# TODO : clear screen + +# Affichage de la carte et de la position de jeu if current_map.status: current_map.map_print() + # choix du deplacement + user_select_move = input(MSG_CHOOSE_MOVE) + + # traitement du deplacement + current_map.move_to(user_select_move) + else: print(current_map.status_message) + # fin de la boucle de tour + # Fin de partie