Python, jeu de mémory

Mattmad Messages postés 2 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 20 avril 2010 - 20 avril 2010 à 13:31
Mattmad Messages postés 2 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 20 avril 2010 - 20 avril 2010 à 14:24
Bonjour, je suis en train de plancher sur un jeu de memory via python mais je ne parviens pas à résoudre un "petit" problème, je vous pose la question tel quelle m'est posée :
Défi nissez la variable globale découvert qui est une matrice de n lignes et
n colonnes où chacune des cases contient au départ la valeur False. [b]Lorsque deux cartes
identiques seront retournées, les deux cases correspondantes de decouvert seront mises à True./b
Ecrivez une fonction ni qui renvoie True si la partie est terminée (toutes les cases de
decouvert sont à True) et False sinon.

Mon problème réside sur la deuxième partie (en gras), je vois parfaitement comment créer la matrice False mais après je ne sais pas. Je vous met ce dont je dipose déjà comme fonction :

def matriceLettres(n):  
    matrice=n*[""]  
    for i in range(len(matrice)):  
        matrice[i] = n*[""]  
    return matrice  

from random import*
def remplissage_matrice(n):  
dicoLettres={}  
lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"]  
matrice=matriceLettres(n)  
for i in lettres:  
dicoLettres[i]=2  
for a in range(n):
for b in range(n):		
c=lettres[randrange(len(lettres))]
dicoLettres[c]=dicoLettres[c]-1
# la première fois que la lettre est trouvée: Insertion dans matrice
if dicoLettres[c]>0:
matrice[a][b]=c
# la seconde fois, la lettre est ajoutee dans la matrice et supprimee de lettres
elif dicoLettres[c] == 0:	
matrice[a][b]=c
lettres.remove(c)
return matrice



J'espère avoir de vos nouvelles rapidement.

1 réponse

Mattmad Messages postés 2 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 20 avril 2010
20 avril 2010 à 14:24
Je vais vous mettre l'intégralité de l'exercice ainsi peut comprendrez vous mieux la finalité de ce que je vous demande :

Question 1 . De nissez les variables globales n que vous initialiserez a 6 et la matrice
matriceLettres qui contient n lignes et n colonnes, chacune des cases de la matrice contiendra
la cha^ne vide "".
De nissez une fonction remplissage matrice qui va remplir matriceLettres avec les lettres de
A a R. Pour cela, de nissez (dans la fonction) une liste lettres qui contiendra toutes les lettres.
Construisez un dictionnaire dicoLettres ou les clefs sont les lettres de A a R et la valeur est 2
pour chaque clef. Remplissez toutes les cases de la matrice en tirant a chaque fois aleatoirement
une lettre dans le dictionnaire. N'oubliez pas de mettre a chaque fois a jour le dictionnaire.
Question 2 . De nissez la variable globale decouvert qui est une matrice de n lignes et
n colonnes ou chacune des cases contient au depart la valeur False. Lorsque deux cartes
identiques seront retournees, les deux cases correspondantes de decouvert seront mises a True.
Ecrivez une fonction ni qui renvoie True si la partie est terminee (toutes les cases de
decouvert sont a True) et False sinon.
Question 3 . De nissez les widgets suivants et les placer (voir Figure 1.) :
{ deux Labels titre et termine contenant les textes respectifs « Jeu du memory » et « Bonne
partie ».
{ un Canvas pour acher la grille.
{ deux boutons boutonQuitter et boutonRecommencer.
Question 4 . De nissez une fonction dessin grille pour dessinez la grille (voir gure 1.) Pour
cela, on e ectue un parcours de la matrice decouvert et pour chaque case ayant la valeur True
on ache la lettre correspondante dans matriceLettres.
Question 5 . Creez une fonction init() qui permet d'initialiser la partie (elle sera par la suite
associee au bouton boutonRecommencer) et une fonction action(ligne,colonne) pour retourner
une carte. On distinguera s'il s'agit de la premiere ou deuxieme carte du tour. Lorsque l'on
retourne la deuxieme carte, les deux cartes restent a decouvert si elles sont identiques. On
veri era a chaque fois si la partie est terminee en appelant la fonction ni(). Si c'est la cas, on
mettra la message « La partie est nie »dans le Label termine (voir gure 2.)
Associez a la grille une fonction retourner(event) qui recupere les coordonnees du point de
clique de souris lorsque l'on clique a gauche a l'interieur du Canvas. Cette fonction calcule les
valeurs valeurs ligne et colonne et appelle la fonction action(ligne,colonne).


Désolé pour les "coquilles" mais vu leur nombre je ne me sens pas l'âme de toutes les modifier
0
Rejoignez-nous