Exercice: Jeu de cartes des 7 familles
Lien vers le notebook: CAPYTALE
Les cartes
On donne la declaration de la classe Sept_Familles
class Sept_Familles:
"""
NAME
Sept_Familles
DESCRIPTION
constructeur pour les cartes du jeu
PARAMETERS
famille (str): nom de la famille
choix parmi ('Jongleurs','Acrobates','Dresseurs','...')
membre_famille(str): membre de la famille
choix parmi ('Grand-père','Grand-mère','Pére','Mère','Fils','Fille')
FUNCTIONS
get_Attributs
"""
def __init__(self,famille,qui):
self.famille = famille
self.membre_famille = qui
Question 1: créer (instancier) l’objet carte1
de la famille des Jongleurs, le Grand-père.
Question 2: Compléter la classe Sept_Familles avec la fonction get_Attributs
. Cette fonction ne prend pas d’autre paramètre que self
.
Celle-ci devra retourner un tuple constitué des 2 attributs de classe.
Exemple d’utilisation dans le programme:
>>> carte1.get_attribut()
('Jongleurs','Grand-père')
Question 3: Consulter le Docstring de la classe:
>>> help(Sept_Familles)
Question 4: Définir les objets-cartes suivantes:
carte1 = Sept_Familles('Jongleurs','Grand-père')
carte2 = Sept_Familles('Jongleurs','Fille')
carte3 = Sept_Familles('Musiciens','Père')
carte4 = Sept_Familles('Musiciens','Fille')
Puis tester la méthode de classe:
>>> carte2.get_Attributs()
Ajouter les autres membres de l’une des familles (carte5, carte6,…). Une famille est constituée de Grand-père, Grand-mère, Père, Mère, Fils, Fille.
Question 5: Ajouter la méthode __repr__
qui permettra de décrire la carte:
Exemple de message attendu:
>>> print(carte1)
La carte est de la famille des Jongleurs. C'est le Grand-père.
Testez votre fonction pour quelques unes des cartes.
Classe joueur
Le joueur est un objet qui possède, pour attributs, les cartes qu’il a en main.
Chaque joueur est une instance de la classe Joueur
, et sera construit avec joueur1 = Joueur(carte1,...)
Difficulté à venir: On ne connait pas le nombre de cartes que le joueur peut avoir en main à l’instant t.
Python permet d’appeler une fonction avec un nombre inconnu d’arguments: il faut ajouter le paramètre *args
dans la déclaration de la fonction. On parcourt alors les arguments de la manière suivante:
for i in args:
...
La fonction __init__
aura alors pour arguments self
(qui est obligatoire), et *args
. On y definit une liste vide, self.C
, et on y ajoute des tuples constitués des attributs pour chacune des cartes du joueur. Cette fonction est donnée dans l’editeur, plus bas…
Question 1: Dans la classe Joueur
: Ecrire une méthode de classe get_cartes
qui retourne la liste self.C
, afin de pouvoir accéder à la liste des cartes du joueur.
class Joueur:
def __init__(self,*args):
self.C = []
for i in args:
self.C.append(i.get_Attributs())
# à compléter
carte1 = Sept_Familles('Jongleurs','Grand-père')
carte2 = Sept_Familles('Jongleurs','Fille')
carte3 = Sept_Familles('Musiciens','Père')
carte4 = Sept_Familles('Musiciens','Fille')
Question 2: Créer l’objet joueur1
. Celui-ci devra posséder les cartes carte1
et carte2
définies plus haut: joueur1 = Joueur(carte1,carte2)
Tester alors la méthode : joueur1.get_cartes() pour afficher la liste.
Question 3: Créer une méthode de classe __repr__
pour afficher cette liste dans un message, comme par exemple:
>>> print(joueur1)
le joueur possède les cartes : [('Jongleurs', 'Grand-père'), ('Jongleurs', 'Fille')]
Question 4: On souhaite maintenant avoir une interaction plus poussée avec le Joueur
, selon les règles du jeu.
L’idée est de créer une méthode possede
qui prend en paramètre un tupple (famille,membre_famille)
, et qui retourne un booleen selon la main du joueur, comme par exemple:
>>> joueur1.possede(('Jongleurs','Fils'))
False
>>> joueur1.possede(('Jongleurs','Fille'))
True
>>> joueur1.possede(carte1.getAttributs())
True
Question 5: Quelles fonctionnalités du jeu reste t-il à programmer pour avoir un jeu complet?
Question 6: (mini projet) Programmer l’une de ces fonctionnalités.
On pourra par exemple programmer une fonction demande
de la classe Joueur
telle que:
>>> joueur1 = Joueur(carte1,carte2)
>>> print(joueur1)
le joueur possède les cartes : [('Jongleurs', 'Grand-père'), ('Jongleurs', 'Fille')]
>>> joueur2.demande(joueur1,('Jongleurs','Grand-père'))
le joueur a la carte
>>> joueur2.demande(joueur1,('Jongleurs','Grand-mère'))
pioche
>>> joueur2.demande(joueur1,carte2.get_Attributs())
le joueur a la carte
Liens
Correction de l’exercice sur le jeu des Sept_Familles
: Lien
La suite en TP