From ec02c5bc0a30ed81289c4132fe9861ac0baf02c0 Mon Sep 17 00:00:00 2001 From: Fred Z Date: Sat, 17 Feb 2018 18:54:12 +0100 Subject: [PATCH] Cree une fonction pour afficher l'aide Concerne le stockage des constantes DIRECTIONS & COMMANDS avec leurs description specifique. Desormais les 2 donnees sont stockees de la meme maniere (2 listes distinctes contenant la commande et la description), permettant une mise en forme simplifiee via une fonction (get_msg_list() ) --- roboc/configuration.py | 40 +++++++++++++++++++++++++++++++++++----- roboc/roboc.py | 33 +++++++++------------------------ 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/roboc/configuration.py b/roboc/configuration.py index 79bb6ad..e5ca1f7 100644 --- a/roboc/configuration.py +++ b/roboc/configuration.py @@ -14,8 +14,6 @@ MAP_DIRECTORY = 'cartes/' # repertoire des fichiers carte MAP_EXTENTION = '.txt' # extention des fichiers carte BACKUP_FILE = '.backup' # fichier de sauvegarde MSG_NO_YES = ['non', 'oui'] -COMMANDS = {'quit': 'Q', # commandes d'interuption - 'help': 'H'} # TODO standardiser la maniere de stocker: # - DIRECTIONS & DIRECTIONS_LABEL # - MOVE_STATUS & MOVE_STATUS_MSG @@ -23,6 +21,16 @@ COMMANDS = {'quit': 'Q', # commandes d'interuption # Meilleure sera la comprehension de la conf et ca permettra de faire # une fonction affiche_liste(VAR) commune pour la liste des fichiers de # carte et celle de l'aide. + +# COMMANDES D'INTERUPTION: +# le code utilise l'index des listes `COMMANDS` & `COMMANDS_LABEL` +# pour faire le lien entre les 2. +# Ici vous pouvez ajouter de nouvelles commandes de jeu, elle seront +# ajoutees a l'aide automatiquement. Mais il faudra ajouter le code +# leur correspondant dans la condition de traitement du mouvement. +COMMANDS = ['Q', 'H'] +# Libelle des commandes d'interuption, conserver l'ordre +COMMANDS_LABEL = ['Sauvegarder & quitter', 'Aide'] DIRECTIONS = ['N', 'S', 'E', 'O'] # commandes clavier de deplacement DIRECTIONS_LABEL = ['nord', # etiquette des commandes clavier 'sud', # des de deplacements pour @@ -58,15 +66,13 @@ MSG_AVAIBLE_MAP = "Cartes disponible: " MSG_BACKUP_DONE = "La partie a été sauvegardée." MSG_BACKUP_GAME = "Partie sauvegardé chargée" MSG_CHOOSE_MAP = "Choississez un numéro de carte: " -MSG_CHOOSE_MOVE = "Votre deplacement ({} pour l'aide): " +MSG_CHOOSE_MOVE = "Votre deplacement ({}:{}): " MSG_DOOR = "Vous passez une porte" MSG_START_GAME = "Votre partie commence" MSG_HELP = "Voici les commandes disponibles:\n" MSG_SELECTED_MAP = "Vous avez fait le choix #{}, la carte «{}»." MSG_END_GAME = "Fin de la partie." -TEMPLATE_HELP_LIST = "\t- «{}»: {}\n" # Modele de la liste d'aide - DEBUG = False @@ -137,3 +143,27 @@ def choose_maps_menu(): # instenciation de la carte choisie return Map(map_file) + + +def get_msg_list(command, label): + """ + Formate une chaine pour afficher les commandes et leurs descriptifs + + :type key: lst() + :param key: liste de commande + :type label: lst() + :param label: Texte descriptif des commande associee + :rtype: str() + :return: Chaine formatee assemblant les elements en parametres + """ + + # Modele de mise en forme de la liste de chaque element + TEMPLATE = "\t- «{}»: {}\n" + + # Variable de setour + result = str() + + for key, value in enumerate(command): + result += TEMPLATE.format(value ,label[key]) + + return result diff --git a/roboc/roboc.py b/roboc/roboc.py index f73284d..cfa7d6b 100644 --- a/roboc/roboc.py +++ b/roboc/roboc.py @@ -20,11 +20,11 @@ https://openclassrooms.com/courses/apprenez-a-programmer-en-python/exercises/180 import os import pickle # from map import Map -from configuration import BACKUP_FILE, choose_maps_menu, cls, COMMANDS, \ - DIRECTIONS, DIRECTIONS_LABEL, ERR_UNKNOW, MAP_DIRECTORY, MAP_EXTENTION, maps_name_list, \ +from configuration import BACKUP_FILE, choose_maps_menu, cls, COMMANDS, COMMANDS_LABEL, \ + DIRECTIONS, DIRECTIONS_LABEL, ERR_UNKNOW, get_msg_list, MAP_DIRECTORY, MAP_EXTENTION, maps_name_list, \ MOVE_STATUS, MOVE_STATUS_MSG, MSG_AVAIBLE_BACKUP, MSG_BACKUP_DONE, MSG_BACKUP_GAME, \ MSG_CHOOSE_MOVE, MSG_DISCLAMER, MSG_END_GAME, MSG_HELP, MSG_NO_YES, \ - TEMPLATE_HELP_LIST, user_select_backup + user_select_backup # DEBUT DU JEU @@ -74,36 +74,20 @@ while current_map.status: # choix du deplacement user_select_move = input(MSG_CHOOSE_MOVE.format( - COMMANDS['help']) + COMMANDS[1], COMMANDS_LABEL[1]) ).upper() cls() # clear screen - if user_select_move == COMMANDS['quit']: # quitter et sauvegarder + if user_select_move == COMMANDS[0]: # sauvegarder & quitter current_map.status = False current_map.status_message = MSG_BACKUP_DONE - # TODO standardiser la maniere de stocker: - # - DIRECTIONS & DIRECTIONS_LABEL - # - MOVE_STATUS & MOVE_STATUS_MSG - # - COMMANDS - # Meilleure sera la comprehension de la conf et ca permettra de faire - # une fonction affiche_liste(VAR) commune pour la liste des fichiers de - # carte et celle de l'aide. - elif user_select_move == COMMANDS['help']: # Affiche l'aide - + elif user_select_move == COMMANDS[1]: # Affiche l'aide current_map.status_message = MSG_HELP - # liste les directions - for direction_id, direction in enumerate(DIRECTIONS): - current_map.status_message += TEMPLATE_HELP_LIST.format( - direction, - DIRECTIONS_LABEL[direction_id]) - + current_map.status_message += get_msg_list(DIRECTIONS, DIRECTIONS_LABEL) # liste les commandes - for command, command_label in COMMANDS.items(): - current_map.status_message += TEMPLATE_HELP_LIST.format( - command, - command_label) + current_map.status_message += get_msg_list(COMMANDS, COMMANDS_LABEL) else: # traitement du deplacement move_status_id = current_map.move_to(user_select_move) @@ -115,6 +99,7 @@ while current_map.status: current_map.status = False else: # sinon on sauvegarde avant de boucler + # FIXME le message tour a tour est perdu apres la sauvegarde current_map.status_message = MSG_BACKUP_GAME with open(BACKUP_FILE, 'wb') as backup_file: pickle.Pickler(backup_file).dump(current_map)