From e6365a7e3e8870b5a655ce89f19a734674f8e450 Mon Sep 17 00:00:00 2001 From: Fred Z Date: Sun, 18 Feb 2018 10:19:58 +0100 Subject: [PATCH] Code cleaning & revision complete des commentaires Complement des docstrings, renomage `move_status_id` en `status`. Pas de changement dans le deroulement du script. --- roboc/map.py | 33 ++++++++++++++++++++++++++++----- roboc/roboc.py | 48 ++++++++++++++++++++---------------------------- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/roboc/map.py b/roboc/map.py index a28d9da..a95f3d2 100644 --- a/roboc/map.py +++ b/roboc/map.py @@ -4,9 +4,7 @@ Version: 0.1 Licence: `GNU GPL v3` GNU GPL v3: http://www.gnu.org/licenses/ Ce fichier fait partie du projet `roboc` - """ -# TODO sortir les doctests import os from configuration import DIRECTIONS, ERR_MAP_FILE, ERR_MAP_ROBO, \ MIN_MAP_SIDE, ERR_MAP_SIZE, ERR_UNKNOW, MAZE_ELEMENTS, MSG_START_GAME @@ -14,8 +12,18 @@ from configuration import DIRECTIONS, ERR_MAP_FILE, ERR_MAP_ROBO, \ class Map: """ - Classe gerant les cartes disponibles et la carte utilisee en cours - de partie. + Fourni les moyens necessaire a l'utilisation d'un fichier carte. + + Controle de coherance sur la carte choise, deplace le robo en + fonction des commandes du joueur jusqu'en fin de partie. + + Cette docstring contient des + [DocTests](http://sametmax.com/les-docstrings/), ça ne fait pas + partie du cours, mais c'est un outils facile de test/debug que + j'utilise et qui reste transparent. + + Doctests + ======== :Example: >>> EasyMap = Map("cartes/facile.txt") @@ -69,7 +77,20 @@ class Map: def __init__(self, map_file): """ Initialisation de la carte utilise - :param map_file: + + Instancie un objet Map avec les attributs suivant: + + :var int status: Etat de l'objet apres le deplacement + :var str status_message: Message relatif au deplacement + :var int _column_nb: Nbre de colonne du labyrinte (1ere ligne) + :var str _data_text: Contenu du labyrinte + :var str _element_under_robo: Element sous le robot + :var int _line_nb: Nbre de ligne du labyrinte + :var int _robo_position: position du robo dans _data_text + + :param map_file: fichier «carte» avec chemin relatif + :rtype map: str() + :return: None """ # Chargement du fichier carte choisi if os.path.isfile(map_file) is True: @@ -136,7 +157,9 @@ class Map: Deplace le robo sur la carte :param move: mouvement souhaite + :rtype move: str() :return: une cle de la constante MOVE_STATUS + :rtype: int() """ # decompose le mouvement try: # on recupere le 1er caractere (la direction) diff --git a/roboc/roboc.py b/roboc/roboc.py index 8d7cc40..73f110f 100644 --- a/roboc/roboc.py +++ b/roboc/roboc.py @@ -9,17 +9,13 @@ Licence: `GNU GPL v3` GNU GPL v3: http://www.gnu.org/licenses/ roboc ===== -Jeu permettant de controler un robot dans un labyrinthe -C'est un labyrinthe forme d'obstacles: des murs, des portes et au moins -une sortie. Arrive sur ce point, la partie est terminee. +Jeu permettant de controler un robot dans un labyrinthe. -Source: -https://openclassrooms.com/courses/apprenez-a-programmer-en-python/exercises/180 +Voir readme.md """ import os import pickle -# from map import Map from configuration import BACKUP_FILE, choose_maps_menu, cls, COMMANDS, \ COMMANDS_LABEL, DIRECTIONS, DIRECTIONS_LABEL, get_msg_list, \ MAP_DIRECTORY, MAP_EXTENTION, maps_name_list, MOVE_STATUS, \ @@ -42,8 +38,8 @@ else: if map_file[filename_len:] == MAP_EXTENTION: maps_name_list.append(map_file[: filename_len]) -cls() # clear screen # Affichage du debut de partie +cls() # vide l'ecran de la console print(MSG_DISCLAMER) # Verif si un fichier de sauvegarde est dispo @@ -68,57 +64,53 @@ else: # DEBUT DE BOUCLE DE TOUR DE JEU -# Affichage de la carte et de la position de jeu +# Affichage de la carte tant que status == True while current_map.status: + # Affiche la carte et le message current_map.map_print() print(current_map.status_message) - # choix du deplacement - user_select_move = input(MSG_CHOOSE_MOVE.format( + # Demande a l'utilisateur son choix du deplacement + user_move = input(MSG_CHOOSE_MOVE.format( COMMANDS[1], COMMANDS_LABEL[1]) ).upper() - cls() # clear screen + cls() # vide l'ecran de la console - if user_select_move == COMMANDS[0]: # sauvegarder & quitter + # Traitement de la commande utilisateur + if user_move == COMMANDS[0]: # sauvegarder & quitter current_map.status = False current_map.status_message = MSG_BACKUP_DONE - elif user_select_move == COMMANDS[1]: # Affiche l'aide + elif user_move == COMMANDS[1]: # Affiche l'aide current_map.status_message = MSG_HELP # liste les directions - current_map.status_message += get_msg_list(DIRECTIONS, DIRECTIONS_LABEL) + current_map.status_message += get_msg_list( + DIRECTIONS, DIRECTIONS_LABEL + ) # liste les commandes current_map.status_message += get_msg_list(COMMANDS, COMMANDS_LABEL) - else: # traitement du deplacement - move_status_id = current_map.move_to(user_select_move) - message = MOVE_STATUS_MSG[MOVE_STATUS[move_status_id]].format(user_select_move) + else: # Traitement du deplacement + status = current_map.move_to(user_move) + message = MOVE_STATUS_MSG[MOVE_STATUS[status]].format(user_move) # La sortie est atteinte, fin de la boucle - if MOVE_STATUS[move_status_id] == 'exit': + if MOVE_STATUS[status] == 'exit': current_map.status = False current_map.status_message = message - else: # sinon on sauvegarde avant de boucler + else: # sinon on sauvegarde la partie avant de refaire un tour current_map.status_message = MSG_BACKUP_GAME with open(BACKUP_FILE, 'wb') as backup_file: pickle.Pickler(backup_file).dump(current_map) current_map.status_message = message +# fin de la boucle de tour -# TODO rester dans la boucle de la partie si la carte n'est pas conforme if current_map.status is False: print(current_map.status_message) - # fin de la boucle de tour - # Fin de partie print(MSG_END_GAME) current_map.map_print() - - -if __name__ == "__main__": - """ Starting doctests """ - import doctest - doctest.testmod()