From 5b75e9904c1a149741badeeb06f61b48e0b38c6e Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Tue, 17 Feb 2015 11:49:47 +0100 Subject: [PATCH] =?UTF-8?q?TP3A=20choisir=5Ftir=5F3=20vraiment=20fix=C3=A9?= =?UTF-8?q?=20et=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- S2/TP3/bataille_navale_ia.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/S2/TP3/bataille_navale_ia.py b/S2/TP3/bataille_navale_ia.py index 265e706..258e642 100644 --- a/S2/TP3/bataille_navale_ia.py +++ b/S2/TP3/bataille_navale_ia.py @@ -19,7 +19,7 @@ from random import randint def jouerIA(nom, descr, niveau): """ - str, str -> () + str, str → () procédure de jeu complet de bataille navale, le nom du joueur est donné par le paramètre nom, et le jeu est décrit dans le fichier descr. @@ -36,7 +36,6 @@ def jouerIA(nom, descr, niveau): tir = choisir_tir(jeu, res, niveau) nbre_tirs += 1 nav, res = BN.analyse_un_tir(jeu, tir) - print(res) if res == BN.RATE: print("raté.") elif res == BN.TOUCHE: @@ -54,16 +53,18 @@ def choisir_tir(jeu, res, niveau): return tir def choisir_tir_1(jeu, res): - """ dict, int -> (int, int) - IA de bas niveau, tire aléatoirement dans la grille + """ + dict, int → (int, int) + IA de bas niveau, tire aléatoirement dans la grille """ x = randint(0, jeu['plateau']['larg']) y = randint(0, jeu['plateau']['haut']) return (x, y) def choisir_tir_2(jeu, res): - """ dict, int -> (int, int) - IA moyenne, tire aléatoirement mais jamais deux fois au même endroit + """ + dict, int → (int, int) + IA moyenne, tire aléatoirement mais jamais deux fois au même endroit """ x,y= randint(1, jeu['plateau']['larg']), randint(1, jeu['plateau']['haut']) @@ -74,37 +75,42 @@ def choisir_tir_2(jeu, res): return (x, y) def en_bonds(esp, c): + """ + dict, tuple → bool + Indique si la position c est dans l'espace maritime esp + """ return not (c[0] > esp['larg'] or c[0] <= 0 or c[1] <= 0 or c[1] > esp['haut']) def choisir_tir_3(jeu, res): + """ + dict, int → (int, int) + IA forte, prend en priorité les cases adjacentes à celles touchées + """ # Choix du mode if 'ia' not in jeu: jeu['ia'] = dict() jeu['ia']['mode'] = 0 + jeu['ia']['cl'] = -1 if type(res) == int: if res == BN.COULE: - # input("COULÉ") jeu['ia']['mode'] = 0 elif res == BN.TOUCHE: - # input("TOUCHÉ") jeu['ia']['d_touche'] = jeu['ia']['d_coup'] jeu['ia']['mode'] = 1 # Acteur if jeu['ia']['mode'] == 1: # Si en mode recherche - # print('DEBUG MODE RECHERCHE', jeu['ia']['d_touche']) proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)] for i in proxi: x = jeu['ia']['d_touche'][0] + i[0] y = jeu['ia']['d_touche'][1] + i[1] coup = (x, y) - # print('COUP', coup) 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 # (arrive quand 2 navires sont cote à cote) jeu['ia']['mode'] = 0 - else: # Si en mode aléatoire + if jeu['ia']['mode'] == 0: # Si en mode aléatoire while 1: x = randint(1, jeu['plateau']['larg']) y = randint(1, jeu['plateau']['larg'])