
Envoyé par
speccy
Bon! déjà merci pour vos réponses que j'étudie avec soin....
==>Tryph : j'ai une hésitation sur l'ordre dans lequel je dois créer tout cela...
si j'ai bien compris ta méthode, mon deck instancié contiendrait une liste d'objets qui sont des cartes (objet CARD)...et après avoir créer le deck, je viendrais paramétrer chaque carte (CARD) avec son contenu réel du style :
1 2 3 4 5 6
|
DeckdeDebut=Deck(32)
DeckdeDebut.description =" Deck de création des cartes"
DeckdeDebut.cards[0].nom="Carte E"
DeckdeDebut.cards[1].nom="Carte F"
DeckdeDebut.cards[2].nom="Carte Z" |
1) Puis je adresser les noms des cartes comme cela?
oui, pour peu que la classe Card possède un attribut "nom" bien évidemment.
après, si j'étais à ta place, je ferai probablement comme proposé par Stalacta, c'est à dire préparer mes descriptions et autre infos au sujet de chaque carte dans une structure quelconque que je passerai ensuite au constructeur du DeckDebut pour que ça soit lui même qui s'occupe d'instancier complètement chaque carte.
car si le DeckDebut ne s'occupe que de créer les instance de Card sans les initialiser, il n'y que peu d'intérêt à faire comme ça.
dans ma première réponse, j'ai défini l'initialisation de la classe Deck comme ça:
def __init__(self, nb_cards)
mais il va de soi que le paramètre nb_cards est là en exemple que c'est probablement pas ce qu'on va vouloir faire au final, à moins de vouloir des cartes qui ne possède qu'une valeur numérique et rien d'autre. dans la pratique on voudra plutôt passer des infos utiles pour la création de chaque carte.
après la structure qui possède les infos de chaque carte peut être un dictionnaire ou quelque chose de plus complexe, suivant le besoin.

Envoyé par
speccy
2) autre question, j'ai du mal à conceptualiser le passage d'une carte d'un deck vers un autre (on enlève l'objet de la liste mais comment le rajouter dans une liste d'un autre deck ??...
En fait, du coup, je n'ai plus vraiment l'impression qu'une carte est un objet puisque cela devient un indice d'une liste....
si les indice sont trop abstraits, tu peux utiliser un dictionnaire à la place d'une liste faire en sorte que chaque carte ait un "nom_abrégé" unique qui pourra servir entre autre de clef de dictionnaire.
par exemple, admettons que ton deck contienne 4 cartes:
As de pique: nom_abrégé = "pique_1"
Reine de coeur: nom_abrégé = "coeur_reine"
Roi de carreau: nom_abrégé = "carreau_roi"
2 de trèfle: nom_abrégé = "trelfe_2"
la liste cards du DeckDebut pourrait donc devenir le dictionnaire suivant (à construire dynamiquement évidemment et à adapter au besoi réel):
1 2 3 4 5
| cards = {
"pique_1": Card("As de Pique"),
"coeur_reine": Card("Reine de Coeur"),
"carreau_roi": Card("Roi de Carreau"),
"trelfe_2": Card("2 de trèfle")} |
du coup au lieu de manipuler tes cartes à partir d'indice, tu les manipuleras par leur nom_abrégé, et comme chaque carte connaitra son propre nom_abrégé tu n'aura aucun mal à retrouver celui-ci.

Envoyé par
speccy
il va falloir lorsque je cliquerais sur cette carte que je récupère l'index de cet objet qui correspondra à sa position dans la liste du deck où elle est affectée?? pas clair tout cela pour moi....
Merci.
après ce que je te propose là n'est qu'une technique pour gérer le fonctionnement de ton jeu de carte, pas son affichage et les interactions avec l'utlisateur. Là tu parles de clique, mais tu ne cliques pas sur une instance de classe, tu cliques sur une représentation graphique d'une carte et ça sera à l'objet codant cette représentation de gérer cet aspet. tu peux éventuellement coder l'aspet graphique et l'aspet fonctionnement du jeu dans les même objets Python mais tout le monde te le déconseillera je pense.
quoi qu'il en soit, une simple méthode move_card(card, deck) sur chaque classe Deck (au passage, chaque classe Deck devrait hériter de la même classe de base) devrait te permettre de gérer les mouvements de carte d'une carte d'un deck à l'autre.
Cette méthode pourrait se contenter de supprimer la carte du deck sur lequel la méthode est appelée et de l'ajouter au deck fourni en paramètre. les dictionnaires, comme les listes, permettent de faire ça.
après, tout cas, ce ne sont que des pistes ...
Partager