This repository has been archived on 2019-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
s1-tp/S2/TP3/bataille_navale_ia.py

113 lines
3 KiB
Python
Raw Normal View History

2015-02-17 10:35:01 +01:00
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
TP AP1
Licence SESI 1ère année
Univ. Lille 1
IA bataille navale
"""
__author__ = 'BEAUSSART Jean-loup & PREUD\'HOMME Geoffrey'
__date_creation__ = 'Mon, 16 Feb 2015 19:30:54 +0100'
import bataille_navale as BN
2015-02-17 10:37:28 +01:00
from random import randint
2015-02-17 10:35:01 +01:00
def jouerIA(nom, descr, niveau):
"""
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.
CU : le fichier jeu doit exister et être conforme
à un fichier de description.
"""
jeu = BN.cree_jeu(descr)
BN.decrire_le_jeu(jeu)
nbre_tirs = 0
res = False
while not BN.tous_coules(jeu):
2015-02-17 10:37:28 +01:00
BN.afficher_jeu(jeu) # Décommenter pour une nouvelle fonctionalité
2015-02-17 10:35:01 +01:00
tir = choisir_tir(jeu, res, niveau)
nbre_tirs += 1
nav, res = BN.analyse_un_tir(jeu, tir)
print(res)
2015-02-17 10:35:01 +01:00
if res == BN.RATE:
print("raté.")
elif res == BN.TOUCHE:
print(nav + " touché.")
else:
print(nav + " coulé.")
2015-02-17 10:37:28 +01:00
BN.sauver_result(nom, descr, nbre_tirs)
2015-02-17 10:35:01 +01:00
print("Terminé en %d tirs" % nbre_tirs)
def choisir_tir(jeu, res, niveau):
niveaux = [choisir_tir_1, choisir_tir_2, choisir_tir_3]
2015-02-17 10:37:28 +01:00
fonction = niveaux[niveau - 1]
2015-02-17 11:10:23 +01:00
tir = fonction(jeu, res)
print('Tir chosi :', tir)
return tir
2015-02-17 10:37:28 +01:00
def choisir_tir_1(jeu, res):
2015-02-17 10:37:28 +01:00
x = randint(0, jeu['plateau']['larg'])
y = randint(0, jeu['plateau']['haut'])
return (x, y)
2015-02-17 10:35:01 +01:00
def choisir_tir_2(jeu, res):
x,y= randint(1, jeu['plateau']['larg']), randint(1, jeu['plateau']['haut'])
if len(jeu['coups_joues']) >= jeu['plateau']['larg']*jeu['plateau']['haut']:
print('J\'ai tiré partout')
raise ValueError
while (x,y) in jeu['coups_joues']:
x = randint(1, jeu['plateau']['larg'])
y = randint(1, jeu['plateau']['haut'])
return (x, y)
def choisir_tir_3(jeu, res):
# Définition du mode
if 'ia' not in jeu:
jeu['ia'] = dict()
jeu['ia']['mode'] = 0
print(type(res), res)
if type(res) == int:
if res == BN.COULE:
jeu['ia']['mode'] = 0
elif res == BN.TOUCHE:
print('Again')
jeu['ia']['mode'] = 1
# Acteur
if jeu['ia']['mode'] == 1: # Si en mode recherche
print('DEBUG MODE RECHERCHE')
while 1:
x = randint(0, jeu['plateau']['larg'])
y = randint(0, jeu['plateau']['larg'])
coup = (x, y)
if coup not in jeu['coups_joues']:
break
else: # Si en mode aléatoire
while 1:
x = randint(0, jeu['plateau']['larg'])
y = randint(0, jeu['plateau']['larg'])
coup = (x, y)
if coup not in jeu['coups_joues']:
break
d_coup = coup
return coup
2015-02-17 10:35:01 +01:00
if __name__ == '__main__':
import sys
if len(sys.argv) != 4:
jouerIA('Pirate borgne', '1', 2)
2015-02-17 10:35:01 +01:00
else:
jouerIA(sys.argv[1], sys.argv[2], int(sys.argv[3]))