Commit b6d22c06 authored by Théo BOUTEMY's avatar Théo BOUTEMY
Browse files

l'IA fonctionne

le jeu s'arrête proprement à la fin
parent 2423470b
......@@ -10,7 +10,7 @@ class Joueur(metaclass = ABCMeta):
def __init__(self, plateau):
self.plateau=plateau
self.coup=["entrer", "sortir", "orientation", "position","position","pousser", "pousser"] #coup possible pour l'IA
self.coup=["entrer","sortir", "pousser","pousser", "entrer en poussant","orientation"] #coup possible pour l'IA
self.numero_pieces=['0','1','2','3','4'] #numéro de pieces possibles pour l'IA
self.ori_possible=['droite','gauche','demi-tour','rien'] #orientation possible pour l'IA
......@@ -28,11 +28,11 @@ class Joueur(metaclass = ABCMeta):
bool=False
while not bool:
if self.nom=='IA':
n=self.numero_pieces[randint(0,5)]
coup=self.coup[randint(0,7)]
coup=self.coup[randint(0,5)]
else:
n = input('quelle piece voulez-vous bouger: 0? 1? 2? 3? 4?')
coup = input('quel coup souhaitez-vous faire: entrer? sortir? orientation? position? pousser?')
......@@ -42,70 +42,89 @@ class Joueur(metaclass = ABCMeta):
if n in ['0','1','2','3','4']:
n=int(n)
a, b = self.pieces_du_joueur()[n].coords[0], self.pieces_du_joueur()[n].coords[1]
if coup== 'entrer':
self.pieces_du_joueur()[n].tour_effectué=False
if self.nom=='IA':
i,j=randint(0,5),randint(0,5)
ori=self.ori_possible[randint(0,4)]
if coup== 'entrer':
self.pieces_du_joueur()[n].tour_effectué=False
if self.nom=='IA':
i,j=randint(0,5),randint(0,5)
ori=self.ori_possible[randint(0,4)]
else:
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
else:
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
if a in [0, 1, 2, 3, 4] and b in [0, 1, 2, 3, 4] and self.nom!='IA':
print('la piece est déjà rentrée sur le plateau')
if (i == 0 or i == 4 and j in [0,1,2,3,4]) or ( j == 4 or j == 0 and i in [0,1,2,3,4]):
self.pieces_du_joueur()[n].entrer(i,j,ori)
bool=self.pieces_du_joueur()[n].tour_effectué
else:
if self.nom!='IA':
print('une piece doit être rentrée par l exterieur du plateau')
bool=self.pieces_du_joueur()[n].tour_effectué
elif coup == 'sortir':
elif coup == 'sortir':
self.pieces_du_joueur()[n].tour_effectué = False
self.pieces_du_joueur()[n].tour_effectué = False
if (a in [-1, 0, 1, 2, 3, 4, 5] and b in [-1, 0, 1, 2, 3, 4, 5]):
if self.pieces_du_joueur()[n].coords[0] in [i for i in range (-1,6)] and self.pieces_du_joueur()[n].coords[1] in [i for i in range (-1,6)]: # une piece est alors sortie du plateau
self.pieces_du_joueur()[n].sortir()
bool = self.pieces_du_joueur()[n].tour_effectué
elif coup=='entrer en poussant':
self.pieces_du_joueur()[n].tour_effectué = False
if self.nom=='IA':
i,j=randint(-1,6),randint(-1,6)
ori=self.ori_possible[randint(0,4)]
else:
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
else:
if self.nom!='IA':
print("pour sortir une pièce, celle-ci doit être sur l'extérieur du plateau")
bool = self.pieces_du_joueur()[n].tour_effectué
elif coup=='entrer en poussant':
self.pieces_du_joueur()[n].tour_effectué = False
if self.nom=='IA':
i,j=randint(-1,6),randint(-1,6)
ori=self.ori_possible[randint(0,4)]
else:
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
if a in [0, 1, 2, 3, 4] and b in [0, 1, 2, 3, 4] and self.nom!='IA':
print('la piece est déjà rentrée sur le plateau')
if i == -1 or i == 5 or j == -1 or j == 5:
self.pieces_du_joueur()[n].entrer_en_poussant(i,j,ori)
bool = self.pieces_du_joueur()[n].tour_effectué
a,b= self.pieces_du_joueur()[n].coords
if (a not in [0,1,2,3,4] or b not in [0,1,2,3,4]):
else:
if self.nom!='IA':
print ('vous ne pouvez pas bouger une piece qui n est pas sur le plateau')
# ca c'est pour vérifier que la piece est bien sur le plateau avant de la faire boiger
print('pour rentrer en poussant, vous devez mettre la piece sur une case extérieure au plateau, la mettre dans la bonne orientation et pousser')
bool = self.pieces_du_joueur()[n].tour_effectué
elif coup=='pousser':
self.pieces_du_joueur()[n].tour_effectué=False
if coup == 'pousser':
self.pieces_du_joueur()[n].tour_effectué = False
if (a in [0, 1, 2, 3, 4] and b in [ 0, 1, 2, 3, 4]):
self.pieces_du_joueur()[n].pousser()
bool= self.pieces_du_joueur()[n].tour_effectué
else:
if self.nom != 'IA':
print('vous ne pouvez pas pousser une piece qui n est pas sur le plateau')
bool = self.pieces_du_joueur()[n].tour_effectué
elif coup== 'orientation':
self.pieces_du_joueur()[n].tour_effectué=False
elif coup== 'orientation':
self.pieces_du_joueur()[n].tour_effectué=False
if (a in [-1, 0, 1, 2, 3, 4, 5] and b in [-1, 0, 1, 2, 3, 4, 5]):
if self.nom=='IA':
ori=self.ori_possible[randint(0,4)]
else:
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
self.pieces_du_joueur()[n].changement_orientation(ori)
bool=self.pieces_du_joueur()[n].tour_effectué
else:
if self.nom != 'IA':
print('vous ne pouvez pas tourner une piece qui n est pas sur le plateau')
bool=self.pieces_du_joueur()[n].tour_effectué
elif coup== 'position':
self.pieces_du_joueur()[n].tour_effectué=False
elif coup== 'position':
self.pieces_du_joueur()[n].tour_effectué=False
if (a in [0, 1, 2, 3, 4] and b in [0, 1, 2, 3, 4]):
if self.nom=='IA':
i,j=randint(0,5),randint(0,5)
ori=self.ori_possible[randint(0,4)]
......@@ -114,7 +133,10 @@ class Joueur(metaclass = ABCMeta):
j = int(input('entrer la nouvelle ordonnée : '))
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
self.pieces_du_joueur()[n].changement_position(i,j,ori)
bool=self.pieces_du_joueur()[n].tour_effectué
else:
if self.nom != 'IA':
print('vous ne pouvez pas déplacer une piece qui n est pas sur le plateau')
bool=self.pieces_du_joueur()[n].tour_effectué
if n not in [0, 1, 2, 3, 4]:
print('numéro de piece non valide')
......
......@@ -204,64 +204,42 @@ class Animal(Piece, metaclass=ABCMeta):
Une case du plateau sera représentée par son abscisse et son ordonnée. Ainsi, une case extérieure
contient un 1 et/ou un 5 (dans le cas d'un plateau de taille 5*5)
"""
if self.coords[0] in [0, 1, 2, 3, 4] and self.coords[1] in [0, 1, 2, 3, 4]:
print('la piece est déjà rentrée sur le plateau')
else:
bool2=True #permet de savoir si la case est déjà occupée
for k in (self.plateau): # on vérifie que la case n'est pas déjà occupée
if k.coords == [i, j]:
print("la case choisie est déjà prise, choisir d'autres coordonnées")
bool2 = False
break
if bool2:
self.coords = [i, j]
self.changement_orientation(ori)
self.tour_effectué = True
if (i == 0 or i == 4) or (j == 4 or j == 0):
self.coords = i, j
self.changement_orientation(ori)
self.tour_effectué = True
else:
print('une pièce ne peut entrer sur le plateau que sur une case extérieure : rééssayez ')
def entrer_en_poussant(self,i,j,ori):
if self.coords[0] in [0, 1, 2, 3, 4] and self.coords[1] in [0, 1, 2, 3, 4]:
print('la piece est déjà rentrée sur le plateau')
else:
self.coords = [i, j]
self.changement_orientation(ori)
self.tour_effectué = False
self.pousser()
if self.coords[0] in [-1,5] or self.coords[1] in [-1,-2,5,6]: #ca veut dire que la pièce n'a pas pu entrer correctement
self.sortir() #on remet la piece à sa position initiale
self.tour_effectué=False # au final le tour n'est pas joué
if i == -1 or i == 5 or j == -1 or j == 5:
self.coords = i, j
self.changement_orientation(ori)
self.tour_effectué = False
self.pousser()
if self.tour_effectué==False: #ca veut dire que la pièce n'a pas pu entrer correctement
self.sortir() #on remet la piece à sa position initiale
self.tour_effectué=False # au final le tour n'est pas joué
else:
print('pour rentrer en poussant, vous devez mettre la piece sur une case extérieure au plateau, la mettre dans la bonne orientation et pousser ')
# if randint(0,2) == 0:
# if randint(0,2) == 0:
# self.coords= 0, randint(0,self.plateau.xmax)
# self.orientation= orientation_possible[randint(0,len(orientation_possible))]
# else:
# self.coords = randint(0,self.plateau.xmax) , 0
# self.orientation = orientation_possible[randint(0, len(orientation_possible))]
# else:
# if randint(0,2) == 0:
# self.coords= self.plateau.xmax , randint(0,self.plateau.xmax)
# self.orientation= orientation_possible[randint(0, len(orientation_possible))]
# else:
# self.coords = randint(0,self.plateau.xmax) , self.plateau.xmax
# self.orientation = orientation_possible[randint(0, len(orientation_possible))]
def sortir(self):
if self.car() == 'R':
self.coords = -2, self.numero
self.orientation='d'
else:
self.coords = 6, self.numero
self.orientation = 'g'
self.tour_effectué = True
......@@ -296,8 +274,7 @@ class Animal(Piece, metaclass=ABCMeta):
self.orientation = demi_tour[str(self.orientation)]
self.tour_effectué = True
print("votre pièce %c %i est à la position %s, orienté vers %c" % (
self.car(), self.numero, self.coords, self.orientation))
def changement_position(self,i,j,ori):
"""
......@@ -323,7 +300,7 @@ class Animal(Piece, metaclass=ABCMeta):
print("le déplacement n'est pas réglementaire, choisir d'autres coordonnées")
if bool2 and bool3:
self.coords = i, j
self.coords = [i, j]
self.changement_orientation(ori)
self.tour_effectué = True
......
......@@ -70,7 +70,29 @@ class TestAnimal(unittest.TestCase):
self.assertEqual(elephant2.coords, (3, 2))
self.assertEqual(elephant1.coords, (4, 2))
def test_changement_orientation(self):
plateau = t.Plateau(xmax=5, ymax=5, nb_montagne=3, joueur1=Theo, joueur2=Pauline)
elephant1 = p.Elephant(4, 3, 'g', plateau)
elephant2 = p.Elephant(4, 2, 'g', plateau)
elephant1.changement_orientation('gauche')
elephant2.changement_orientation('demi-tour')
self.assertEqual(elephant1.orientation, ('b'))
self.assertEqual(elephant2.orientation, ('d'))
def test_changement_position(self):
plateau = t.Plateau(xmax=5, ymax=5, nb_montagne=3, joueur1=Theo, joueur2=Pauline)
elephant1 = p.Elephant(4, 3, 'g', plateau)
elephant2 = p.Elephant(4, 2, 'h', plateau)
elephant1.changement_position(4,4,'rien')
elephant2.changement_position(4,2,'rien')
self.assertEqual(elephant1.coords, [4,4])
self.assertEqual(elephant2.coords, [4,2])
# def test_initialiserPlateau(self):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment