1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
| import random
class Carte:
""" Cette classe encapsule une carte avec son rang et sa sorte. """
figures = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
sortes = {'pique': '♠', 'coeur': '♥', 'carreau': '♦', 'trèfle': '♣'}
face_visible = False
def __init__(self, figure, sorte, face_visible=False):
""" Construire une carte à partir d'une figure et d'une sorte.
Par défaut, la face de la carte est cachée.
:param figure: une chaîne d'un seul caractère spécifiant la figure de
la carte. Les figures possibles sont 'A', '2', '3', '4', '5', '6', '7',
'8', '9', '10', 'J', 'Q', 'K'.
:param sorte: une chaîne de caractères spécifiant la sorte de carte.
Les sortes possibles sont 'pique', 'coeur', 'carreau' et 'trèfle'.
:param face_visible: bouléen spécifiant si la face de la carte est
visible ou non (par défaut: non).
:returns: rien.
"""
self.figure = figure
self.sorte = sorte
self.face_visible = face_visible
def __str__(self):
""" Convertir en chaîne de caractères.
:returns: la carte sous la forme «FS», où «F» représente la figure
(parmi 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'),
et «S» représente la sorte (parmi '♠', '♥', '♦', '♣'), si la face
est visible; retourne «??» autrement.
"""
if self.face_visible == False:
return '??'
else:
return self.figure + self.sortes[self.sorte]
return
def flipper(self):
""" Renverser la face de la carte.
:returns: la carte self.
"""
self.face_visible = not self.face_visible
return self
class Donne:
""" Cette classe encapsule une donne, c-à-d une séquence de cartes. """
def __init__(self):
""" Construire une donne vide. Une donne est une liste de cartes. """
self.cartes = []
def __str__(self):
""" Convertir en chaîne de caractères.
:returns: la donne sous la forme d'une séquence de cartes séparées par
des espaces; None dans le cas d'une donne vide.
"""
if len (self.cartes) == 0:
return None
else:
return " ".join(str(x) for x in self.cartes)
def __add__(self, donne):
""" Concaténer deux donnes en une seule.
:param donne: la donne à concaténer avec self.
:returns: la concaténation des deux donnes.
"""
resultat = Donne()
resultat.cartes = list(self.cartes)
resultat += donne
return resultat
def __iadd__(self, donne):
""" Concaténer deux donnes en une seule en stockant le résultat
dans la première donne.
:param donne: la donne à concaténer avec self.
:returns: rien.
"""
for carte in donne.cartes:
self.ajouter(carte)
return self
def ajouter(self, carte):
""" Ajouter une nouvelle carte à la donne.
:param carte: la carte à ajouter.
:returns: rien.
"""
self.cartes.append(carte)
def retirer(self, carte):
""" Retirer une carte de la donne
:param carte: la carte à retirer.
:returns: rien
"""
self.cartes.remove(carte)
def vider(self):
""" Retirer toutes les cartes de la donne.
:returns: rien.
"""
self.cartes = []
class Paquet(Donne):
""" Cette classe encapsule un paquet standard de 52 cartes. """
def __init__(self):
""" Construire un paquet de 52 cartes prémélangées.
:returns: rien.
"""
super().__init__()
self.renouveler()
self.melanger()
def melanger(self):
""" Mélanger aléatoirement les cartes.
:returns: rien.
"""
random.shuffle(self.cartes)
def renouveler(self):
""" Renouveler les 52 cartes sans les mélanger.
:returns: rien.
"""
self.vider()
for figure in Carte.figures:
for sorte in Carte.sortes.keys():
self.ajouter(Carte(figure, sorte))
def tirer(self):
""" Tirer une carte du paquet.
:returns: la carte sur le dessus du paquet. Si le paquet est vide,
renouvelle et mélange automatiquement un nouveau paquet.
"""
if not self.cartes:
self.renouveler()
self.melanger()
return self.cartes.pop()
if __name__ == '__main__':
# programme principal
print("Le module JeuDeCarte n'est pas conçu pour être exécuté en tant que programme principal") |
Partager