[Echecs] Ajout LogiqueDameAnglaises

This commit is contained in:
Geoffrey Frogeye 2014-12-14 22:37:19 +01:00
parent a1f3dfb769
commit e31d7aae8f

View file

@ -84,7 +84,7 @@ class Logique:
class LogiqueDames(Logique): class LogiqueDames(Logique):
""" """
Logique du jeu de Dames Logique du jeu de Dames (International)
""" """
CASES_COTE = 10 CASES_COTE = 10
RANGEES = 4 RANGEES = 4
@ -105,15 +105,19 @@ class LogiqueDames(Logique):
MVT_SUR_PLACE = 'Immobile' MVT_SUR_PLACE = 'Immobile'
MVT_N_AUTORISE = 'Non-autorisé' MVT_N_AUTORISE = 'Non-autorisé'
MVT_CASE_BLANCHE = 'Case blanche' MVT_CASE_BLANCHE = 'Case blanche'
MVT_PRISE_ARRIERE = 'Prise arrière'
MVT_SAUT_AMI = 'Saut ami' MVT_SAUT_AMI = 'Saut ami'
MVT_DEST_OCC = 'Destination occupée' MVT_DEST_OCC = 'Destination occupée'
MVT_OBSTRUCTION = 'Pièce en chemin' MVT_OBSTRUCTION = 'Pièce en chemin'
MVT_SOUFFLER = 'Souffler n\'est pas jouer' MVT_SOUFFLER = 'Souffler n\'est pas jouer'
MVT_PIECE_INC = 'Pièce inconnue' MVT_PIECE_INC = 'Pièce inconnue'
PRISE_ARRIERE = True
DEPL_LONG_DAME = True
def __init__(self): def __init__(self):
""" """
Constructeur de LogiqueEchecs Constructeur de LogiqueDames
""" """
Logique.__init__(self) Logique.__init__(self)
self.remplirGrille() self.remplirGrille()
@ -145,6 +149,9 @@ class LogiqueDames(Logique):
xS = x1+(x2-x1)//2 xS = x1+(x2-x1)//2
yS = y1+(y2-y1)//2 yS = y1+(y2-y1)//2
if self.ePiece(self.grille[xS][yS]): if self.ePiece(self.grille[xS][yS]):
if not self.PRISE_ARRIERE and (self.joueur == self.BLANC and y1 < y2) or \
(self.joueur == self.NOIR and y1 > y2):
return self.MVT_PRISE_ARRIERE
if self.aSonTour(self.grille[xS][yS]): if self.aSonTour(self.grille[xS][yS]):
return self.MVT_SAUT_AMI return self.MVT_SAUT_AMI
else: else:
@ -158,28 +165,44 @@ class LogiqueDames(Logique):
""" """
Vérifie si le déplacement est possible pour une dame. Vérifie si le déplacement est possible pour une dame.
""" """
if abs(x2 - x1) == abs(y2 - y1): if self.DEPL_LONG_DAME:
sensX = (x2 - x1) // abs(x2 - x1) if abs(x2 - x1) == abs(y2 - y1):
sensY = (y2 - y1) // abs(y2 - y1) sensX = (x2 - x1) // abs(x2 - x1)
x = x1 sensY = (y2 - y1) // abs(y2 - y1)
y = y1 x = x1
dist = 0 y = y1
distTot = abs(x2 - x1) dist = 0
while dist < distTot: distTot = abs(x2 - x1)
dist += 1 while dist < distTot:
x += sensX dist += 1
y += sensY x += sensX
if self.ePiece(self.grille[x][y]): y += sensY
if dist == distTot - 1 and not self.aSonTour(self.grille[x][y]): if self.ePiece(self.grille[x][y]):
return self.MVT_SAUT if dist == distTot - 1 and not self.aSonTour(self.grille[x][y]):
else: return self.MVT_SAUT
return self.MVT_OBSTRUCTION else:
if self.rafle: return self.MVT_OBSTRUCTION
return self.MVT_SOUFFLER if self.rafle:
return self.MVT_SOUFFLER
else:
return self.MVT_OK
else: else:
return self.MVT_OK return self.MVT_N_AUTORISE
else: else:
return self.MVT_N_AUTORISE if abs(x2-x1) == 1 and abs(y2-y1) == 1 and not self.rafle:
return self.MVT_OK
elif abs(x2-x1) == 2 and abs(y2-y1) == 2:
xS = x1+(x2-x1)//2
yS = y1+(y2-y1)//2
if self.ePiece(self.grille[xS][yS]):
if self.aSonTour(self.grille[xS][yS]):
return self.MVT_SAUT_AMI
else:
return self.MVT_SAUT
else:
return self.MVT_N_AUTORISE
else:
return self.MVT_N_AUTORISE
# TODO Utiliser la gestion d'erreurs de Python ? # TODO Utiliser la gestion d'erreurs de Python ?
def deplPossible(self, x1, y1, x2, y2): def deplPossible(self, x1, y1, x2, y2):
@ -319,6 +342,21 @@ class LogiqueDames(Logique):
self.vPartieFinie() self.vPartieFinie()
return retour return retour
class LogiqueDamesAnglaises(LogiqueDames):
"""
Logique du jeu de Dames (Anglaises)
"""
CASES_COTE = 8
RANGEES = 3
PRISE_ARRIERE = False
DEPL_LONG_DAME = False
def __init__(self):
"""
Constructeur de LogiqueDamesAnglaises
"""
LogiqueDames.__init__(self)
class LogiqueEchecs(Logique): class LogiqueEchecs(Logique):
""" """
Logique du jeu d'Échecs Logique du jeu d'Échecs