diff --git a/S2/TP3/bataille_navale_ia.py b/S2/TP3/bataille_navale_ia.py index 258e642..10f939a 100644 --- a/S2/TP3/bataille_navale_ia.py +++ b/S2/TP3/bataille_navale_ia.py @@ -32,7 +32,7 @@ def jouerIA(nom, descr, niveau): nbre_tirs = 0 res = False 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) nbre_tirs += 1 nav, res = BN.analyse_un_tir(jeu, tir) @@ -42,7 +42,8 @@ def jouerIA(nom, descr, niveau): print(nav + " touché.") else: 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) def choisir_tir(jeu, res, niveau): @@ -84,40 +85,41 @@ def en_bonds(esp, c): def choisir_tir_3(jeu, res): """ 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 - 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']['mode'] = 0 - jeu['ia']['cl'] = -1 + jeu['ia']['mode'] = 0 # 0 : aléatoire, 1 : cases adjacentes à la dernière touche + #jeu['ia']['cl'] = -1 if type(res) == int: if res == BN.COULE: - jeu['ia']['mode'] = 0 + jeu['ia']['mode'] = 0 # Retour en mode aléatoire 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 # Acteur - if jeu['ia']['mode'] == 1: # Si en mode recherche - proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)] + if jeu['ia']['mode'] == 1: # Si en mode adjacent + proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)] # Cases de proximité for i in proxi: x = jeu['ia']['d_touche'][0] + i[0] y = jeu['ia']['d_touche'][1] + i[1] coup = (x, y) if coup not in jeu['coups_joues'] and en_bonds(jeu['plateau'], coup): - break - if i == proxi[-1]: # Si sans succès, on essaye autre chose + break # Si coup non joué et dans le plateau, on valide + if i == proxi[-1]: # Si aucune case adjacente ne fonctionne, + # retour en mode aléatoire # (arrive quand 2 navires sont cote à cote) jeu['ia']['mode'] = 0 if jeu['ia']['mode'] == 0: # Si en mode aléatoire - while 1: + while True: x = randint(1, jeu['plateau']['larg']) y = randint(1, jeu['plateau']['larg']) coup = (x, y) if coup not in jeu['coups_joues']: break - jeu['ia']['d_coup'] = coup + jeu['ia']['d_coup'] = coup # Stockage du dernier coup joué return coup