TP3A choisir_tir_3 vraiment fixé et documentation
This commit is contained in:
parent
75b07840c0
commit
5b75e9904c
|
@ -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,16 +53,18 @@ 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)
|
"""
|
||||||
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'])
|
x = randint(0, jeu['plateau']['larg'])
|
||||||
y = randint(0, jeu['plateau']['haut'])
|
y = randint(0, jeu['plateau']['haut'])
|
||||||
return (x, y)
|
return (x, y)
|
||||||
|
|
||||||
def choisir_tir_2(jeu, res):
|
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'])
|
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'])
|
||||||
|
|
Reference in a new issue