Depoussierage du code et commentaires, ajout de TODO|TP_3.9
This commit is contained in:
parent
765c477315
commit
3b9c9d81fa
|
@ -46,4 +46,12 @@ DEBUG = False
|
|||
# VARIABLES
|
||||
|
||||
maps_name_list = list() # liste des maps proposees a l'utilisateur
|
||||
user_select_map_id = -1 # carte choisie par l'utilisateur
|
||||
user_select_map_id = -1 # carte choisie par l'utilisateur
|
||||
|
||||
|
||||
# FUNCTIONS
|
||||
def cls():
|
||||
""" Efface l'historique de la console """
|
||||
import os
|
||||
os.system('clear')
|
||||
return
|
46
roboc/map.py
46
roboc/map.py
|
@ -10,7 +10,7 @@ Ce fichier fait partie du projet `roboc`
|
|||
import os
|
||||
from configuration import *
|
||||
|
||||
|
||||
# TODO01 sortir les doctests
|
||||
class Map:
|
||||
"""
|
||||
Classe gerant les cartes disponibles et la carte utilisee en cours
|
||||
|
@ -69,7 +69,6 @@ class Map:
|
|||
OOO
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, map_file):
|
||||
"""
|
||||
Initialisation de la carte utilise
|
||||
|
@ -85,11 +84,11 @@ class Map:
|
|||
# contenu de la carte ligne a ligne
|
||||
map_data_list = self._data_text.splitlines()
|
||||
|
||||
# nbre de colonne de la carte (1ere ligne)
|
||||
# nbre de colonne de la 1ere ligne de la carte
|
||||
try:
|
||||
self._column_nb = len(map_data_list[0]) +1
|
||||
self._column_nb = len(map_data_list[0]) + 1
|
||||
except IndexError:
|
||||
self._column_nb = 0
|
||||
self._column_nb = 0
|
||||
|
||||
# nbre de ligne de la carte
|
||||
try:
|
||||
|
@ -97,27 +96,30 @@ class Map:
|
|||
except IndexError:
|
||||
self._line_nb = 0
|
||||
|
||||
# positior du robot
|
||||
self._robo_position = self._data_text.find(MAZE_ELEMENTS['robo'])
|
||||
# position du robot
|
||||
self._robo_position = self._data_text.find(
|
||||
MAZE_ELEMENTS['robo']
|
||||
)
|
||||
|
||||
# Quelques controle sur la carte:
|
||||
# - a t elle des dimensions mini?
|
||||
if self._column_nb < MIN_MAP_SIDE or self._line_nb < MIN_MAP_SIDE:
|
||||
# dimensions assez grande pour deplacer un robo?
|
||||
if self._column_nb < MIN_MAP_SIDE or \
|
||||
self._line_nb < MIN_MAP_SIDE:
|
||||
self.status = False
|
||||
self.status_message = ERR_MAP_SIZE.format(
|
||||
map_file, self._column_nb, self._line_nb
|
||||
)
|
||||
|
||||
# - a t elle un robo ( TODO : hors mur)?
|
||||
# y a t il un robo?
|
||||
elif self._robo_position == -1:
|
||||
self.status = False
|
||||
self.status_message = ERR_MAP_ROBO.format(map_file)
|
||||
|
||||
# - a t elle une sortie (dans mur) TODO?
|
||||
# - a t elle du mur tout autour TODO?
|
||||
# on peu ajouter d'autres controles ici
|
||||
|
||||
else:
|
||||
# TODO est-ce utile de concerver la pos initiale?
|
||||
self._init_robo_position = self._robo_position
|
||||
# TODO02 est-ce utile de concerver la pos initiale?
|
||||
# self._init_robo_position = self._robo_position
|
||||
self.status = True
|
||||
|
||||
# Erreur de chargement du fichier
|
||||
|
@ -125,7 +127,7 @@ class Map:
|
|||
self.status = False
|
||||
self.status_message = ERR_MAP_FILE.format(map_file)
|
||||
|
||||
# TODO est-ce utile de conserver cette methode?
|
||||
# TODO03 est-ce utile de conserver cette methode?
|
||||
def __getattr__(self, name):
|
||||
"""
|
||||
Si un attribut manque a l'appel (_robo_position ou
|
||||
|
@ -139,10 +141,10 @@ class Map:
|
|||
|
||||
def move_to(self, move):
|
||||
"""
|
||||
Deplace le «robo» sur la carte
|
||||
Deplace le robo sur la carte
|
||||
|
||||
:param move: mouvement souhaite
|
||||
:return: key in MOVE_STATUS
|
||||
:return: une cle de la constante MOVE_STATUS
|
||||
"""
|
||||
# decompose le mouvement
|
||||
try:
|
||||
|
@ -151,6 +153,7 @@ class Map:
|
|||
# print("IndexError: «{}»".format(except_detail))
|
||||
return 0
|
||||
|
||||
# TODO04 si pas de chiffre, on avance d'une unite
|
||||
try:
|
||||
goal = int(move[1:])
|
||||
except ValueError as except_detail:
|
||||
|
@ -179,10 +182,9 @@ class Map:
|
|||
next_position = self._robo_position - 1
|
||||
|
||||
else: # juste au cas ou
|
||||
raise NotImplementedError(ERR_)
|
||||
raise NotImplementedError(ERR_UNKNOW)
|
||||
|
||||
# verifie quelle est la case du prochain pas
|
||||
# import pdb; pdb.set_trace()
|
||||
# Traitement en fonction de la case du prochain pas
|
||||
next_char = self._data_text[next_position]
|
||||
if next_char == MAZE_ELEMENTS['wall']:
|
||||
move_status = 1
|
||||
|
@ -193,11 +195,11 @@ class Map:
|
|||
move_status = 2
|
||||
steps = goal
|
||||
|
||||
|
||||
elif next_char == MAZE_ELEMENTS['door']:
|
||||
self._robo_position = next_position
|
||||
move_status = 3
|
||||
steps = goal
|
||||
# TODO05 replacer la porte ensuite
|
||||
|
||||
else:
|
||||
self._robo_position = next_position
|
||||
|
@ -211,7 +213,7 @@ class Map:
|
|||
# place le robo sur sa nouvelle position
|
||||
self._data_text = self._data_text[:self._robo_position] + \
|
||||
MAZE_ELEMENTS['robo'] + \
|
||||
self._data_text[self._robo_position +1:]
|
||||
self._data_text[self._robo_position + 1:]
|
||||
|
||||
return move_status
|
||||
|
||||
|
|
|
@ -13,11 +13,7 @@ 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.
|
||||
|
||||
:Example:
|
||||
>>> a = 10
|
||||
>>> a + 5
|
||||
15
|
||||
|
||||
Source: https://openclassrooms.com/courses/apprenez-a-programmer-en-python/exercises/180
|
||||
"""
|
||||
|
||||
import os
|
||||
|
@ -25,9 +21,6 @@ from map import Map
|
|||
from configuration import *
|
||||
# import pickle
|
||||
|
||||
# FONCTIONS
|
||||
|
||||
|
||||
# DEBUT DU JEU
|
||||
|
||||
# Recuperation de la liste des cartes
|
||||
|
@ -43,13 +36,13 @@ else:
|
|||
if map_file[filename_len:] == MAP_EXTENTION:
|
||||
maps_name_list.append(map_file[:filename_len])
|
||||
|
||||
# Chercher si une sauvegarde existe
|
||||
# TODO
|
||||
# TODO06 Chercher si une sauvegarde existe
|
||||
|
||||
# Affichage du debut de partie
|
||||
i = 0
|
||||
cls() # clear screen
|
||||
print(MSG_DISCLAMER)
|
||||
print(MSG_AVAIBLE_MAP)
|
||||
i = 0
|
||||
for maps_name in maps_name_list:
|
||||
print("\t[{}] - {}".format(i, maps_name))
|
||||
i += 1
|
||||
|
@ -72,7 +65,6 @@ while user_select_map_id > len(maps_name_list) or user_select_map_id < 0:
|
|||
user_select_map_id < 0:
|
||||
print(ERR_PLAGE)
|
||||
|
||||
# TODO : clear screen
|
||||
print(MSG_SELECTED_MAP.format(user_select_map_id,
|
||||
maps_name_list[user_select_map_id]))
|
||||
|
||||
|
@ -81,22 +73,26 @@ map_file = MAP_DIRECTORY + \
|
|||
maps_name_list[user_select_map_id] + \
|
||||
MAP_EXTENTION
|
||||
|
||||
# instentiation de la carte choisie
|
||||
# instenciation de la carte choisie
|
||||
current_map = Map(map_file)
|
||||
|
||||
# DEBUT DE BOUCLE DE TOUR DE JEU
|
||||
|
||||
# Affichage de la carte et de la position de jeu
|
||||
while current_map.status:
|
||||
# TODO : clear screen
|
||||
cls() # clear screen
|
||||
current_map.map_print()
|
||||
|
||||
# TODO07 Utiliser les commandes en capitale
|
||||
# choix du deplacement
|
||||
user_select_move = input(MSG_CHOOSE_MOVE)
|
||||
user_select_move = input(MSG_CHOOSE_MOVE).lower
|
||||
|
||||
# TODO08 quitter et sauvegarder
|
||||
|
||||
# traitement du deplacement
|
||||
move_status_id = current_map.move_to(user_select_move)
|
||||
|
||||
# TODO09 ranger les status dans un dict('ok': MSG_OK, …)
|
||||
if MOVE_STATUS[move_status_id] == 'ok':
|
||||
print('MSG_OK')
|
||||
|
||||
|
@ -113,9 +109,10 @@ while current_map.status:
|
|||
current_map.status = False
|
||||
current_map.status_message = MSG_EXIT
|
||||
|
||||
else : # juste au cas ou…
|
||||
print(ERR_UNKNOW)
|
||||
else: # juste au cas ou…
|
||||
raise NotImplementedError(ERR_UNKNOW)
|
||||
|
||||
# TODO10 rester dans la boucle si la carte n'est pas conforme
|
||||
if current_map.status is False:
|
||||
print(current_map.status_message)
|
||||
# fin de la boucle de tour
|
||||
|
|
Loading…
Reference in New Issue