TP3A choisir_tir_3 vraiment fixé et documentation

This commit is contained in:
Geoffrey Frogeye 2015-02-17 11:49:47 +01:00
parent 75b07840c0
commit 5b75e9904c

View file

@ -19,7 +19,7 @@ from random import randint
def jouerIA(nom, descr, niveau): def jouerIA(nom, descr, niveau):
""" """
str, str -> () str, str ()
procédure de jeu complet de bataille navale, procédure de jeu complet de bataille navale,
le nom du joueur est donné par le paramètre nom, le nom du joueur est donné par le paramètre nom,
et le jeu est décrit dans le fichier descr. 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) 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)
print(res)
if res == BN.RATE: if res == BN.RATE:
print("raté.") print("raté.")
elif res == BN.TOUCHE: elif res == BN.TOUCHE:
@ -54,7 +53,8 @@ def choisir_tir(jeu, res, niveau):
return tir return tir
def choisir_tir_1(jeu, res): def choisir_tir_1(jeu, res):
""" dict, int -> (int, int) """
dict, int (int, int)
IA de bas niveau, tire aléatoirement dans la grille IA de bas niveau, tire aléatoirement dans la grille
""" """
x = randint(0, jeu['plateau']['larg']) x = randint(0, jeu['plateau']['larg'])
@ -62,7 +62,8 @@ def choisir_tir_1(jeu, res):
return (x, y) return (x, y)
def choisir_tir_2(jeu, res): def choisir_tir_2(jeu, res):
""" dict, int -> (int, int) """
dict, int (int, int)
IA moyenne, tire aléatoirement mais jamais deux fois au même endroit 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']) 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) return (x, y)
def en_bonds(esp, c): 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']) 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): def choisir_tir_3(jeu, res):
"""
dict, int (int, int)
IA forte, 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:
jeu['ia'] = dict() jeu['ia'] = dict()
jeu['ia']['mode'] = 0 jeu['ia']['mode'] = 0
jeu['ia']['cl'] = -1
if type(res) == int: if type(res) == int:
if res == BN.COULE: if res == BN.COULE:
# input("COULÉ")
jeu['ia']['mode'] = 0 jeu['ia']['mode'] = 0
elif res == BN.TOUCHE: elif res == BN.TOUCHE:
# input("TOUCHÉ")
jeu['ia']['d_touche'] = jeu['ia']['d_coup'] jeu['ia']['d_touche'] = jeu['ia']['d_coup']
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 recherche
# print('DEBUG MODE RECHERCHE', jeu['ia']['d_touche'])
proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)] proxi = [(0, 1), (0, -1), (1, 0), (-1, 0)]
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)
# print('COUP', coup)
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
if i == proxi[-1]: # Si sans succès, on essaye autre chose if i == proxi[-1]: # Si sans succès, on essaye autre chose
# (arrive quand 2 navires sont cote à cote) # (arrive quand 2 navires sont cote à cote)
jeu['ia']['mode'] = 0 jeu['ia']['mode'] = 0
else: # Si en mode aléatoire if jeu['ia']['mode'] == 0: # Si en mode aléatoire
while 1: while 1:
x = randint(1, jeu['plateau']['larg']) x = randint(1, jeu['plateau']['larg'])
y = randint(1, jeu['plateau']['larg']) y = randint(1, jeu['plateau']['larg'])