Skip to content
Snippets Groups Projects
Commit 7fdd5424 authored by MAZAT Julian's avatar MAZAT Julian
Browse files

Finition jeu

parent e63a667f
No related branches found
No related tags found
No related merge requests found
...@@ -30,6 +30,21 @@ class Grille: ...@@ -30,6 +30,21 @@ class Grille:
def placer(self, ligne, colonne, joueur): def placer(self, ligne, colonne, joueur):
self.grille[ligne, colonne] = joueur self.grille[ligne, colonne] = joueur
# renverse la colonne donnée
def renverser(self,colonne):
file = list(filter(
lambda cellule : cellule != self.CASE_VIDE,
self.grille[:,colonne]
))
file.reverse()
self.grille[:,colonne] = np.full((self.nLigne),self.CASE_VIDE)
for jeton in file:
self.placer(
self.premierLibre(colonne),
colonne,
jeton
)
# vérifie si le joueur donné est gagnant # vérifie si le joueur donné est gagnant
def estGagant(self, joueur): def estGagant(self, joueur):
for r in range(self.nLigne): for r in range(self.nLigne):
...@@ -56,7 +71,7 @@ class Grille: ...@@ -56,7 +71,7 @@ class Grille:
#vérifie si la grille est pleine #vérifie si la grille est pleine
def estPlein(self): def estPlein(self):
return self.grille.all() return self.CASE_VIDE not in self.grille.flatten()
# vérifie si une colonne est pleine # vérifie si une colonne est pleine
def peutAccueillir(self, colonne): def peutAccueillir(self, colonne):
......
...@@ -4,18 +4,21 @@ class Main: ...@@ -4,18 +4,21 @@ class Main:
# constantes # constantes
JOUEUR_1 = "" JOUEUR_1 = ""
JOUEUR_2 = "" JOUEUR_2 = ""
LARGEUR_GRILLE = 7 LARGEUR_GRILLE = 7
HAUTEUR_GRILLE = 6 HAUTEUR_GRILLE = 6
COMMANDE_RENVERSER = 'R'
# retourne une représentation en chaîne de # retourne une représentation en chaîne de
# caractères du joueur actuel # caractères du joueur actuel
def afficherJoueur(self): def afficherJoueur(self, joueur):
return ["Joueur 1","Joueur 2"][self.joueurActuel == self.JOUEUR_2] return ["Joueur 1","Joueur 2"][joueur == self.JOUEUR_2]
# affiche l'état de la partie # affiche l'état de la partie
def afficherTour(self): def afficherTour(self):
print("=====================") print("=====================")
print("Tour de : " + self.afficherJoueur()) print("Tour de : " + self.afficherJoueur(self.joueurActuel))
# indices des colonnes # indices des colonnes
print(' ', end='') print(' ', end='')
...@@ -26,40 +29,64 @@ class Main: ...@@ -26,40 +29,64 @@ class Main:
self.grille.afficherGrille() self.grille.afficherGrille()
# retourne l'action du joueur (-1 si format invalide) # retourne l'action du joueur (-1 si format invalide)
# format : [colonne, si à renverser]
def demanderAction(self): def demanderAction(self):
res = input("Colonne : ") saisie = input("Colonne : ")
if len(saisie) == 0: return [-1,False]
if saisie[0] == self.COMMANDE_RENVERSER:
res = [saisie[1:], True]
else: res = [saisie, False]
try: try:
res = int(res) res[0] = int(res[0])
except ValueError: except ValueError:
res = -1 res[0] = -1
return res return res
#retourne l'autre joueur
def autreJoueur(self,joueur):
return [self.JOUEUR_1, self.JOUEUR_2][joueur == self.JOUEUR_1]
def __init__(self): def __init__(self):
self.grille = Grille(self.HAUTEUR_GRILLE, self.LARGEUR_GRILLE) self.grille = Grille(self.HAUTEUR_GRILLE, self.LARGEUR_GRILLE)
self.joueurActuel = self.JOUEUR_1 self.joueurActuel = self.JOUEUR_1
# début du jeu # début du jeu
message = "Une erreur s'est produite."
print("Début de la partie") print("Début de la partie")
while True: while True:
self.afficherTour() self.afficherTour()
# acquisition du choix du joueur # acquisition du choix du joueur
colonne = self.demanderAction() requete = self.demanderAction()
while colonne < 0 or colonne >= self.LARGEUR_GRILLE or not self.grille.peutAccueillir(colonne): while requete[0] < 0 or requete[0] >= self.LARGEUR_GRILLE or not self.grille.peutAccueillir(requete[0]):
print("Colonne pleine ou incorrecte.") print("Colonne pleine ou incorrecte.")
colonne = self.demanderAction() requete = self.demanderAction()
# finition du tour # renversement si demandé
if requete[1]:
self.grille.renverser(requete[0])
else:
self.grille.placer( self.grille.placer(
self.grille.premierLibre(colonne), self.grille.premierLibre(requete[0]),
colonne, requete[0],
self.joueurActuel self.joueurActuel
) )
if not self.grille.estGagant(self.joueurActuel): # finition du tour
self.joueurActuel = [self.JOUEUR_1, self.JOUEUR_2][self.joueurActuel == self.JOUEUR_1] if requete[1] & self.grille.estGagant(self.JOUEUR_1) & self.grille.estGagant(self.JOUEUR_2):
else: break message = "Les deux joueurs ont gagné. Egalité."
break
if self.grille.estGagant(self.joueurActuel):
message = "Bravo ! " + self.afficherJoueur(self.joueurActuel) + " a gagné."
break
if requete[1] & self.grille.estGagant(self.autreJoueur(self.joueurActuel)):
message = "Bravo ! " + self.afficherJoueur(self.autreJoueur(self.joueurActuel)) + " a gagné."
break
if self.grille.estPlein():
message = "La grille est pleine. Egalité."
break
self.joueurActuel = self.autreJoueur(self.joueurActuel)
print("Bravo ! " + self.afficherJoueur() + " a gagné.") print(message)
self.grille.afficherGrille() self.grille.afficherGrille()
Main() Main()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment