add emoji for better visibility and prevents user from playing a busy case
This commit is contained in:
parent
d7210f8f4b
commit
18c80f4717
1 changed files with 20 additions and 9 deletions
29
minimax.py
29
minimax.py
|
@ -122,12 +122,16 @@ class Morpion(Minimax):
|
||||||
print("%02c" % n, end = " | ") # espace automatique pour pas décaler l'affichage (comme au dessus mais avec la syntaxe de python2)
|
print("%02c" % n, end = " | ") # espace automatique pour pas décaler l'affichage (comme au dessus mais avec la syntaxe de python2)
|
||||||
print(espace)
|
print(espace)
|
||||||
|
|
||||||
|
def _caseOccupee(self, x: int, y: int) -> bool:
|
||||||
|
"""Vrai si la case en `x` et `y` est déjà occupée par un joueur."""
|
||||||
|
return type(self.plateau[x][y]) == str
|
||||||
|
|
||||||
def _terminer(self) -> bool:
|
def _terminer(self) -> bool:
|
||||||
"""Vrai si la partie est terminée."""
|
"""Vrai si la partie est terminée."""
|
||||||
fini = False
|
fini = False
|
||||||
for i in range(len(self.plateau)):
|
for i in range(len(self.plateau)):
|
||||||
for j in range(len(self.plateau[i])):
|
for j in range(len(self.plateau[i])):
|
||||||
if type(self.plateau[i][j]) == str: # si case occupé par un joueur
|
if self._caseOccupee(i, j): # si case occupé par un joueur
|
||||||
rechercheLigne = 0
|
rechercheLigne = 0
|
||||||
rechercheColonne = 0
|
rechercheColonne = 0
|
||||||
rechercheDiagonaleVersBas = 0
|
rechercheDiagonaleVersBas = 0
|
||||||
|
@ -193,6 +197,15 @@ class Morpion(Minimax):
|
||||||
|
|
||||||
return fini
|
return fini
|
||||||
|
|
||||||
|
def _coordonneesCaseDepuisNumero(self, numero: int) -> tuple[int, int]:
|
||||||
|
"""Renvoie les coordonnées d'une case."""
|
||||||
|
return ((numero - 1) // len(self.plateau[0]), (numero - 1) % len(self.plateau[0]))
|
||||||
|
|
||||||
|
def _placementPiece(self, joueur: str, n: int) -> None:
|
||||||
|
"""Place la pièce d'un joueur dans le plateau."""
|
||||||
|
x, y = self._coordonneesCaseDepuisNumero(n)
|
||||||
|
self.plateau[x][y] = joueur
|
||||||
|
|
||||||
def _demandeCase(self) -> int:
|
def _demandeCase(self) -> int:
|
||||||
"""Demande au joueur sur quelle case il veut poser sa pièce."""
|
"""Demande au joueur sur quelle case il veut poser sa pièce."""
|
||||||
prefix = f"({self.joueurA} - {self.nbCasesGagnantes} cases successives pour gagner)"
|
prefix = f"({self.joueurA} - {self.nbCasesGagnantes} cases successives pour gagner)"
|
||||||
|
@ -207,18 +220,16 @@ class Morpion(Minimax):
|
||||||
erreur = "valeur trop grande"
|
erreur = "valeur trop grande"
|
||||||
elif int(reponse) == 0: # < 0 pas considéré comme un nombre avec la fonction `isnumeric`
|
elif int(reponse) == 0: # < 0 pas considéré comme un nombre avec la fonction `isnumeric`
|
||||||
erreur = "valeur trop petite"
|
erreur = "valeur trop petite"
|
||||||
|
else:
|
||||||
|
x, y = self._coordonneesCaseDepuisNumero(int(reponse))
|
||||||
|
if self._caseOccupee(x, y):
|
||||||
|
erreur = "case déjà occupée"
|
||||||
if len(erreur) > 0:
|
if len(erreur) > 0:
|
||||||
print(f"{prefix} Valeur invalide ({erreur}), réessayez : ", end = "")
|
print(f"{prefix} ❌ Valeur invalide ({erreur}), réessayez : ", end = "")
|
||||||
reponse = -1
|
reponse = -1
|
||||||
|
|
||||||
return int(reponse)
|
return int(reponse)
|
||||||
|
|
||||||
def _placementPiece(self, joueur: str, n: int) -> None:
|
|
||||||
"""Place la pièce d'un joueur dans le plateau."""
|
|
||||||
x = (n - 1) // len(self.plateau[0])
|
|
||||||
y = (n - 1) % len(self.plateau[0])
|
|
||||||
self.plateau[x][y] = joueur
|
|
||||||
|
|
||||||
def jouer(self) -> None:
|
def jouer(self) -> None:
|
||||||
"""Lance la partie de Morpion."""
|
"""Lance la partie de Morpion."""
|
||||||
while not self._terminer(): # tant que la partie n'est pas terminé
|
while not self._terminer(): # tant que la partie n'est pas terminé
|
||||||
|
@ -226,7 +237,7 @@ class Morpion(Minimax):
|
||||||
reponse = self._demandeCase() # on demande où le joueur veut posé sa pièce
|
reponse = self._demandeCase() # on demande où le joueur veut posé sa pièce
|
||||||
self._placementPiece(self.joueurA, reponse) # on place la pièce du joueur
|
self._placementPiece(self.joueurA, reponse) # on place la pièce du joueur
|
||||||
self.afficher() # affichage du plateau final
|
self.afficher() # affichage du plateau final
|
||||||
print("Partie terminé, un joueur a gagné !")
|
print("🎉 Partie terminé, un joueur a gagné !")
|
||||||
|
|
||||||
if __name__ == '__main__': # Si on lance directement le fichier et on s'en sert pas comme module
|
if __name__ == '__main__': # Si on lance directement le fichier et on s'en sert pas comme module
|
||||||
Morpion('X', 'O', (6, 4)).jouer() # On lance la partie à l'instanciation du Morpion
|
Morpion('X', 'O', (6, 4)).jouer() # On lance la partie à l'instanciation du Morpion
|
||||||
|
|
Reference in a new issue