155 lines
4.7 KiB
Python
155 lines
4.7 KiB
Python
"""
|
|
Author: freezed <freezed@users.noreply.github.com> 2018-02-11
|
|
Version: 0.1
|
|
Licence: `GNU GPL v3` GNU GPL v3: http://www.gnu.org/licenses/
|
|
|
|
Ce fichier fait partie du projet `roboc`
|
|
|
|
"""
|
|
|
|
# CONFIGURATION
|
|
# Commandes
|
|
# Le code utilise l'index des listes `COMMANDS` & `COMMANDS_LABEL`
|
|
# pour faire le lien entre les 2.
|
|
# Ici vous pouvez ajouter de nouvelles commandes de jeu, elle seront
|
|
# ajoutees a l'aide automatiquement. Mais il faudra ajouter le code
|
|
# leur correspondant dans la condition de traitement du mouvement.
|
|
COMMANDS = ['Q', 'H']
|
|
# Libelle des commandes d'interuption, conserver l'ordre
|
|
COMMANDS_LABEL = ['Quitter', 'Aide']
|
|
# Commandes clavier de deplacement
|
|
DIRECTIONS = ['N', 'S', 'E', 'O']
|
|
# Étiquette des commandes clavier des de deplacements pour l'affichage
|
|
# de l'aide. Garder la correspondance
|
|
DIRECTIONS_LABEL = ['nord',
|
|
'sud',
|
|
'est',
|
|
'ouest']
|
|
|
|
# Pepertoire des fichiers carte
|
|
MAP_DIRECTORY = 'cartes/'
|
|
# Extention des fichiers carte
|
|
MAP_EXTENTION = '.txt'
|
|
# Elements dispo dans le labyrinthe
|
|
MAZE_ELEMENTS = {'wall': 'O',
|
|
'door': '.',
|
|
'exit': 'U',
|
|
'robo': 'X',
|
|
'void': ' '}
|
|
# Issue possible d'un mouvement, garder le OK toujours en fin de liste
|
|
MOVE_STATUS = ['bad', 'wall', 'exit', 'door', 'ok']
|
|
MOVE_STATUS_MSG = {
|
|
'bad': "Le déplacement «{}» n'est pas autorisé.",
|
|
'wall': "Le déplacement est stoppé par un mur.",
|
|
'exit': "Vous êtes sortit du labyrinte",
|
|
'door': "Vous passez une porte",
|
|
'ok': "Jusqu'ici, tout va bien…"
|
|
}
|
|
|
|
# Messages d'erreurs
|
|
ERR_ = "#!@?# Oups… "
|
|
ERR_MAP_FILE = ERR_ + "carte «{}» inaccessible!"
|
|
ERR_MAP_SIZE = ERR_ + "carte «{}», dimensions incorrecte: «{} x {}»"
|
|
ERR_MAP_ROBO = ERR_ + "robo est introuvable sur la carte «{}»!"
|
|
ERR_PLAGE = ERR_ + "saisir un nombre dans la plage indiquée! "
|
|
ERR_SAISIE = ERR_ + "saisir un nombre! "
|
|
ERR_UNKNOW = ERR_ + "personne n'est censé arriver ici…"
|
|
|
|
MIN_MAP_SIDE = 3
|
|
MIN_CLIENT_NB = 2
|
|
|
|
MSG_DISCLAMER = "Bienvenue dans Roboc."
|
|
MSG_AVAIBLE_MAP = "Cartes disponible: "
|
|
MSG_CHOOSE_MAP = "Choississez un numéro de carte: "
|
|
MSG_CHOOSE_MOVE = "Votre deplacement ({}:{}): "
|
|
MSG_START_GAME = "Votre partie commence"
|
|
MSG_REQUEST_START = "Entrez «PLAY» pour démarrer la partie: "
|
|
MSG_END_GAME = "Fin du jeu."
|
|
MSG_QUIT_GAME = "Vous quittez la partie"
|
|
# Recapitulatif des commandes
|
|
MSG_HELP = "Voici les commandes disponibles:\n"
|
|
MSG_SELECTED_MAP = "Vous avez fait le choix #{}, la carte «{}»."
|
|
MSG_CONNECTED_CLIENT = "Nb client connecté: {}: {}"
|
|
MSG_MINIMUM_CLIENT = "Nb client minimum: {}"
|
|
MAPS_NAME_LIST = list() # liste des maps proposees a l'utilisateur
|
|
|
|
# FONCTIONS
|
|
|
|
|
|
def cls():
|
|
""" Efface l'historique de la console """
|
|
import os
|
|
os.system('clear')
|
|
return
|
|
|
|
|
|
def choose_maps_menu():
|
|
"""
|
|
Affiche le menu de selection des cartes
|
|
|
|
Recupere les cartes dans un repertoire, demande a l'utilisateur,
|
|
de choisir et effectue quelques tests sur la carte jouee avant de
|
|
creer
|
|
|
|
:return str: nom de fichier de la carte choisi
|
|
"""
|
|
# VARIABLES
|
|
user_select_map_id = -1 # choix utilisateur: une carte
|
|
|
|
print(MSG_AVAIBLE_MAP)
|
|
i = 0
|
|
for maps_name in MAPS_NAME_LIST:
|
|
print("\t[{}] - {}".format(i, maps_name))
|
|
i += 1
|
|
|
|
# Choix de la carte par l'utilisateur
|
|
while user_select_map_id > len(MAPS_NAME_LIST) or user_select_map_id < 0:
|
|
user_select_map_id = input(MSG_CHOOSE_MAP)
|
|
try:
|
|
user_select_map_id = int(user_select_map_id)
|
|
# ? if user_select_map_id is int(): ?
|
|
except ValueError:
|
|
user_select_map_id = -1
|
|
continue
|
|
|
|
if user_select_map_id > len(MAPS_NAME_LIST) or \
|
|
user_select_map_id < 0:
|
|
print(ERR_PLAGE)
|
|
|
|
cls() # vide l'ecran de la console
|
|
print(MSG_SELECTED_MAP.format(
|
|
user_select_map_id,
|
|
MAPS_NAME_LIST[user_select_map_id]
|
|
))
|
|
|
|
# Fichier carte a recuperer
|
|
map_file = MAP_DIRECTORY + \
|
|
MAPS_NAME_LIST[user_select_map_id] + \
|
|
MAP_EXTENTION
|
|
|
|
return map_file
|
|
|
|
|
|
def get_msg_list(command, label):
|
|
"""
|
|
Formate une chaine pour afficher les commandes et leurs descriptifs
|
|
|
|
:type key: lst()
|
|
:param key: liste de commande
|
|
:type label: lst()
|
|
:param label: Texte descriptif des commande associee
|
|
:rtype: str()
|
|
:return: Chaine formatee assemblant les elements en parametres
|
|
"""
|
|
|
|
# Modele de mise en forme de la liste de chaque element
|
|
TEMPLATE = "\t- «{}»: {}\n"
|
|
|
|
# Variable de setour
|
|
result = str()
|
|
|
|
for key, value in enumerate(command):
|
|
result += TEMPLATE.format(value, label[key])
|
|
|
|
return result
|