2018-02-06 16:59:29 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
"""
|
|
|
|
Author: freezed <freezed@users.noreply.github.com> 2018-02-06
|
|
|
|
Version: 0.1
|
|
|
|
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.
|
|
|
|
|
|
|
|
:Example:
|
|
|
|
>>> a = 10
|
|
|
|
>>> a + 5
|
|
|
|
15
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
2018-02-09 17:10:32 +00:00
|
|
|
from map import Map
|
2018-02-08 08:54:21 +00:00
|
|
|
import os
|
2018-02-06 16:59:29 +00:00
|
|
|
import pickle
|
|
|
|
|
|
|
|
# CONFIGURATION
|
2018-02-08 14:39:20 +00:00
|
|
|
MAP_DIRECTORY = 'cartes/' # repertoire des fichiers carte
|
2018-02-08 08:54:21 +00:00
|
|
|
MAP_EXTENTION = '.txt' # extention des fichiers carte
|
|
|
|
SAVED_GAME_FILENAME = '.backup' # fichier de sauvegarde
|
|
|
|
DIRECTIONS = ['n', 'e', 's', 'o'] # commandes de deplacement
|
|
|
|
MAZE_ELEMENTS = {'wall':'O', # elements disponibles dans le labyrinthe
|
|
|
|
'door':'.',
|
|
|
|
'exit':'U',
|
|
|
|
'robo':'X'}
|
2018-02-09 15:11:31 +00:00
|
|
|
# ERR_MAP_FILE = "ERR_MAP_FILE"
|
2018-02-08 14:24:09 +00:00
|
|
|
ERR_PLAGE = "Il faut saisir un nombre dans la plage indiquée! "
|
|
|
|
ERR_SAISIE = "Il faut saisir un nombre! "
|
2018-02-08 08:54:21 +00:00
|
|
|
MSG_DISCLAMER = "Bienvenue dans Roboc."
|
2018-02-08 14:24:09 +00:00
|
|
|
MSG_AVAIBLE_MAP = "Cartes disponible: "
|
|
|
|
MSG_CHOOSE_MAP = "Choississez un numéro de carte: "
|
|
|
|
MSG_SELECTED_MAP = "Vous avez fait le choix #{}, la carte «{}»."
|
2018-02-09 17:10:32 +00:00
|
|
|
DEBUG = False
|
2018-02-08 08:54:21 +00:00
|
|
|
|
2018-02-06 16:59:29 +00:00
|
|
|
# VARIABLES
|
2018-02-08 08:54:21 +00:00
|
|
|
maps_name_list = list() # liste des maps proposees a l'utilisateur
|
2018-02-08 14:24:09 +00:00
|
|
|
selected_map = -1 # carte choisie par l'utilisateur
|
2018-02-08 08:54:21 +00:00
|
|
|
|
2018-02-09 15:11:31 +00:00
|
|
|
|
2018-02-08 08:54:21 +00:00
|
|
|
# FONCTIONS
|
|
|
|
|
2018-02-06 16:59:29 +00:00
|
|
|
|
|
|
|
# DEBUT DU JEU
|
|
|
|
|
2018-02-08 08:54:21 +00:00
|
|
|
# Recuperation de la liste des cartes
|
|
|
|
try:
|
|
|
|
maps_avaiable = os.listdir(MAP_DIRECTORY)
|
|
|
|
except FileNotFoundError as except_detail:
|
|
|
|
print("FileNotFoundError: «{}»".format(except_detail))
|
|
|
|
else:
|
|
|
|
for map_file in maps_avaiable:
|
|
|
|
filename_len = len(map_file) - len(MAP_EXTENTION)
|
|
|
|
|
|
|
|
# garde les fichiers avec la bonne extention
|
|
|
|
if map_file[filename_len:] == MAP_EXTENTION:
|
|
|
|
maps_name_list.append(map_file[:filename_len])
|
|
|
|
|
2018-02-09 15:11:31 +00:00
|
|
|
# Fichier carte a recuperer
|
|
|
|
map_file = MAP_DIRECTORY + maps_name_list[selected_map] + MAP_EXTENTION
|
|
|
|
|
2018-02-08 14:24:09 +00:00
|
|
|
#Chercher si une sauvegarde existe
|
|
|
|
# TODO
|
|
|
|
|
|
|
|
# Affichage du debut de partie
|
2018-02-08 08:54:21 +00:00
|
|
|
i = 0
|
|
|
|
print(MSG_DISCLAMER)
|
2018-02-08 14:24:09 +00:00
|
|
|
print(MSG_AVAIBLE_MAP)
|
2018-02-08 08:54:21 +00:00
|
|
|
for maps_name in maps_name_list:
|
|
|
|
print("\t[{}] - {}".format(i, maps_name))
|
|
|
|
i += 1
|
|
|
|
|
2018-02-08 14:24:09 +00:00
|
|
|
# Choix de la carte par l'utilisateur
|
|
|
|
while selected_map > len(maps_name_list) or selected_map < 0:
|
|
|
|
selected_map = input(MSG_CHOOSE_MAP)
|
|
|
|
try:
|
|
|
|
selected_map = int(selected_map)
|
2018-02-09 17:10:32 +00:00
|
|
|
except ValueError as except_detail:
|
|
|
|
if DEBUG:
|
|
|
|
print("ValueError: «{}»".format(except_detail))
|
|
|
|
else:
|
|
|
|
print(ERR_SAISIE)
|
2018-02-08 14:24:09 +00:00
|
|
|
selected_map = -1
|
|
|
|
continue
|
2018-02-08 08:54:21 +00:00
|
|
|
|
2018-02-08 14:24:09 +00:00
|
|
|
if selected_map > len(maps_name_list) or selected_map < 0:
|
|
|
|
print(ERR_PLAGE)
|
2018-02-06 16:59:29 +00:00
|
|
|
|
2018-02-08 14:39:20 +00:00
|
|
|
# DEBUT DE BOUCLE DE TOUR DE JEU
|
2018-02-08 14:24:09 +00:00
|
|
|
|
2018-02-08 14:39:20 +00:00
|
|
|
# TODO : clear screen
|
|
|
|
|
|
|
|
print(MSG_SELECTED_MAP.format(selected_map, maps_name_list[selected_map]))
|
2018-02-06 16:59:29 +00:00
|
|
|
|
2018-02-08 14:39:20 +00:00
|
|
|
# Affichage de la carte et de la position de jeu
|
|
|
|
# print(map_file)
|
2018-02-09 15:11:31 +00:00
|
|
|
print(map_data_text)
|
|
|
|
print("X" in map_data_list)
|
2018-02-06 16:59:29 +00:00
|
|
|
|
2018-02-08 14:24:09 +00:00
|
|
|
# Fin de partie
|
2018-02-06 16:59:29 +00:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
""" Starting doctests """
|
2018-02-09 15:11:31 +00:00
|
|
|
import doctest
|
|
|
|
doctest.testmod()
|