Commit f2f84cc1 authored by Pauline LEYRIT's avatar Pauline LEYRIT
Browse files

je finis le commentaire de joueur apres

parent fb199590
......@@ -26,8 +26,9 @@ class Joueur(metaclass = ABCMeta):
"""
self.plateau=plateau
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.coup=["entrer","sortir", "pousser","pousser", "entrer en poussant","orientation"] #coup possible pour l'ia
#on met deux fois 'pousser' pour augmenter les chance que le cup se rpoduise (puisque il nécessite plus de conditions pour qu'il se produise)
self.numero_pieces=['0','1','2','3','4'] #numéro de pieces possibles pour l'IA (numérotés de 0 à 4)
self.ori_possible=['droite','gauche','demi-tour','rien'] #orientation possible pour l'IA
......@@ -44,58 +45,75 @@ class Joueur(metaclass = ABCMeta):
""" méthode permettant de jouer: on différencie le joueur humain et l'IA (pour ne pas afficher les messages
d'erreurs de l'ia qui seraient trop nombreux avant qu'elle ne fasse un tour valide)
on définit ici à qui est ce le tour, et en fonction du joueur (humain ou ia) on lui attribut les fonctions
corrspondantes au coup qu'il a choisit d'effectuer"""
On définit ici à qui est ce le tour, et en fonction du joueur (humain ou ia) on attribut les fonctions
corrspondantes au coup qu'il a choisit d'effectuer, c'est également ici que les paramètres des fonctions
sont entrés
C'est également cette méthode qui définiera certaines exception/conditions de jeux, le but étant de différencier
le cas où le joueur est l'ia de celui ou le joueur est humain, puisque les messages à afficher sont différents
Ainsi, si les deux types joueurs doivent vérifier les mêmes conditions, l'ia ne fait pas s'afficher les
messages d'erreur.
la fonction continue de laisser le joueur jouer jusqu'à ce que son tour ne soit valide
"""
f = open("historique des parties.txt", mode="a") # on ouvre un fichier texte en mode append
bool=False
while not bool:
if self.nom=='IA':
while not bool: # tourne tant que le joueur n'a pas validé son tour
# bool deviendra true lorsque la fonction appliquée dans pièce a pu être appliquée
# (le joueur respecte les conditions pour le coup)
if self.nom=='IA': # si c'est l'ia, on laisse choisir un numéro de pièce et de coup aléatoirement
n=self.numero_pieces[randint(0,5)]
coup=self.coup[randint(0,5)]
else:
else: # se le joueur est humain, on le laisse choisir
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')
print('coup non reconnu') # si jamais le joueur a mal orthographié son coup
if n in ['0','1','2','3','4']:
n=int(n)
n=int(n) # les input renvoient ce qui est entré par le joueur sous forme de str, on le met donc sous forme d'entier
a, b = self.pieces_du_joueur()[n].coords[0], self.pieces_du_joueur()[n].coords[1]
#on va maintenant associer l'action au coup choisit : on se servira des fonctions définies dans la classe pièce, mais
# elles ne sont pas complètes, c'est ici que la totalité des fonctions s'écrit
if coup== 'entrer':
self.pieces_du_joueur()[n].tour_effectué=False
if self.nom=='IA':
self.pieces_du_joueur()[n].tour_effectué=False #permet de laisser le joueur jouer, lorsque la variable
#deviendra True, cela signifiera que c'est au tour de l'adversaire
if self.nom=='IA': #choix des paramètres pour déplacer, en aléatoire
i,j=randint(0,5),randint(0,5)
ori=self.ori_possible[randint(0,4)]
else:
else: #choix des paramètres pour déplacer, par le joueur
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] :
if self.nom!='IA':
if a in [0, 1, 2, 3, 4] and b in [0, 1, 2, 3, 4] : #on test si la pièce n'étais pas déjà entré
if self.nom!='IA': #on affiche les messages d'erreurs uniquement si ce n'est pas l'ia (pour éviter
# d'en avoir trop à la fois
print('la piece est déjà rentrée sur le plateau')
else:
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)
self.pieces_du_joueur()[n].entrer(i,j,ori) #l'action n'a lieux que si les conditions sont respectées
# (il faut entrer sur une case situé sur un bord du plateau)
# ces condition s'applique à tous les joueurs
else:
if self.nom!='IA':
if self.nom!='IA': #toujour un message d'erreur uniquement pour l'humain
print('une piece doit être rentrée par l exterieur du plateau')
bool=self.pieces_du_joueur()[n].tour_effectué
bool=self.pieces_du_joueur()[n].tour_effectué # si la fonction entrer a été appelée, il devient True, sinon il reste
# False et cela signifie que le joueur rejoue
# cette méthode pour déterminer qui doit jouer, sera répétée
#pour tous les coups
elif coup == 'sortir':
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()
if (a in [ 0, 4] or b in [0, 4]): #on ne peut sortir que si la pièce est sur un bord du plateau
self.pieces_du_joueur()[n].sortir()
else:
if self.nom!='IA':
print("pour sortir une pièce, celle-ci doit être sur l'extérieur du plateau")
......@@ -104,6 +122,7 @@ class Joueur(metaclass = ABCMeta):
elif coup=='entrer en poussant':
self.pieces_du_joueur()[n].tour_effectué = False
#comme pour entrer, on laisse le joueur choisir les paramètres
if self.nom=='IA':
i,j=randint(-1,6),randint(-1,6)
ori=self.ori_possible[randint(0,4)]
......@@ -112,11 +131,12 @@ class Joueur(metaclass = ABCMeta):
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] :
if a in [0, 1, 2, 3, 4] and b in [0, 1, 2, 3, 4] : #la pièce ne doit pas encore être entré
if self.nom!='IA':
print('la piece est déjà rentrée sur le plateau')
else:
if i == -1 or i == 5 or j == -1 or j == 5:
if i == -1 or i == 5 or j == -1 or j == 5: #la pièce doit être sur une case à l'extérieure du plateau, devant
# case qui doit être poussée
self.pieces_du_joueur()[n].entrer_en_poussant(i,j,ori)
else:
if self.nom!='IA':
......@@ -125,7 +145,7 @@ class Joueur(metaclass = ABCMeta):
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]):
if (a in [0, 1, 2, 3, 4] and b in [ 0, 1, 2, 3, 4]): #il faut que le pion soit déjà entré pour utiliser la fonction pousser
self.pieces_du_joueur()[n].pousser()
else:
if self.nom != 'IA':
......@@ -136,7 +156,10 @@ class Joueur(metaclass = ABCMeta):
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 (a in [-1, 0, 1, 2, 3, 4, 5] and b in [-1, 0, 1, 2, 3, 4, 5]): #on doit pouvoir s'orienter avec les fonctions
# qui n'existent que si je pion est sur le plateau, mais aussi pour entrer_en_poussant, lorsque le pion est situé à l'extérieur
#on défini les paramètres
if self.nom=='IA':
ori=self.ori_possible[randint(0,4)]
else:
......@@ -150,7 +173,8 @@ class Joueur(metaclass = ABCMeta):
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 (a in [0, 1, 2, 3, 4] and b in [0, 1, 2, 3, 4]): #le pion doit être déjà entré sur le plateau
#on définit les paramètres
if self.nom=='IA':
i,j=randint(0,5),randint(0,5)
ori=self.ori_possible[randint(0,4)]
......@@ -164,16 +188,17 @@ class Joueur(metaclass = ABCMeta):
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]:
if n not in [0, 1, 2, 3, 4]: #si le joueur humain a mal entré son numéro de pièce
print('numéro de piece non valide')
for i in self.plateau: #ici on s'assure qu'une piece ne soit pas accidentellement sortie du plateau de jeu, auquel cas on la remet à sa position initiale
for i in self.plateau: #ici on s'assure qu'une piece ne soit pas accidentellement sortie du plateau
# de jeu, auquel cas on la remet à sa position initiale
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']:
if i.car() in ['R', 'E']: # pas pour les montagnes, puisque dès qu'une montagne sort du plateau la partie se termine
i.sortir()
if bool and self.nom=='IA':
print('l IA a joué le coup', coup, 'sur la piece numero', n)
print('l IA a joué le coup', coup, 'sur la piece numero', n) #informe l'humain que c'est à son tour
if bool: #écriture du fichier
f.write("Au tour de {0}.\n La piece numero {1} a ete bougee avec le coup {2} \n ".format(str(self.nom),str(n), str(coup)))
......@@ -183,7 +208,8 @@ class Joueur(metaclass = ABCMeta):
f.close()
# classes définissants les joueurs, afin de connaitre leur nom, et une description résumant les caractéristiques de leurs
# pièces, pour démarrer le jeux
class Theo(Joueur):
def __init__(self,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