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:
parent
e43a1d702f
commit
e6365a7e3e
33
roboc/map.py
33
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)
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue