Squelette du traitement du mouvement|TP_3.9
This commit is contained in:
parent
8b19a63df5
commit
a42a337db4
|
@ -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
|
||||
|
||||
|
||||
|
|
41
roboc/map.py
41
roboc/map.py
|
@ -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__":
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue