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

debut d'ia

parent 1c642e25
......@@ -10,6 +10,9 @@ class Joueur(metaclass = ABCMeta):
def __init__(self, plateau):
self.plateau=plateau
self.coup=["entrer", "sortir", "orientation", "position", "pousser"] #coup possible pour l'IA
self.numero_pieces=['0','1','2','3','4','5'] #numéro de pieces possibles pour l'IA
self.ori_possible=['droite','gauche','demi-tour','rien'] #orientation possible pour l'IA
@abstractmethod
......@@ -26,9 +29,13 @@ class Joueur(metaclass = ABCMeta):
bool=False
while not bool:
if self.nom=='IA':
n=self.numero_pieces[randint(0,6)]
coup=self.coup[randint(0,5)]
n = input('quelle piece voulez-vous bouger: 0? 1? 2? 3? 4?')
coup = input('quel coup souhaitez-vous faire: entrer? sortir? orientation? position? pousser?')
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?')
if coup not in ['entrer', 'sortir','orientation', 'position' ,'pousser', 'entrer en poussant']:
print('coup non reconnu')
......@@ -38,17 +45,37 @@ class Joueur(metaclass = ABCMeta):
if coup== 'entrer':
self.pieces_du_joueur()[n].tour_effectué=False
self.pieces_du_joueur()[n].entrer()
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 ? ')
self.pieces_du_joueur()[n].entrer(i,j,ori)
bool=self.pieces_du_joueur()[n].tour_effectué
elif coup== 'sortir':
self.pieces_du_joueur()[n].tour_effectué=False
self.pieces_du_joueur()[n].sortir()
bool=self.pieces_du_joueur()[n].tour_effectué
elif coup == 'sortir':
self.pieces_du_joueur()[n].tour_effectué = False
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
self.pieces_du_joueur()[n].entrer_en_poussant()
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 ? ')
self.pieces_du_joueur()[n].entrer_en_poussant(i,j,ori)
bool = self.pieces_du_joueur()[n].tour_effectué
......@@ -68,13 +95,24 @@ class Joueur(metaclass = ABCMeta):
elif coup== 'orientation':
self.pieces_du_joueur()[n].tour_effectué=False
self.pieces_du_joueur()[n].changement_orientation()
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é
elif coup== 'position':
self.pieces_du_joueur()[n].tour_effectué=False
self.pieces_du_joueur()[n].changement_position()
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 ? ')
self.pieces_du_joueur()[n].changement_position(i,j,ori)
bool=self.pieces_du_joueur()[n].tour_effectué
else:
......@@ -85,7 +123,8 @@ class Joueur(metaclass = ABCMeta):
if i.coords[0] in [-1, 5] or i.coords[1] in [5, -1, -2, 6]: # une piece est alors sortie du plateau
if i.car() in ['R', 'E']:
i.sortir()
if bool:
print(n,coup)
......@@ -108,5 +147,17 @@ class Pauline(Joueur):
def pieces_du_joueur(self):
return self.plateau.rhino
class IA(Joueur):
def __init__(self,plateau):
super().__init__(plateau)
self.nom='IA'
self.description = 'au tour de l IA, qui joue les rhinoceros'
def pieces_du_joueur(self):
return self.plateau.rhino
......@@ -198,7 +198,7 @@ class Animal(Piece, metaclass=ABCMeta):
else:
print('vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée')
def entrer(self):
def entrer(self,i,j,ori):
"""
cette fonction permet d'entrer un des animaux par l'une des cases extérieures
Une case du plateau sera représentée par son abscisse et son ordonnée. Ainsi, une case extérieure
......@@ -209,30 +209,28 @@ class Animal(Piece, metaclass=ABCMeta):
else:
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
if (i == 0 or i == 4) or (j == 4 or j == 0):
self.coords = i, j
self.changement_orientation()
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):
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:
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
if i == -1 or i == 5 or j == -1 or j == 5:
self.coords = i, j
self.changement_orientation()
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
......@@ -267,7 +265,7 @@ class Animal(Piece, metaclass=ABCMeta):
self.tour_effectué = True
def changement_orientation(self):
def changement_orientation(self,ori):
"""
la pièce change d'orientation
......@@ -286,7 +284,7 @@ class Animal(Piece, metaclass=ABCMeta):
'b': 'h',
'd': 'g'}
ori = input('droite? gauche? ou demi-tour? ou rien ? ')
if ori == 'droite':
self.orientation = tourner_droite[str(self.orientation)]
self.tour_effectué = True
......@@ -301,7 +299,7 @@ class Animal(Piece, metaclass=ABCMeta):
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):
def changement_position(self,i,j,ori):
"""
La pièce ne peut que se déplacer sur une case à coté d'elle, hors diagonale,
et cette méthode ne prend en compte le mouvement qu'à condition que la case d'arrivée soit vide
......@@ -309,8 +307,7 @@ class Animal(Piece, metaclass=ABCMeta):
Lorsque la pièce change de case elle peut aussi changer d'orientation
"""
i = int(input('entrer la nouvelle abscisse : '))
j = int(input('entrer la nouvelle ordonnée : '))
bool2 = True # on vérifie que la case n'est pas déjà occupée
bool3 = False # on vérifie que le déplacement est bien réglementaire, c'est à dire sur une case adjacente, et pas en diagonale
for k in (self.plateau): # on vérifie que la case n'est pas déjà occupée
......@@ -328,7 +325,7 @@ class Animal(Piece, metaclass=ABCMeta):
if bool2 and bool3:
self.coords = i, j
self.changement_orientation()
self.changement_orientation(ori)
self.tour_effectué = True
else:
......
......@@ -3,7 +3,7 @@ from numpy.random import randint
import sys
from abc import ABC, abstractmethod
from pieces import Piece, Montagne, Animal, Elephant, Rhinoceros
from joueur import Joueur, Theo, Pauline
from joueur import Joueur, Theo, Pauline,IA
class Plateau(list):
......@@ -228,6 +228,6 @@ class Plateau(list):
if __name__ == "__main__":
plateau = Plateau(xmax=5, ymax=5, nb_montagne=3, joueur1=Theo, joueur2=Pauline)
plateau = Plateau(xmax=5, ymax=5, nb_montagne=3, joueur1=Theo, joueur2=IA)
Plateau.jouer(plateau)
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