Code cleaning & revision complete des commentaires

Complement des docstrings, renomage `move_status_id` en `status`.
Pas de changement dans le deroulement du script.
This commit is contained in:
Fred Z 2018-02-18 10:19:58 +01:00
parent e43a1d702f
commit e6365a7e3e
2 changed files with 48 additions and 33 deletions

View File

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

View File

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