0% found this document useful (0 votes)
3 views9 pages

Pieces Chess

fichier des pieces du jeu d'echeques

Uploaded by

l00pingmexico
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views9 pages

Pieces Chess

fichier des pieces du jeu d'echeques

Uploaded by

l00pingmexico
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

import pygame

from .constants import *

#création de la classe Pièce


class Piece:
#paramètres des pièces dans la fonction d'initialisation
def __init__(self,Square,image,color,type,row,col):
self.Square = Square
self.image = image
self.color = color
self.row = row
self.col = col
self.x = 0
self.y = 0
self.available_moves = []
#fonction de mise à jour des coordonnées des pièces
def piece_move(self,row,col):
self.row = row
self.col = col
self.calc_pos()
#calcul des coordonnées
def calc_pos(self):
self.x = self.col * self.Square
self.y = self.row * self.Square
#réinitialisation des coups possibles par pièce
def clear_available_moves(self):
if len(self.available_moves) > 0:
self.available_moves = []

#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

You might also like