Pour le bonheur de mes yeux et de pylint
This commit is contained in:
Geoffrey Frogeye 2015-02-12 19:20:10 +01:00
parent 7c6eb18e9c
commit 882c3c89b9

View file

@ -16,7 +16,8 @@ http://fr.wikipedia.org/wiki/Bataille_navale_%28jeu%29
""" """
__author__ = 'BEAUSSART Jean-loup & PREUD\'HOMME Geoffrey' __author__ = 'BEAUSSART Jean-loup & PREUD\'HOMME Geoffrey'
__date_creation__ = 'Tue, 10 Feb 2015 11:26:19 +0100' # TODO Metre à jour avant envoi # TODO Metre à jour avant envoi
__date_creation__ = 'Tue, 10 Feb 2015 11:26:19 +0100'
############################################### ###############################################
@ -37,7 +38,7 @@ from datetime import datetime
# sur le plateau : # sur le plateau :
# - H : horizontale # - H : horizontale
# - V : verticale # - V : verticale
DISPOSITIONS="HV" DISPOSITIONS = "HV"
# codes réponses d'analyse de tirs # codes réponses d'analyse de tirs
@ -52,7 +53,8 @@ FICHIER_RESULT = 'bataille_navale_scores.txt'
# Procédure principale du jeu # Procédure principale du jeu
############################################### ###############################################
def jouer (nom,descr):
def jouer(nom, descr):
""" """
str, str -> () str, str -> ()
procédure de jeu complet de bataille navale, procédure de jeu complet de bataille navale,
@ -66,22 +68,23 @@ def jouer (nom,descr):
decrire_le_jeu(jeu) decrire_le_jeu(jeu)
nbre_tirs = 0 nbre_tirs = 0
while not tous_coules(jeu): while not tous_coules(jeu):
tir = lire_un_tir (nom) tir = lire_un_tir(nom)
nbre_tirs += 1 nbre_tirs += 1
nav,res = analyse_un_tir (jeu,tir) nav, res = analyse_un_tir(jeu, tir)
if res == RATE: if res == RATE:
print ("raté.") print("raté.")
elif res == TOUCHE: elif res == TOUCHE:
print (nav + " touché.") print(nav + " touché.")
else: else:
print (nav + " coulé.") print(nav + " coulé.")
sauver_result (nom,descr,nbre_tirs) sauver_result(nom, descr, nbre_tirs)
print ("Terminé en {0} tirs".format(nbre_tirs)) print("Terminé en {0} tirs".format(nbre_tirs))
############################################### ###############################################
# Opérations sur les fichiers # Opérations sur les fichiers
############################################### ###############################################
def lire_donnees(num_descr): def lire_donnees(num_descr):
""" """
str -> tuple str -> tuple
@ -103,68 +106,69 @@ def lire_donnees(num_descr):
contenu = fichier.readlines() contenu = fichier.readlines()
fichier.close() fichier.close()
#On lit la largeur # On lit la largeur
i=0 i = 0
tmp='' tmp = ''
while(contenu[0][i] != ':'): while contenu[0][i] != ':':
tmp += contenu[0][i] tmp += contenu[0][i]
i+=1 i += 1
largeur=int(tmp) largeur = int(tmp)
#On lit la hauteur # On lit la hauteur
i+=1 i += 1
tmp='' tmp = ''
while(contenu[0][i] != '\n'): while contenu[0][i] != '\n':
tmp += contenu[0][i] tmp += contenu[0][i]
i+=1 i += 1
hauteur=int(tmp) hauteur = int(tmp)
res = (largeur, hauteur, list()) res = (largeur, hauteur, list())
#On va maintenant traiter tous les bateaux un par un # On va maintenant traiter tous les bateaux un par un
for i in range(1, len(contenu)): for i in range(1, len(contenu)):
nom='' nom = ''
tailleStr='' tailleStr = ''
j=0 j = 0
while(contenu[i][j] != ':'): while contenu[i][j] != ':':
nom += contenu[i][j] nom += contenu[i][j]
j+=1 j += 1
nom = nom[:-1] #on supprime l'espace nom = nom[:-1] # on supprime l'espace
j+=1 j += 1
while(contenu[i][j] != '\n'): while contenu[i][j] != '\n':
tailleStr += contenu[i][j] tailleStr += contenu[i][j]
j +=1 j += 1
res[2].append((nom, int(tailleStr))) res[2].append((nom, int(tailleStr)))
return res return res
#test OK # test OK
#print(lire_donnees('2')) # print(lire_donnees('2'))
#print(lire_donnees('1')) # print(lire_donnees('1'))
# #
#Fichier personnalisé # Fichier personnalisé
#print(lire_donnees('3')) # print(lire_donnees('3'))
# #
# Sauvegarde du bilan # Sauvegarde du bilan
#q1 # q1
#print(datetime.today()) # print(datetime.today())
#2015-02-10 11:25:48.324981 # 2015-02-10 11:25:48.324981
#On obtient la date et l'heure au format AAAA-MM-JJ HH:MM:S # On obtient la date et l'heure au format AAAA-MM-JJ HH:MM:S
#str(datetime.today()) # str(datetime.today())
#on convertie en chaîne de caractères la date et l'heure # on convertie en chaîne de caractères la date et l'heure
def sauver_result (nom, jeu, nbre):
def sauver_result(nom, jeu, nbre):
""" """
str, str, int -> NoneType str, str, int -> NoneType
ajoute une ligne dans le fichier FICHIER_RESULT ajoute une ligne dans le fichier FICHIER_RESULT
@ -178,7 +182,7 @@ def sauver_result (nom, jeu, nbre):
fichierScores = open(FICHIER_RESULT, 'a') fichierScores = open(FICHIER_RESULT, 'a')
fichierScores.write('%s:%s:%s:%s\n' %(nom, jeu, nbre, date)) fichierScores.write('%s:%s:%s:%s\n' % (nom, jeu, nbre, date))
fichierScores.close() fichierScores.close()
@ -191,7 +195,8 @@ def sauver_result (nom, jeu, nbre):
# Procédures de construction du jeu # Procédures de construction du jeu
############################################### ###############################################
def cree_jeu (descr):
def cree_jeu(descr):
""" """
str -> dict str -> dict
renvoie un nouveau jeu de bataille navale construit à partir des données renvoie un nouveau jeu de bataille navale construit à partir des données
@ -213,7 +218,7 @@ def cree_jeu (descr):
""" """
def cree_plateau (l, h, l_nav): def cree_plateau(l, h, l_nav):
""" """
int, int, list -> dict int, int, list -> dict
renvoie un plateau de largeur l et de hauteur h occupé par les navires renvoie un plateau de largeur l et de hauteur h occupé par les navires
@ -223,20 +228,21 @@ def cree_plateau (l, h, l_nav):
CU : les dimensions doivent permettre le placement de tous les navires CU : les dimensions doivent permettre le placement de tous les navires
""" """
def est_placable (esp, nav, pos, disp):
def est_placable(esp, nav, pos, disp):
""" """
dict, tuple, tuple, str -> bool dict, tuple, tuple, str -> bool
CU : disp = 'H' ou 'V' CU : disp = 'H' ou 'V'
""" """
assert(disp == 'H' or disp == 'V') assert(disp == 'H' or disp == 'V'), 'disp = \'H\' ou \'V\''
if pos[0] > esp['larg'] or pos[0] < 0 or pos[1] < 0 or pos[1] > esp['haut']: if pos[0] > esp['larg'] or pos[0] < 0 or pos[1] < 0 or pos[1] > esp['haut']:
return False return False
def placer (esp, nav): def placer(esp, nav):
""" """
dict, tuple -> NoneType dict, tuple -> NoneType
place le navire nav dans l'espace maritime esp. place le navire nav dans l'espace maritime esp.
@ -250,7 +256,7 @@ def placer (esp, nav):
# Procédures de déroulement du jeu # Procédures de déroulement du jeu
############################################### ###############################################
def decrire_le_jeu (jeu): def decrire_le_jeu(jeu):
""" """
dict -> () dict -> ()
imprime une description du jeu. imprime une description du jeu.
@ -264,10 +270,13 @@ def decrire_le_jeu (jeu):
print('Navires :') print('Navires :')
etats = jeu['touches']['etats_navires'] etats = jeu['touches']['etats_navires']
for navire in etats: for navire in etats:
print('- %s : %d case%s' % (navire, etats[navire], 's' * (etats[navire] >= 2))) print('- %s : %d case%s' %
print('À vous de jouer en répondant à l\'invite ?- par deux nombres séparés par une virgule.') (navire, etats[navire], 's' * (etats[navire] >= 2)))
print(
'À vous de jouer en répondant à l\'invite ?- par deux nombres séparés par une virgule.')
def lire_un_tir (nom):
def lire_un_tir(nom):
""" """
str -> tuple str -> tuple
renvoie un couple d'entiers lus sur l'entrée standard renvoie un couple d'entiers lus sur l'entrée standard
@ -277,20 +286,18 @@ def lire_un_tir (nom):
""" """
while True: while True:
try: try:
entree = input() # TODO Texte entree = input() # TODO Texte
dec = entree.split(',') dec = entree.split(',')
x, y = int(dec[0]), int(dec[1]) x, y = int(dec[0]), int(dec[1])
if type(x) == type(y) == int and x >= 0 and y >= 0: if type(x) == type(y) == int and x >= 0 and y >= 0:
return (x, y) return (x, y)
else: else:
raise ValueError raise ValueError
except: # TODO Tester erreurs possibles except: # TODO Tester erreurs possibles
print('Merci de saisir une valeur correcte.') print('Merci de saisir une valeur correcte.')
def analyse_un_tir(jeu, tir):
def analyse_un_tir (jeu,tir):
""" """
dict, tuple -> str,int dict, tuple -> str,int
renvoie renvoie
@ -317,7 +324,7 @@ def analyse_un_tir (jeu,tir):
return ('', RATE) return ('', RATE)
def tous_coules (jeu): def tous_coules(jeu):
""" """
dict -> bool dict -> bool
renvoie True si tous les navires du plateau de jeu ont été coulés renvoie True si tous les navires du plateau de jeu ont été coulés
@ -329,7 +336,6 @@ def tous_coules (jeu):
return jeu['touches']['nb_touches'] >= jeu['nb_cases_occupees'] return jeu['touches']['nb_touches'] >= jeu['nb_cases_occupees']
############################################### ###############################################
# Pour une utilisation du module depuis un terminal # Pour une utilisation du module depuis un terminal
############################################### ###############################################
@ -341,6 +347,3 @@ def tous_coules (jeu):
# jouer ('Jean Bart','1') # jouer ('Jean Bart','1')
# else: # else:
# jouer (sys.argv[1],sys.argv[2]) # jouer (sys.argv[1],sys.argv[2])