1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Python 3
import sys
import os
def charge_lab(nom):
"""
Charge le labyrinthe depuis le fichier nom.txt
nom : nom du fichier sans l'extension .txt
retour
liste contenant le labyrinthe
"""
fichier = open(nom + ".txt" , "r")
datas = fichier.readlines()
fichier.close()
for i in range(len(datas)):
datas[i] = datas[i].strip()
return datas
def barre_score(num_level):
"""
Barre de score. Pour l'instant n'affiche que le niveau de jeu
num_level : niveau actuel
pas de retour
"""
print("Niveau actuel : {:3d}".format(num_level))
def aff_lab(lab, perso, position):
"""
Affichage d'un labyrinthe
perso : caractère représentant le personnage
position : liste de deux coordonnées = position du personnage
position[0] = n° de colonne
position[1] = n° de ligne
pas de valeur de retour
"""
n_ligne = 0
for ligne in lab :
if n_ligne == position[1] :
print(ligne[0:position[0]] + perso + ligne[position[0]+1:])
else:
print(ligne)
n_ligne += 1 # équivalent à n_ligne = n_ligne + 1
def efface_console():
"""
Efface l'écran de la console pour éviter l'effet visuel
de décalage de l'affichage à chaque déplacement
"""
if sys.platform.startswith("win") :
os.system("cls") # Cde windows d'effacement d'une console
else :
os.system("clear") # Cde Linux ou OSX (apple)
def verification(lab,colonne,ligne):
"""
Vérifie les nouvelles coordonnées du personnage
Elles doivent être à l'interieur du labyrinthe
lab : variable (liste) contenant le labyrinthe
colonne : la nouvelle valeur de colonne voulue
ligne : la nouvelle valeur de ligne voulue
retour :
None = déplacement interdit
[col,ligne] = nouvelle position autorisée
"""
nbre_colonnes = len(lab[0]) # = la longueur de la 1ère ligne
nbre_lignes = len(lab) # = nombre d'éléments de lab
if ligne < 0 or ligne > (nbre_lignes - 1) or colonne < 0 or \
colonne > (nbre_colonnes - 1) : # le \ permet d'écrire sur
return None # plusieurs lignes
elif lab[colonne][ligne] == "S" : # C'est la sortie
return [-1,-1] # hors lab donc indique : gagné
elif lab[ligne][colonne] != " " : # la case n'est pas libre
return None # il y a un mur
else :
return [colonne,ligne] # ces coordonnées sont donc bonnes
def choix_deplacement(lab,position):
"""
Saisie du déplacement du personnage
Si le mouvement est autorisé modifie la position du personnage
qui est une variable (liste) globale
Sinon affiche "Déplacement impossible
lab : variable (liste) contenant le labyrinthe
position : liste contenant la colonne et la ligne actuelle
retour : position qui est la nouvelle position
"""
choix = input("Votre déplacement (h=haut/b=bas/d=droite/g=gauche/q=quitter) ? : ")
if choix != "h" or choix != "b" or choix != "g" or choix != "d" or choix != "q" :
dep = None # Si l'utilisateur a entrée une mauvaise commande
if (choix == "h" or choix == "haut") :
dep = verification(lab,position[0],position[1]-1)
if (choix == "b" or choix == "bas") :
dep = verification(lab,position[0],position[1]+1)
if (choix == "g" or choix == "gauche") :
dep = verification(lab,position[0]-1,position[1])
if (choix == "d" or choix == "droite") :
dep = verification(lab,position[0]+1,position[1])
if choix == "q" or choix == "quitter":
exit(0) # Stop le pgm. 0 indique aucune erreur
# on peut envoyer un code erreur de 1 à 255
if dep == None :
print("Déplacement impossible")
input("Appuyer sur <Return> (touche <Entrée>) pour continuer")
else :
position = dep
return position |
Partager