TP3A Ajout de quelques commentaires

This commit is contained in:
Geoffrey Frogeye 2015-02-22 12:59:51 +01:00
parent 5b75e9904c
commit c26cb355eb

View file

@ -32,7 +32,7 @@ def jouerIA(nom, descr, niveau):
nbre_tirs = 0 nbre_tirs = 0
res = False res = False
while not BN.tous_coules(jeu): while not BN.tous_coules(jeu):
BN.afficher_jeu(jeu) # Décommenter pour une nouvelle fonctionalité BN.afficher_jeu(jeu)
tir = choisir_tir(jeu, res, niveau) tir = choisir_tir(jeu, res, niveau)
nbre_tirs += 1 nbre_tirs += 1
nav, res = BN.analyse_un_tir(jeu, tir) nav, res = BN.analyse_un_tir(jeu, tir)
@ -42,7 +42,8 @@ def jouerIA(nom, descr, niveau):
print(nav + " touché.") print(nav + " touché.")
else: else:
print(nav + " coulé.") print(nav + " coulé.")
BN.sauver_result(nom, descr, nbre_tirs) BN.sauver_result(nom+' (IA)', descr, nbre_tirs)
# On rajoute IA dans les scores pour repérér les tricheurs
print("Terminé en %d tirs" % nbre_tirs) print("Terminé en %d tirs" % nbre_tirs)
def choisir_tir(jeu, res, niveau): def choisir_tir(jeu, res, niveau):
@ -84,40 +85,41 @@ def en_bonds(esp, c):
def choisir_tir_3(jeu, res): def choisir_tir_3(jeu, res):
""" """
dict, int (int, int) dict, int (int, int)
IA forte, prend en priorité les cases adjacentes à celles touchées IA bonne, prend en priorité les cases adjacentes à celles touchées
""" """
# Choix du mode # Choix du mode
if 'ia' not in jeu: if 'ia' not in jeu: # On crée un dict qui stockera quelques variables utiles
jeu['ia'] = dict() jeu['ia'] = dict()
jeu['ia']['mode'] = 0 jeu['ia']['mode'] = 0 # 0 : aléatoire, 1 : cases adjacentes à la dernière touche
jeu['ia']['cl'] = -1 #jeu['ia']['cl'] = -1
if type(res) == int: if type(res) == int:
if res == BN.COULE: if res == BN.COULE:
jeu['ia']['mode'] = 0 jeu['ia']['mode'] = 0 # Retour en mode aléatoire
elif res == BN.TOUCHE: elif res == BN.TOUCHE:
jeu['ia']['d_touche'] = jeu['ia']['d_coup'] jeu['ia']['d_touche'] = jeu['ia']['d_coup'] # Stockage de a dernière touche
jeu['ia']['mode'] = 1 jeu['ia']['mode'] = 1
# Acteur # Acteur
if jeu['ia']['mode'] == 1: # Si en mode recherche if jeu['ia']['mode'] == 1: # Si en mode adjacent
proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)] proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)] # Cases de proximité
for i in proxi: for i in proxi:
x = jeu['ia']['d_touche'][0] + i[0] x = jeu['ia']['d_touche'][0] + i[0]
y = jeu['ia']['d_touche'][1] + i[1] y = jeu['ia']['d_touche'][1] + i[1]
coup = (x, y) coup = (x, y)
if coup not in jeu['coups_joues'] and en_bonds(jeu['plateau'], coup): if coup not in jeu['coups_joues'] and en_bonds(jeu['plateau'], coup):
break break # Si coup non joué et dans le plateau, on valide
if i == proxi[-1]: # Si sans succès, on essaye autre chose if i == proxi[-1]: # Si aucune case adjacente ne fonctionne,
# retour en mode aléatoire
# (arrive quand 2 navires sont cote à cote) # (arrive quand 2 navires sont cote à cote)
jeu['ia']['mode'] = 0 jeu['ia']['mode'] = 0
if jeu['ia']['mode'] == 0: # Si en mode aléatoire if jeu['ia']['mode'] == 0: # Si en mode aléatoire
while 1: while True:
x = randint(1, jeu['plateau']['larg']) x = randint(1, jeu['plateau']['larg'])
y = randint(1, jeu['plateau']['larg']) y = randint(1, jeu['plateau']['larg'])
coup = (x, y) coup = (x, y)
if coup not in jeu['coups_joues']: if coup not in jeu['coups_joues']:
break break
jeu['ia']['d_coup'] = coup jeu['ia']['d_coup'] = coup # Stockage du dernier coup joué
return coup return coup