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

le jeu est ok dans l'ensemble, le vainqueur s'affiche et tout et tout

il manque les tests
parent 2a67812a
......@@ -10,7 +10,7 @@ class Joueur(metaclass = ABCMeta):
def __init__(self, plateau):
self.plateau=plateau
self.winner=False
@abstractmethod
def pieces_du_joueur(self):
......@@ -28,7 +28,7 @@ class Joueur(metaclass = ABCMeta):
while not bool:
n = input('quelle piece voulez-vous bouger: 0? 1? 2? 3? 4?')
coup = input('quel coup souhaitez-vous faire: entrer? sortir? orientation? position? pousser?')
coup = input('quel coup souhaitez-vous faire: entrer? sortir? orientation? position? pousser? entrer en poussant?')
if coup not in ['entrer', 'sortir','orientation', 'position' ,'pousser', 'entrer en poussant']:
print('coup non reconnu')
......@@ -41,12 +41,18 @@ class Joueur(metaclass = ABCMeta):
self.pieces_du_joueur()[n].entrer()
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=='entrer en poussant':
self.pieces_du_joueur()[n].tour_effectué = False
self.pieces_du_joueur()[n].entrer_en_poussant()
bool = self.pieces_du_joueur()[n].tour_effectué
a,b= self.pieces_du_joueur()[n].coords
......@@ -59,22 +65,15 @@ class Joueur(metaclass = ABCMeta):
self.pieces_du_joueur()[n].pousser()
for i in self.plateau:
if i.coords[0]==-1 or i.coords[0]==5 or i.coords[1]==5 or i.coords[1]==-1: # une piece est alors sortie du plateau
if i.car() in['R','E']:
if i.car() in ['R','E']:
i.sortir()
else: #c'est qu'une montagne est sortie
self.vainceur=True
print('la partie est finie, le vainceur est' ,self)
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== 'orientation':
self.pieces_du_joueur()[n].tour_effectué=False
......@@ -96,8 +95,11 @@ class Joueur(metaclass = ABCMeta):
class Theo(Joueur):
def __init__(self,plateau):
super().__init__(plateau)
self.nom = 'Théo, vous êtes les elephants, qui sont par défaut orientés vers la gauche'
self.nom='Théo'
self.description = 'Théo, vous êtes les elephants, qui sont par défaut orientés vers la gauche'
def __str__(self):
return 'Théo'
def pieces_du_joueur(self):
return self.plateau.ele
......@@ -105,8 +107,11 @@ class Theo(Joueur):
class Pauline(Joueur):
def __init__(self,plateau):
super().__init__(plateau)
self.nom = 'Pauline, vous êtes les rhinoceros, qui sont par défaut orientés vers la droite'
self.nom='Pauline'
self.description = 'Pauline, vous êtes les rhinoceros, qui sont par défaut orientés vers la droite'
def __str__(self):
return 'Pauline'
def pieces_du_joueur(self):
return self.plateau.rhino
......
......@@ -32,11 +32,11 @@ class Piece(metaclass = ABCMeta):
self.ordonnee=ordonnee
self.orientation = orientation
self.plateau=plateau
self.nom = str(self.car())
self.tour_effectué=False
def __str__(self):
"""
Affiche l'état courant de la pièce en question, à savoir sa position et sa direction.
......@@ -63,17 +63,24 @@ class Montagne(Piece):
"""
classe spécifiant Piece pour représenter une montagne
"""
def __init__ (self, abscisse, ordonnee, orientation, plateau):
super().__init__(abscisse, ordonnee, orientation, plateau)
self.nom = str(self.car())
def car(self):
"""
Renvoie : str
On retourne la lettre permettant d'identifier que l'objet que l'on manipule est une montagne
"""
return 'M '
return 'M'
class Animal(Piece,metaclass = ABCMeta):
def __init__ (self, abscisse, ordonnee, orientation, plateau):
super().__init__(abscisse, ordonnee, orientation, plateau)
@abstractmethod
def car(self):
......@@ -123,7 +130,7 @@ class Animal(Piece,metaclass = ABCMeta):
if nb_montagnes==2:
f=f+1 #il faut rajouter la force des montagnes
else:
f=f+ dic_forces[(piece.orientation)][1]
f=f+ dic_forces[piece.orientation][1]
if f < 0: # la force résultante est vers la droite
for piece in Hab:
......@@ -208,6 +215,8 @@ class Animal(Piece,metaclass = ABCMeta):
def entrer(self):
"""
cette fonction permet d'entrer un des animaux par l'une des cases extérieures
......@@ -233,8 +242,7 @@ class Animal(Piece,metaclass = ABCMeta):
else :
print ('une pièce ne peut entrer sur le plateau que sur une case extérieure : rééssayez ')
print("votre pièce %c%i est entrée à la position %s, orientée vers %c" % (
self.car(),self.numero, self.coords, self.orientation))
def entrer_en_poussant(self):
......@@ -251,15 +259,14 @@ class Animal(Piece,metaclass = ABCMeta):
if i == -1 or i == 5 or j == -1 or j ==5 :
self.coords = i, j
self.changement_orientation()
self.tour_effectué = False
self.pousser()
self.tour_effectué = True
bool = False
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 ')
print("votre pièce %c%i est entrée à la position %s, orientée vers %c" % (
self.car(),self.numero, self.coords, self.orientation))
......@@ -284,17 +291,15 @@ class Animal(Piece,metaclass = ABCMeta):
def sortir(self):
if self.coords[0] in [0,1,2,3,4] and self.coords[1] in [0,1,2,3,4]:
self.tour_effectué = True
if self.car() == 'R':
self.coords = -2, self.numero
else :
self.coords = 6, self.numero
print("votre pièce %c%i est sorti du plateau" % (
self.car(), self.numero))
else:
print('vous ne pouvez pas sortir une piece qui n est pas sur le plateau')
self.tour_effectué = True
if self.car() == 'R':
self.coords = -2, self.numero
else :
self.coords = 6, self.numero
print("votre pièce %c%i est sorti du plateau" % (
self.car(), self.numero))
......@@ -369,34 +374,37 @@ class Animal(Piece,metaclass = ABCMeta):
self.changement_orientation()
bool = False
print("votre pièce %c%i est maintenant à la position %s, orienté vers %c" % (
self.car(), self.numero, self.coords, self.orientation))
self.tour_effectué = True
#def pousser(self, orientation):
class Elephant(Animal):
nb_elephant =0 # variable de classe
def __init__ (self, abscisse, ordonnee, orientation, plateau):
super().__init__(abscisse, ordonnee, orientation, plateau)
self.numero = Elephant.nb_elephant
Elephant.nb_elephant +=1
self.nom = str(self.numero)+str(self.car())
self.nom = str(self.car()+str(self.numero))
def car(self):
return 'E' #+ str(self.numero)
class Rhinoceros(Animal):
nb_rhino =0 # variable de classe
def __init__ (self, abscisse, ordonnee, orientation, plateau):
super().__init__(abscisse, ordonnee, orientation, plateau)
self.numero = Rhinoceros.nb_rhino
Rhinoceros.nb_rhino +=1
self.nom=str(self.numero)+str(self.car())
self.nom=str(self.car()+str(self.numero))
def car(self):
return 'R' #+ str(self.numero)
......
......@@ -34,6 +34,7 @@ class Plateau(list):
self.ymax = ymax
self.nb_montagne = nb_montagne
self.ele = []
self.mont=[]
self.rhino = []
self.joueur1=joueur1
self.joueur2=joueur2
......@@ -62,12 +63,12 @@ class Plateau(list):
"""
pos = {}
for piece in self:
pos[piece.coords[0],piece.coords[1]] = (piece.nom,piece.orientation)
pos[piece.coords[0],piece.coords[1]] = (piece.nom+piece.orientation)
s = ""
for j in range(self.xmax):
for i in range(self.ymax):
for j in range(self.ymax):
for i in range(-2,7):
if (i, j) in pos:
s += pos[(i, j)][0]+pos[(i, j)][1] + ' '
s += pos[(i, j)]+' '
else:
s += "0 "
s += "\n"
......@@ -92,29 +93,95 @@ class Plateau(list):
# self.plateau = np.zeros([self.xmax, self.ymax], dtype=Piece)
midx, midy=self.xmax//2, self.ymax//2 # indices de la case correspondant au centre du plateau
for k in range(self.nb_montagne): # place les rochers un à un, en rangée, au milieu du plateau
self.append( Montagne ( midx, midy+k-self.nb_montagne//2, '',self))
self.mont.append( Montagne ( midx,midy+k-self.nb_montagne//2,'0 ',self))
for k in range(5):
#self.append(Elephant(5, k, 'g', self) )
self.ele.append(Elephant(6, k, 'g', self))
self.append(el for el in self.ele)
#self.append(Rhinoceros(-1, k, 'd', self))
self.rhino.append(Rhinoceros(-2, k, 'd', self))
self.append(rhino for rhino in self.ele)
def unTour(self): #permet de mettre à jour les pieeces sur le plateau
for k in range (12,2,-1):
del(self[k])
for el in self.ele:
self.append(el)
for rh in self.rhino:
self.append(rh)
for i in (self):
del(i)
for i in (self.mont):
self.append(i)
for i in (self.ele):
self.append(i)
for i in (self.rhino):
self.append(i)
def vainqueur(self):
bool=False
for m in self.mont:
if m.coords[0]==-1: #la montagne est sortie du plateau
while bool==False: #tant qu'on n'a pas trouvé le vainqueur
for i in range (1,5):
for piece in self:
if piece.coords[0]==m.coords[0]+i and piece.coords[1]==m.coords[1] and piece.orientation=='g':
winner=piece
bool=True
break
if m.coords[0]==5: #la montagne est sortie du plateau
while bool==False: #tant qu'on n'a pas trouvé le vainqueur
for i in range (1,5):
for piece in self:
if piece.coords[0]==m.coords[0]-i and piece.coords[1]==m.coords[1] and piece.orientation=='d':
winner=piece
bool=True
break
if m.coords[1]==-1: #la montagne est sortie du plateau
while bool==False: #tant qu'on n'a pas trouvé le vainqueur
for i in range (1,5):
for piece in self:
if piece.coords[1]==m.coords[1]+i and piece.coords[0]==m.coords[0] and piece.orientation=='h':
winner=piece
bool=True
break
if m.coords[1]==5: #la montagne est sortie du plateau
while bool==False: #tant qu'on n'a pas trouvé le vainqueur
for i in range (1,5):
for piece in self:
if piece.coords[1]==m.coords[1]-i and piece.coords[0]==m.coords[0] and piece.orientation=='b':
winner=piece
bool=True
break
if bool==True and winner.car()=='R':
# self.ele=[]
# self.mont=[]
# self.rhino=[]
print('partie finie, le vainqueur est', self.joueur2(self).nom)
for piece in self:
piece='F'
if bool== True and winner.car()=='E' :
# self.ele = []
# self.mont = []
# self.rhino = []
print ('partie finie, le vainqueur est', self.joueur1(self).nom)
for piece in self:
piece='F'
......@@ -136,11 +203,13 @@ class Plateau(list):
# while not self.joueur1.winner :#and self.joueur2.winner==False : # il faut mettre la condition d'arret du jeu*
while bool:
self.unTour()
print(plateau)
print(self)
print('c est au tour du joueur',self.joueur1(self).nom)
print('c est au tour du joueur',self.joueur1(self).description)
self.joueur1(self).a_son_tour()
print(plateau)
self.unTour()
self.vainqueur()
print(self)
......@@ -148,14 +217,16 @@ class Plateau(list):
# print('fin du jeu, le joueur est ',self.joueur1(self).nom)
# break
print('c est au tour du joueur', self.joueur2(self).nom)
print('c est au tour du joueur', self.joueur2(self).description)
self.joueur2(self).a_son_tour()
self.unTour()
self.vainqueur()
# if M1 not in (range(5),range(5)) or M2 not in (range(5),range(5)) or M3 not in (range(5),range(5)):
# print('fin du jeu, le joueur est ',self.joueur2(self).nom)
# break
print(plateau)
print(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