Squelette du traitement du mouvement|TP_3.9

This commit is contained in:
Fred Z 2018-02-12 22:34:39 +01:00
parent 8b19a63df5
commit a42a337db4
3 changed files with 48 additions and 12 deletions

View File

@ -18,6 +18,7 @@ MAZE_ELEMENTS = {'wall': 'O', # elements dispo dans le labyrinthe
'door': '.',
'exit': 'U',
'robo': 'X'}
MOVE_TO_STATUS = ['bad', 'wall', 'exit', 'door', 'ok']
ERR_ = "#!@?# Oups… "
ERR_MAP_FILE = ERR_ + "carte «{}» inaccessible!"
@ -30,7 +31,9 @@ MIN_MAP_SIDE = 3
MSG_DISCLAMER = "Bienvenue dans Roboc."
MSG_AVAIBLE_MAP = "Cartes disponible: "
MSG_CHOOSE_MAP = "Choississez un numéro de carte: "
MSG_CHOOSE_MOVE = "Votre deplacement (h pour l'aide): "
MSG_SELECTED_MAP = "Vous avez fait le choix #{}, la carte «{}»."
DEBUG = False

View File

@ -9,7 +9,7 @@ Ce fichier fait partie du projet `roboc`
import os
from configuration import MAZE_ELEMENTS, ERR_MAP_FILE, MIN_MAP_SIDE, \
ERR_MAP_SIZE, ERR_MAP_ROBO
ERR_MAP_SIZE, ERR_MAP_ROBO, MOVE_TO_STATUS
class Map:
@ -117,7 +117,6 @@ class Map:
self.status = False
self.status_message = ERR_MAP_FILE.format(map_file)
def __getattr__(self, name):
"""
Si un attribut manque a l'appel (_robo_position ou
@ -129,22 +128,44 @@ class Map:
""" Affiche la carte avec la position de jeu courante """
print(self._data_text)
def move_on_map(self, start, move):
def move_to(self, move):
"""
Deplace le «robo» sur la carte
:param start: coordonnee de depart
:param move: mouvement souhaite
:return: 0: wall, 1: sortie, 2: door, 3: ok
:return: key in MOVE_TO_STATUS
"""
# verifie que le start est dans la carte
# decompose le move
direction = move[0]
distance = move[1:]
stop = False
# verifie que le move est possible sur la carte
# direction non conforme
if direction not in DIRECTIONS:
move_to_status = 0
# effectue le move et met a jour la carte
# move possible
else:
# pour chaque unite de distance on lit le charactere correspondant
while distance != 0 or stop:
next_char = what_is_next_char(direction)
if next_char == MAZE_ELEMENTS['door']:
def restore_backup(self, position):
""" Charge une carte issue d'une sauvegarde """
elif next_char == MAZE_ELEMENTS['exit']:
elif next_char == MAZE_ELEMENTS['wall']:
else:
distance -= 1
# effectue le move et met a jour la carte
move_to_status =
return move_to_status
def restore_backup(self, position):
""" Charge une carte issue d'une sauvegarde """
if __name__ == "__main__":

View File

@ -72,7 +72,6 @@ while user_select_map_id > len(maps_name_list) or user_select_map_id < 0:
user_select_map_id < 0:
print(ERR_PLAGE)
# DEBUT DE BOUCLE DE TOUR DE JEU
# TODO : clear screen
print(MSG_SELECTED_MAP.format(user_select_map_id,
maps_name_list[user_select_map_id]))
@ -82,13 +81,26 @@ map_file = MAP_DIRECTORY + \
maps_name_list[user_select_map_id] + \
MAP_EXTENTION
# Affichage de la carte et de la position de jeu
# instentiation de la carte choisie
current_map = Map(map_file)
# DEBUT DE BOUCLE DE TOUR DE JEU
# TODO : clear screen
# Affichage de la carte et de la position de jeu
if current_map.status:
current_map.map_print()
# choix du deplacement
user_select_move = input(MSG_CHOOSE_MOVE)
# traitement du deplacement
current_map.move_to(user_select_move)
else:
print(current_map.status_message)
# fin de la boucle de tour
# Fin de partie