fix bug when looking the downward diagonals
This commit is contained in:
parent
252124d26f
commit
e2ce777bc3
1 changed files with 19 additions and 17 deletions
36
minimax.py
36
minimax.py
|
@ -134,12 +134,13 @@ class Morpion(Minimax):
|
|||
if self._caseOccupee(i, j): # si case occupé par un joueur
|
||||
rechercheLigne = 0
|
||||
rechercheColonne = 0
|
||||
# les diagonales vont vers la droite
|
||||
rechercheDiagonaleVersBas = 0
|
||||
rechercheDiagonaleVersHaut = 0
|
||||
joueur = self.plateau[i][j]
|
||||
while (rechercheLigne != -1) or (rechercheColonne != -1) or (rechercheDiagonaleVersHaut != -1) or (rechercheDiagonaleVersBas != -1):
|
||||
while (rechercheLigne != -1) or (rechercheColonne != -1) or (rechercheDiagonaleVersBas != -1) or (rechercheDiagonaleVersHaut != -1):
|
||||
# -- recherche en ligne --
|
||||
if len(self.plateau[i]) - j - rechercheLigne >= self.nbCasesGagnantes - rechercheLigne: # s'il y a techniquement assez de cases devant pour gagner
|
||||
if len(self.plateau[i]) - j >= self.nbCasesGagnantes: # s'il y a techniquement assez de cases devant pour gagner
|
||||
if self.plateau[i][j + rechercheLigne] == joueur:
|
||||
rechercheLigne += 1
|
||||
else: # si l'élément ne correspond pas au joueur c'est que il n'a pas gagné depuis cette case avec cette direction
|
||||
|
@ -148,11 +149,11 @@ class Morpion(Minimax):
|
|||
rechercheLigne = -1
|
||||
|
||||
if self.nbCasesGagnantes == rechercheLigne: # si on a trouvé autant de cases à la suite du même joueur qu'il en faut pour gagner
|
||||
rechercheLigne = -1
|
||||
fini = True
|
||||
break # si partie finie ça ne sert a rien de continuer, donc on quitte la boucle while
|
||||
|
||||
# -- recherche colonne --
|
||||
if len(self.plateau) - i - rechercheColonne >= self.nbCasesGagnantes - rechercheColonne: # s'il y a techniquement assez de cases devant pour gagner
|
||||
# -- recherche en colonne --
|
||||
if len(self.plateau) - i >= self.nbCasesGagnantes: # s'il y a techniquement assez de cases devant pour gagner
|
||||
if self.plateau[i + rechercheColonne][j] == joueur:
|
||||
rechercheColonne += 1
|
||||
else: # si l'élément ne correspond pas au joueur c'est que il n'a pas gagné depuis cette case avec cette direction
|
||||
|
@ -161,11 +162,11 @@ class Morpion(Minimax):
|
|||
rechercheColonne = -1
|
||||
|
||||
if self.nbCasesGagnantes == rechercheColonne: # si on a trouvé autant de cases à la suite du même joueur qu'il en faut pour gagner
|
||||
rechercheColonne = -1
|
||||
fini = True
|
||||
break # si partie finie ça ne sert a rien de continuer, donc on quitte la boucle while
|
||||
|
||||
# -- recherche diagonale vers le bas --
|
||||
if (len(self.plateau) - i - rechercheDiagonaleVersBas >= self.nbCasesGagnantes - rechercheDiagonaleVersBas) and (len(self.plateau[i]) - j - rechercheDiagonaleVersBas >= self.nbCasesGagnantes - rechercheDiagonaleVersBas): # s'il y a techniquement assez de cases devant pour gagner
|
||||
# -- recherche en diagonale vers le bas --
|
||||
if (len(self.plateau) - i >= self.nbCasesGagnantes) and (len(self.plateau[i]) - j >= self.nbCasesGagnantes): # s'il y a techniquement assez de cases devant pour gagner
|
||||
if self.plateau[i + rechercheDiagonaleVersBas][j + rechercheDiagonaleVersBas] == joueur:
|
||||
rechercheDiagonaleVersBas += 1
|
||||
else: # si l'élément ne correspond pas au joueur c'est que il n'a pas gagné depuis cette case avec cette direction
|
||||
|
@ -174,12 +175,13 @@ class Morpion(Minimax):
|
|||
rechercheDiagonaleVersBas = -1
|
||||
|
||||
if self.nbCasesGagnantes == rechercheDiagonaleVersBas: # si on a trouvé autant de cases à la suite du même joueur qu'il en faut pour gagner
|
||||
rechercheDiagonaleVersBas = -1
|
||||
fini = True
|
||||
break # si partie finie ça ne sert a rien de continuer, donc on quitte la boucle while
|
||||
|
||||
# -- recherche diagonale vers le haut --
|
||||
if (len(self.plateau) >= self.nbCasesGagnantes) and (len(self.plateau[i]) - j - rechercheDiagonaleVersHaut >= self.nbCasesGagnantes - rechercheDiagonaleVersHaut): # s'il y a techniquement assez de cases devant pour gagner
|
||||
if self.plateau[i - rechercheDiagonaleVersHaut][j + rechercheDiagonaleVersHaut] == joueur:
|
||||
# -- recherche en diagonale vers le haut --
|
||||
if (len(self.plateau) - self.nbCasesGagnantes >= 0) and (len(self.plateau[i]) - j >= self.nbCasesGagnantes): # s'il y a techniquement assez de cases devant pour gagner
|
||||
idxI = i - rechercheDiagonaleVersHaut # i ne peut pas être <= 0
|
||||
if idxI >= 0 and self.plateau[idxI][j + rechercheDiagonaleVersHaut] == joueur:
|
||||
rechercheDiagonaleVersHaut += 1
|
||||
else: # si l'élément ne correspond pas au joueur c'est que il n'a pas gagné depuis cette case avec cette direction
|
||||
rechercheDiagonaleVersHaut = -1
|
||||
|
@ -187,12 +189,12 @@ class Morpion(Minimax):
|
|||
rechercheDiagonaleVersHaut = -1
|
||||
|
||||
if self.nbCasesGagnantes == rechercheDiagonaleVersHaut: # si on a trouvé autant de cases à la suite du même joueur qu'il en faut pour gagner
|
||||
rechercheDiagonaleVersHaut = -1
|
||||
fini = True
|
||||
break # si partie finie ça ne sert a rien de continuer, donc on quitte la boucle while
|
||||
|
||||
if fini: # si partie finie ça ne sert a rien de continuer, donc on quitte la boucle
|
||||
break
|
||||
if fini: # meme chose, on quitte la boucle si on a fini
|
||||
if fini: # meme chose, on quitte la boucle for (j) si on a fini
|
||||
break
|
||||
if fini: # meme chose, on quitte la boucle for (i) si on a fini
|
||||
break
|
||||
|
||||
return fini
|
||||
|
@ -239,5 +241,5 @@ class Morpion(Minimax):
|
|||
self.afficher() # affichage du plateau final
|
||||
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').jouer() # On lance la partie à l'instanciation du Morpion
|
||||
|
|
Reference in a new issue