en fait le prof nous demande de faire les déplacements (primaires, c'est-à-dire les premiers au début d'une partie) de chaque pièce d'un jeu d'échec
voici le devoir
Code : Tout sélectionner
# -*- coding: utf-8 -*-
"""Module contenant la classe de base Piece, ainsi qu'une classe fille pour chacun des types de pièces du jeu d'échecs.
"""
# TODO: Si votre système n'affiche pas correctement les caractères unicodes du jeu d'échecs,
# mettez cette constante (variable globale) à False. Un tutoriel est présent sur le site Web
# du cours pour vous aider à faire fonctionner les caractères Unicoe sous Windows.
UTILISER_UNICODE = True
class Piece:
"""Une classe de base représentant une pièce du jeu d'échecs. C'est cette classe qui est héritée plus bas pour fournir
une classe par type de pièce (Pion, Tour, etc.).
Attributes:
couleur (str): La couleur de la pièce, soit 'blanc' ou 'noir'.
peut_sauter (bool): Si oui ou non la pièce peut "sauter" par dessus d'autres pièces sur un échiquier.
Args:
couleur (str): La couleur avec laquelle créer la pièce.
peut_sauter (bool): La valeur avec laquelle l'attribut peut_sauter doit être initialisé.
"""
def __init__(self, couleur, peut_sauter):
# Validation si la couleur reçue est valide.
assert couleur in ('blanc', 'noir')
# Création des attributs avec les valeurs reçues.
self.couleur = couleur
self.peut_sauter = peut_sauter
def est_blanc(self):
"""Retourne si oui ou non la pièce est blanche.
Returns:
bool: True si la pièce est blanche, et False autrement.
"""
[b] if self.couleur == 'blanc':
print("True")
else:
print("False")[/b]
def est_noir(self):
"""Retourne si oui ou non la pièce est noire.
Returns:
bool: True si la pièce est noire, et False autrement.
"""
[b] if self.couleur == 'noire':
print("True")
else:
print("False")
[/b]
def peut_se_deplacer_vers(self, position_source, position_cible):
"""Vérifie si, selon les règles du jeu d'échecs, la pièce peut se déplacer d'une position à une autre.
Une position est une chaîne de deux caractères.
Le premier caractère est une lettre entre a et h, représentant la colonne de l'échiquier.
Le second caractère est un chiffre entre 1 et 8, représentant la rangée de l'échiquier.
Args:
position_source (str): La position source, suivant le format ci-haut. Par exemple, 'a8', 'f3', etc.
position_cible (str): La position cible, suivant le format ci-haut. Par exemple, 'b6', 'h1', etc.
Warning:
Comme nous sommes dans la classe de base et non dans l'une des classes filles, nous ne savons pas
(encore) comment cette pièce se déplace. Cette méthode est donc à redéfinir dans chacune des
classes filles.
Warning:
Comme la classe Piece est indépendante de l'échiquier (et donc on ne sait pas si une pièce est "dans le
chemin"), on doit ignorer le contenu de l'échiquier : on ne se concentre que sur les règles de mouvement
des pièces.
Returns:
bool: True si le déplacement est valide en suivant les règles de la pièce, et False autrement.
"""
# On lance une exception (on y reviendra) indiquant que ce code n'a pas été implémenté. Ne touchez pas
# à cette méthode : réimplémentez-la dans les classes filles!
raise NotImplementedError
def peut_faire_une_prise_vers(self, position_source, position_cible):
"""Vérifie si, selon les règles du jeu d'échecs, la pièce peut "manger" (faire une prise) une pièce ennemie.
Pour la plupart des pièces, la règle est la même, on appelle donc la méthode peut_se_deplacer_vers.
Si ce n'est pas le cas pour une certaine pièce, on peut simplement redéfinir cette méthode pour programmer
la règle.
Args:
position_source (str): La position source, suivant le format ci-haut. Par exemple, 'a8', 'f3', etc.
position_cible (str): La position cible, suivant le format ci-haut. Par exemple, 'b6', 'h1', etc.
Returns:
bool: True si la prise est valide en suivant les règles de la pièce, et False autrement.
"""
return self.peut_se_deplacer_vers(position_source, position_cible)
[b]class Pion(Piece):
def __init__(self, couleur):
super().__init__(couleur, False)
def peut_se_deplacer_vers(self, position_source, position_cible):
# TODO: À compléter, pour définir comment un pion se déplace. Vous devez implémenter cette méthode
# pour chacune des autres classes filles, ci-bas. Nous ne vous demandons pas de documenter ces méthodes,
# puisque la documentation est déjà ci-haut, dans la classe mère.
self.position_source=='position source'
self.position_cible=='position cible'
self.couleur=='couleur'
Colonne=int(input("la position de la colonne, donnez une valeur entre a et h = "))
Rangee=int(input("la position de la rangée, donnez une valeur entre 1 et 8 = "))
# Dans le cas présent, le pion ne se déplace que vers l'avant donc uniquement avec les rangées, donc demeure
# dans la même colonne : exemple : a2 vers a3 (vers le bas pour pions noirs, vers le haut pions blancs.
if self.couleur == 'blanc':
self.position_source='position source'
self.position_cible='position cible'
Rangee=Rangee+1
Colonne=Colonne+0
print("La position cible est = ",Rangee,Colonne) # Affiche les coordonnées du pion blanc
elif self.couleur == 'noire':
self.position_source='position source'
self.position_cible='position cible'
Rangee=Rangee-1
Colonne=Colonne+0
print("La position cible est = ",Rangee,Colonne) # Affiche les coordonnées du pion blanc
def peut_faire_une_prise_vers(self, position_source, position_cible):
# TODO: À compléter, pour définir comment un pion mange une pièce adverse.
self.position_source=='position source'
self.postion_cible=='position cible'
self.couleur=='couleur'
Colonne=int(input('la position de la colonne, donnez une valeur entre a et h = '))
Rangee=int(input("la position de la rangée, donnez une valeur entre 1 et 8 = "))
Deplace=int(input("Déplacement du pion en diagonale selon sa couleur vers la droite (1) ou vers la gauche(2)"))
# Dans le cas présent, le pion ne se déplace que vers l'avant donc uniquement avec les rangées, donc demeure
# dans la même colonne : exemple : a2 vers a3 (vers le bas pour pions noirs, vers le haut pions blancs.
if self.couleur == 'blanc':
self.position_source='position source'
if Deplace==1:
self.position_cible='position cible'
Rangee = Rangee-1
Colonne = Colonne+1
print("La position cible est = ",Rangee,Colonne) # Affiche les coordonnées du déplacement du pion blanc vers la droite en diagonale
if Deplace==2:
self.position_cible='position cible'
Rangee = Rangee-1
Colonne = Colonne-1
print("La position cible est = ",Rangee,Colonne) # Affiche les coordonnées du déplacement du pion blanc vers la gauche en diagonale
if self.couleur== 'noire':
self.position_source='position source'
if Deplace==1:
self.position_cible='position cible'
Rangee = Rangee+1
Colonne = Colonne+1
print("La position cible est = ",Rangee,Colonne) # Affiche les coordonnées du déplacement du pion noir vers la droite en diagonale
if Deplace==2:
self.position_cible='position cible'
Rangee = Rangee+1
Colonne = Colonne-1
print("La position cible est = ",Rangee,Colonne) # Afffiche les coordonnées du déplacement du pion noir vers la gauche en diagonale
def __repr__(self):
"""Redéfinit comment on affiche un pion à l'écran. Nous utilisons la constante UTILISER_UNICODE
pour déterminer comment afficher le pion.
Returns:
str: La chaîne de caractères représentant le pion.[/b]
"""
if self.est_blanc():
if UTILISER_UNICODE:
return '\u2659'
else:
return 'PB'
else:
if UTILISER_UNICODE:
return '\u265f'
else:
return 'PN'
class Tour(Piece):
def __init__(self, couleur):
super().__init__(couleur, False)
def __repr__(self):
if self.est_blanc():
if UTILISER_UNICODE:
return '\u2656'
else:
return 'TB'
else:
if UTILISER_UNICODE:
return '\u265c'
else:
return 'TN'
class Cavalier(Piece):
def __init__(self, couleur):
super().__init__(couleur, True)
def __repr__(self):
if self.est_blanc():
if UTILISER_UNICODE:
return '\u2658'
else:
return 'CB'
else:
if UTILISER_UNICODE:
return '\u265e'
else:
return 'CN'
class Fou(Piece):
def __init__(self, couleur):
super().__init__(couleur, False)
def __repr__(self):
if self.est_blanc():
if UTILISER_UNICODE:
return '\u2657'
else:
return 'FB'
else:
if UTILISER_UNICODE:
return '\u265d'
else:
return 'FN'
class Roi(Piece):
def __init__(self, couleur):
super().__init__(couleur, False)
def __repr__(self):
if self.est_blanc():
if UTILISER_UNICODE:
return '\u2654'
else:
return 'RB'
else:
if UTILISER_UNICODE:
return '\u265a'
else:
return 'RN'
class Dame(Piece):
def __init__(self, couleur):
super().__init__(couleur, False)
def __repr__(self):
if self.est_blanc():
if UTILISER_UNICODE:
return '\u2655'
else:
return 'DB'
else:
if UTILISER_UNICODE:
return '\u265b'
else:
return 'DN'
J'ai donc remplacé ce qui était demandé jusqu'à la section : déplacement du pion (voir dans le devoir, section en gras) et aussi définition des parties en gras
Ma question est d'abord si vous pourriez en des mots simples me réexpliquer la notion de self.xxxx
Ensuite, me dire si ce que j'ai fait répond à l'intitulé, en somme, l'ai-je bien compris !
Voilà, je vous demande pas de faire les programmes pour les autres pièces du jeu d'échec mais simplement vérifier et me dire si ce que j'ai fait pour les déplacements du pion et des définitions de self.xxxx vous semblent corrects, et si cela n'est pas le cas, pourriez-vous m'aider ?
Merci