Pieces Chess
Pieces Chess
#classe du pion
class Pawn(Piece):
#initialisation des caractéristiques
def __init__(self,Square,image,color,type,row,col):
super().__init__(Square,image,color,type,row,col) #initialise directement
les pièces, sans avoir à utiliser le self
self.first_move = True #vérifie si c'est le premier coup que la pièce est
jouée (pour pouvoir avancer de deux cases)
#récupération des coups possibles
def get_available_moves(self,row,col,Board):
self.clear_available_moves() #pour qu'il n'y ait pas la possibilité des
coups précédents
#Pièces Blanches
if self.color == White:
#on vérifie que la pièce ne soit pas déjà dans la ligne 0, pcq sinon
elle sort de l'échiquier
if row-1 >= 0:
#on vérifie que la case dans laquelle veut aller la pièce est vide
if Board[row-1][col] == 0:
#on rajoute "avancer d'une case" à la liste des coups
disponibles
self.available_moves.append((row-1,col))
#on vérifie si c'est la première fois que la pièce va jouer (car
elle peut avancer de deux cases)
if self.first_move:
#on vérifie que les deux cases devant sont libres
if Board [row-1][col] == 0 and Board[row-2][col] == 0:
#on ajoute "avancer de deux cases" à la liste des coups
disponibles
self.available_moves.append((row-2,col))
#pour manger une pièce adverse (déplacement diagonale vers la
gauche)
if col-1 >= 0:
#on vérifie qu'il y ait bien une pièce à manger
if Board[row-1][col-1] != 0:
#on récupère la valeur de la pièce dans cette case
piece = Board[row-1][col-1]
#on vérifie que la couleur de la pièce dans cette case est
différente de notre couleur
if piece.color != self.color:
#on ajoute "avancer d'une case en diagonale" à notre
liste de coups
self.available_moves.append((row-1,col-1))
#pour manger une pièce adverse (déplacement diagonale vers la
droite)
if col+1 < len(Board[0]):
#on vérifie qu'il y ait bien une pièce à manger
if Board[row-1][col+1] != 0:
#on récupère la valeur de la pièce dans cette case
piece = Board[row-1][col+1]
#on vérifie que la couleur de la pièce dans cette case est
différente de notre couleur
if piece.color != self.color:
#on ajoute "avancer d'une case en diagonale" à notre
liste de coups
self.available_moves.append((row-1,col+1))
#Pièces noires
if self.color == Black:
#on vérifie que la pièce ne soit pas déjà dans la ligne 0, pcq sinon
elle sort de l'échiquier
if row+1 < len(Board):
#on vérifie que la case dans laquelle veut aller la pièce est vide
if Board[row+1][col] == 0:
#on rajoute "avancer d'une case" à la liste des coups
disponibles
self.available_moves.append((row+1,col))
#on vérifie si c'est la première fois que la pièce va jouer (car
elle peut avancer de deux cases)
if self.first_move:
#on vérifie que les deux cases de devant sont libres
if Board[row+1][col] == 0 and Board[row+2][col] == 0:
#on ajoute "avancer de deux cases" à la liste des coups
disponibles
self.available_moves.append((row+2,col))
#pour manger une pièce adverse (déplacement diagonale vers la
gauche)
if col-1 >= 0:
#on vérifie qu'il y ait bien une pièce à manger
if Board[row+1][col-1] != 0:
#on récupère la valeur de la pièce dans cette case
piece = Board[row+1][col-1]
#on vérifie que la couleur de la pièce dans cette case est
différente de notre couleur
if piece.color != self.color:
#on ajoute "avancer d'une case en diagonale" à notre
liste de coups
self.available_moves.append((row+1,col-1))
#pour manger une pièce adverse (déplacement diagonale vers la
droite)
if col+1 < len(Board):
#on vérifie qu'il y ait bien une pièce à manger
if Board[row+1][col+1] != 0:
#on récupère la valeur de la pièce dans cette case
piece = Board[row+1][col+1]
#on vérifie que la couleur de la pièce dans cette case est
différente de notre couleur
if piece.color != self.color:
#on ajoute "avancer d'une case en diagonale" à notre
liste de coups
self.available_moves.append((row+1,col+1))
return self.available_moves
#classe de la tour
class Rook(Piece):
#initialisation des caractéristiques
def __init__(self,Square,image,color,type,row,col):
super().__init__(Square,image,color,type,row,col) #initialise directement
les pièces, sans avoir à utiliser le self
#récupération des coups possibles
def get_available_moves(self,row,col,Board):
self.clear_available_moves() #pour qu'il n'y ait pas la possibilité des
coups précédents
#on vérifie la disponibilité des cases (en lignes)
#vers l'avant
for i in range(row+1, 8):
if Board[i][col] == 0:
self.available_moves.append((i,col))
else:
#si la case est occupée par une pièce adversaire, rajouter le coup
if Board[i][col].color != self.color:
self.available_moves.append((i,col))
break
else:
break
#vers l'arrière
for j in range(row-1,-1,-1):
if Board[row][j] == 0:
self.available_moves.append((row,j))
else:
#si la case est occupée par une pièce adversaire, rajouter le coup
if Board[row][j].color != self.color:
self.available_moves.append((row,j))
break
else:
break
#déplacements latéraux
#vers la droite
for i in range(col+1,8):
if Board[row][i] == 0:
self.available_moves.append((row,i))
else:
if Board[row][i].color != self.color:
self.available_moves.append((row,i))
break
else:
break
#vers la gauche
for j in range(row-1,-1,-1):
if Board[row][j] == 0:
self.available_moves.append((row,j))
else:
#si la case est occupée par une pièce adversaire, rajouter le coup
if Board[row][j].color != self.color:
self.available_moves.append((row,j))
break
else:
break
return self.available_moves
#classe de la tour
class Bishop(Piece):
#initialisation des caractéristiques
def __init__(self,Square,image,color,type,row,col):
super().__init__(Square,image,color,type,row,col) #initialise directement
les pièces, sans avoir à utiliser le self
#récupération des coups possibles
def get_available_moves(self,row,col,Board):
self.clear_available_moves() #pour qu'il n'y ait pas la possibilité des
coups précédents
#variables de référence pour les diagonales vers le bas, vers la droite
row_i = row+1
col_i = col+1
#tant que nous sommes toujours sur l'échiquier
while row_i <= 7 and col_i <= 7:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i += 1
col_i += 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#variables de référence pour les diagonales vers le haut, vers la gauche
row_i = row-1
col_i = col-1
#tant que nous sommes toujours sur l'échiquier
while row_i >= 0 and col_i >= 0:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i -= 1
col_i -= 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#variables de référence pour les diagonales vers le bas, vers la gauche
row_i = row+1
col_i = col-1
#tant que nous sommes toujours sur l'échiquier
while row_i <= 7 and col_i >= 0:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i += 1
col_i -= 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#variables de référence pour les diagonales vers le haut, vers la droite
row_i = row-1
col_i = col+1
#tant que nous sommes toujours sur l'échiquier
while row_i >= 0 and col_i <= 7:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i -= 1
col_i += 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
return self.available_moves
#classe du cavalier
class Bishop(Piece):
#initialisation des caractéristiques
def __init__(self,Square,image,color,type,row,col):
super().__init__(Square,image,color,type,row,col) #initialise directement
les pièces, sans avoir à utiliser le self
#récupération des coups possibles
def get_available_moves(self,row,col,Board):
self.clear_available_moves() #pour qu'il n'y ait pas la possibilité des
coups précédents
#on vérifie que nous ne sortons pas de l'échiquier (2 vers le haut 1 vers la
droite)
if row-2 >= 0 and col+1 < len(Board):
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row-2][col+1] == 0 or Board[row-2][col+1].color != self.color:
self.available_moves.append((row-2,col+1))
#on vérifie que nous ne sortons pas de l'échiquier (1 vers le haut 2 vers la
droite)
if row-1 >= 0 and col+2 < len(Board):
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row-1][col+2] == 0 or Board[row-1][col+2].color != self.color:
self.available_moves.append((row-1,col+2))
#on vérifie que nous ne sortons pas de l'échiquier (1 vers le bas 2 vers la
droite)
if row+1 < len(Board) and col+2 < len(Board):
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row+1][col+2] == 0 or Board[row+1][col+2].color != self.color:
self.available_moves.append((row+1,col+2))
#on vérifie que nous ne sortons pas de l'échiquier (2 vers le bas 1 vers la
droite)
if row+2 < len(Board) and col+1 < len(Board):
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row+2][col+1] == 0 or Board[row+2][col+1].color != self.color:
self.available_moves.append((row+2,col+1))
#on vérifie que nous ne sortons pas de l'échiquier (2 vers le bas 1 vers la
gauche)
if row+2 < len(Board) and col-1 >= 0:
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row+2][col-1] == 0 or Board[row+2][col-1].color != self.color:
self.available_moves.append((row+2,col-1))
#on vérifie que nous ne sortons pas de l'échiquier (1 vers le bas 2 vers la
gauche)
if row+1 < len(Board) and col-2 >= 0:
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row+1][col-2] == 0 or Board[row+1][col-2].color != self.color:
self.available_moves.append((row+1,col-2))
#on vérifie que nous ne sortons pas de l'échiquier (1 vers le haut 2 vers la
gauche)
if row-1 >= 0 and col-2 >= 0:
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row-1][col-2] == 0 or Board[row-1][col-2].color != self.color:
self.available_moves.append((row-1,col-2))
#on vérifie que nous ne sortons pas de l'échiquier (2 vers le haut 1 vers la
gauche)
if row-2 >= 0 and col-1 >= 0:
#on ajoute le coup aux coups jouables si la case est libre ou à une pièce
de couleur différente à la notre
if Board[row-2][col-1] == 0 or Board[row-2][col-1].color != self.color:
self.available_moves.append((row-2,col-1))
return self.available_moves
#classe de la reine
class Queen(Piece):
#initialisation des caractéristiques
def __init__(self,Square,image,color,type,row,col):
super().__init__(Square,image,color,type,row,col) #initialise directement
les pièces, sans avoir à utiliser le self
#récupération des coups possibles
def get_available_moves(self,row,col,Board):
self.clear_available_moves() #pour qu'il n'y ait pas la possibilité des
coups précédents
#variables de référence pour les diagonales vers le bas, vers la droite
row_i = row+1
col_i = col+1
#tant que nous sommes toujours sur l'échiquier
while row_i <= 7 and col_i <= 7:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i += 1
col_i += 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#variables de référence pour les diagonales vers le haut, vers la gauche
row_i = row-1
col_i = col-1
#tant que nous sommes toujours sur l'échiquier
while row_i >= 0 and col_i >= 0:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i -= 1
col_i -= 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#variables de référence pour les diagonales vers le bas, vers la gauche
row_i = row+1
col_i = col-1
#tant que nous sommes toujours sur l'échiquier
while row_i <= 7 and col_i >= 0:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i += 1
col_i -= 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#variables de référence pour les diagonales vers le haut, vers la droite
row_i = row-1
col_i = col+1
#tant que nous sommes toujours sur l'échiquier
while row_i >= 0 and col_i <= 7:
#on vérifie que la case est vide
if Board[row_i][col_i] == 0:
#on ajoute le coup disponible
self.available_moves.append((row_i,col_i))
#incrémentation des variables de référence
row_i -= 1
col_i += 1
else:
#on vérifie la couleur de la pièce qui est sur la case
if Board[row_i][col_i].color != self.color:
#si c'est une pièce ennemie, on rajoute le coup à la liste des
coups
self.available_moves.append((row_i,col_i))
break
break
#on vérifie la disponibilité des cases (en lignes)
#vers l'avant
for i in range(row+1, 8):
if Board[i][col] == 0:
self.available_moves.append((i,col))
else:
#si la case est occupée par une pièce adversaire, rajouter le coup
if Board[i][col].color != self.color:
self.available_moves.append((i,col))
break
else:
break
#vers l'arrière
for j in range(row-1,-1,-1):
if Board[row][j] == 0:
self.available_moves.append((row,j))
else:
#si la case est occupée par une pièce adversaire, rajouter le coup
if Board[row][j].color != self.color:
self.available_moves.append((row,j))
break
else:
break
#déplacements latéraux
#vers la droite
for i in range(col+1,8):
if Board[row][i] == 0:
self.available_moves.append((row,i))
else:
if Board[row][i].color != self.color:
self.available_moves.append((row,i))
break
else:
break
#vers la gauche
for j in range(row-1,-1,-1):
if Board[row][j] == 0:
self.available_moves.append((row,j))
else:
#si la case est occupée par une pièce adversaire, rajouter le coup
if Board[row][j].color != self.color:
self.available_moves.append((row,j))
break
else:
break
return self.available_moves
#classe du roi