begin process at 2010 09 08 22:23:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Débutant(e)

 > 

besoin d'aide pour une fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

besoin d'aide pour une fonction

mercredi 21 avril 2010 à 23:43:38 | besoin d'aide pour une fonction

Nitnekk

Bonjour à tous je suis étudiant et j'apprends depuis janvier le langage python.
Je dois actuellement réaliser un jeu de mémory ou chaque carte est une lettre. J'ai presque terminé, mais j'ai des problèmes avec la dernière fonction.
Voici l'énoncé:
Créez une fonction action(ligne,colonne)pour retourner une carte. On distinguera s'il s'agit de la première ou deuxième carte du tour. Lorsque l'on retourne la deuxième carte, les deux cartes restent à découvert si elles sont identiques.

Le sujet complet est disponible ici.

Après plusieurs essais, voila ma meilleure tentative (apparemment l'indentation ne marche pas sa ne va pas faciliter le travail ):

carte=0
lettre1=""

def action(ligne,colonne):
global carte
global lettre1
if carte==0: #Autrement dit je retourne la première carte
for lig in range (nombreCases):
for col in range (nombreCases):
if decouvert[lig][col]==False:
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5))
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5)) #Je cache les deux cartes précedemment tirées si elles ne sont pas identiques
canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne]) #J'affiche la carte
carte=1
lettre1=matriceLettres[ligne][colonne] #je mémorise la valeur de la carte
else: #je tire la deuxième carte
carte=0
canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne])
lettre2=matriceLettres[ligne][colonne]
if lettre1==lettre2: #Si les deux cartes sont les mêmes
decouvert[ligne][colonne]=True #sa c'étais dans la question 2. Cela indique que la carte est trouvée et qu'il faut la laisser affichée.
if fini():
termine.config(text="La partie est finie") #Sa sa indique que si toutes les cartes on la valeur True, la partie est finie


Mon problème c'est qu'avec cette fonction, seule la deuxième carte prends la valeur True, je ne voit pas comment je peux le faire pour la première. C'est un peu la même chose au début:
for lig in range (nombreCases):
for col in range (nombreCases):
if decouvert[lig][col]==False:
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5))
canvas.delete (y0 +c*(lig+.5),x0+c*(col+.5))

Il faudrait que je mémorise le lig et le col des 2 cartes précédentes.


Je ne sais pas si vous allez réussir à me suivre avec ce seul bout de code. Je peux si vous le souhaitez écrire tout mon programme.
En esperant avoir été clair et avoir des réponses, merci d'avance.
lundi 26 avril 2010 à 10:36:48 | Re : besoin d'aide pour une fonction

Rafikiki

Bonjour, désolé pour la lenteur de ma réponse mais des problèmes internet mon empêcher de retourner sur mon compte principal ... Donc je pense que tu pourrais résoudre ce problème via une autre fonction que tu appelles, pour cela j'aurais besoin de pouvoir accéder à l'intégralité de ton code si cela était possible ( j'ai cru comprendre dans ton lien, que cela était plutôt urgent, j'essaierais de jeter un coup d'½il dessus dès que tu m'auras envoyer l'intégralité de ton code.

( PS: Le 3ème "logo" dans la barre en partant de la fin permet d'insérer du code python.)
lundi 26 avril 2010 à 11:30:50 | Re : besoin d'aide pour une fonction

Nitnekk

Merci de ta réponse mais effectivement c'est pour demain. J'ai réussi à m'en sortir. Le jeu en lui même fonctionne très bien mais le code est vraiment moche. Je peux te le montrer si tu veux.
lundi 26 avril 2010 à 12:07:07 | Re : besoin d'aide pour une fonction

Rafikiki

Je veux bien si tu veux je pourrais essayer de l'embellir un petit peu, on ne sait jamais ^^.
lundi 26 avril 2010 à 15:33:46 | Re : besoin d'aide pour une fonction

Nitnekk

Voila c'est assez long, et la fonction action est vraiment très très moche...
Code Python :
# ----------------- Modules nécessaire ---------------------------------------------------------------------------------------------

from Tkinter import *
from random import *


# ----------------- Variables Globales ---------------------------------------------------------------------------------------------

nombreCases=6 #nombre de cases par ligne
x0,y0=10,10  #coordonnées du début de la grille
c=80 #longueur et largeur d'une case
matriceLettres=[["" for x in range (nombreCases)]for x in range (nombreCases)] #matrice vide destinée à accueillir les lettres
decouvert=[[False for x in range (nombreCases)]for x in range (nombreCases)] #matrice destinée à afficher les lettres trouvées
carte=0 #Nombre de cartes tirées. Si 0 je tire la première, si 1 je tire la deuxième
lettre1="" #Va prendre la valeur de la première lettre pour la comparer à la deuxième



#------------------Fonctions -------------------------------------------------------------------------------------------------------

#------------------Question 1: Cette fonction remplit aléatoirement la matrice matriceLettres avec les lettres disponible-----------
def remplissage_matrice():
    global matriceLettres
    global nombreCases
    lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"]
    dicoLettres={"A":2,"B":2,"C":2,"D":2,"E":2,"F":2,"G":2,"H":2,"I":2,"J":2,"K":2,"L":2,"M":2,"N":2,"O":2,"P":2,"Q":2,"R":2}
    for ligne in range (nombreCases):
        for colonne in range (nombreCases):
            matriceLettres[ligne][colonne]=choice(dicoLettres.keys()) #Pour chaque case je choisit une lettre au hasard
            dicoLettres[matriceLettres[ligne][colonne]]-=1 #Je supprime une fois cette lettre du dictionnaire
            if dicoLettres[matriceLettres[ligne][colonne]]==0: #Si la lettre a été utilisée deux fois, je la supprime
                del dicoLettres[matriceLettres[ligne][colonne]]
    return matriceLettres

#-------------------Question 2: On repère la fin de la partie----------------------------------------------------------------------
def fini():
    for ligne in range (nombreCases):
        for colonne in range (nombreCases):
            if decouvert[ligne][colonne]==False: #S'il reste une case False, la partie n'est pas finie
                return False
    return True

#-------------------Question 4: On affiche les lettres trouvées (ayant la valeur True)---------------------------------------------
def dessin_grille():
    for ligne in range (nombreCases):
        for colonne in range (nombreCases):
            if decouvert[ligne][colonne]==True: # Pour chaque case découvert, j'affiche la lettre dans le canvas
                canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne])

#-------------------Question 5: On crée la grille et on associe une lettre par case. (Bouton Recommencer)--------------------------
def init():
    global lettre1
    lettre1="" #On commencera forcément par tirer la première carte
    canvas.delete(ALL) #J'efface tout ce qui était affiché dans le canvas
    termine.config(text="Bonne Partie") #J'affiche le texte bonne partir
    for ligne in range (nombreCases):
        for colonne in range (nombreCases): #J'indique qu'aucune case n'est trouvée
            decouvert[ligne][colonne]=False 
    for i in range(nombreCases+1): #Je crée les lignes
        canvas.create_line(x0+c*i, y0,x0+c*i,y0 + nombreCases*c)
        canvas.create_line(x0, y0+c*i,x0+nombreCases*c ,y0+c*i)
    remplissage_matrice() #J'utilise cette fonction pour associer à chaque case une lettre

#-------------------Question 5: On retourne une carte, une autre et on les compare------------------------------------------------
def action(ligne,colonne):
    global carte
    global lettre1
    if decouvert[ligne][colonne]==False: #Si je clique sur une carte non affichée
        if carte==0: # Premier cas, je tire la première carte
            carte=1 #Au prochain coup je tirerais la deuxième
            
            #Je veux effacer les deux cartes précédentes si elles sont différentes, la méthode est certainement perfectible
            canvas.delete(ALL) #Je commence par tous supprimer
            for i in range(nombreCases+1): #Je retrace les lignes
                canvas.create_line(x0+c*i, y0,x0+c*i,y0 + nombreCases*c)
                canvas.create_line(x0, y0+c*i,x0+nombreCases*c ,y0+c*i)
            dessin_grille() #J'affiche les lettres qui étaient déja trouvée (valeur True)
        
            decouvert[ligne][colonne]=True #J'affiche la première lettre
            dessin_grille()
            lettre1=matriceLettres[ligne][colonne] #Je la mémorise
        else: # Deuxième cas, je tire la deuxième carte
            carte=0 #Au prochain coup je tirerais la première et recommencerais un tour
            canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne]) #J'affiche la deuxième lettre
            lettre2=matriceLettres[ligne][colonne] #Je la mémorise
            if lettre1!=lettre2:
                for lig in range (nombreCases):
                    for col in range (nombreCases): #Je recherce donc quelle case avait la lettre1
                        if matriceLettres[lig][col]==lettre1:
                            decouvert[lig][col]=False #Et je la laisse découvert
            else: #Si les deux lettres sont identiques:
                decouvert[ligne][colonne]=True #La deuxième carte doit donc rester découverte (True)
                if fini(): #Je regarde si la partie est terminée
                    termine.config(text="La partie est finie") #Si oui je change le texte
    
#-------------------Question 5: On remmene le clic a une case ---------------------------------------------------------------------
def correspond(x,y):
    return (x-x0)/c,(y-y0)/c

#-------------------Question 5: On repère la case du clic et on appelle action(ligne,colonne)--------------------------------------
def retourner(event):
    pos=correspond(event.x,event.y)
    ligne=pos[0]
    colonne=pos[1]
    if ligne in range(nombreCases) and colonne in range (nombreCases):
        action(ligne,colonne)
    

#-------------------Fonction quitter ----------------------------------------------------------------------------------------------
def quitter():
    memory.quit()
    memory.destroy()
    

#-------------------Fenetre Tkinter -----------------------------------------------------------------------------------------------    
memory=Tk()

#-------------------Création des widgets-------------------------------------------------------------------------------------------
titre=Label(memory, text="Jeu du memory") #le titre
termine=Label(memory, text="Bonne Partie") #l'encouragement qui se transforme en félicitation
canvas=Canvas(memory, width=500, height=500) #le canvas
boutonQuitter=Button(memory, text="Quitter", command=quitter) #le bouton quitter
boutonRecommencer=Button(memory, text="Recommencer une partie", command=init) #le bouton recommencer

#-------------------Placement des widgets------------------------------------------------------------------------------------------
titre.grid(row=0, column=0)
canvas.grid(row=1, column=0)
boutonQuitter.grid(row=2, column=0)
boutonRecommencer.grid(row=1, column=1)
termine.grid(row=2, column=1)

canvas.bind("<Button-1>",retourner)

memory.mainloop() #Je ferme le tout


Cette discussion est classée dans : ligne, colonne, carte, col, lig


Répondre à ce message

Sujets en rapport avec ce message

Recuperation d'argument (ligne de commande) [ par Bl0tCh ] Bonjour, J'aimerais savoir comment récupérer les arguments que l'on passe ds la ligne de commande. Exemple :prog.exe -a 18 -s mComment récuperer le 18 Tkinter et Python [ par Telimektar1er ] Voila j'ai commencé e python il y a une semaine et jusqu à aujourd'hui aucun problème. Mais voilà, je viens de commencer la création d'interface graph poser des points d'insertion sur une ligne [ par undertaker4000 ] Bonjour à tous, Je suis un gros nul sur Python (eh oui, personne n'est parfait ) Comme je n'y connais rien à la programmation Python, je voudrais savo Condition ne fonctionne pas [ par Fabrizio001 ] Bonjour,Je débute (1 semaine )en python et je sollicite votre aide. Voici ce que j'essaye de faire:Je veux contrôler le contenu d'un fichier .txt qui script python [ par emma66 ] Bonjour, Je recherche un code en python d'une fonction mapList dont le role est de recopier dans la variable Map passée en paramétre les lignes du fic Python / SQLite / for...in... [ par samylatortue ] Bonjour à tous,je suis face à un problème depuis quelque jours...j'ai une base de donnée dans laquel il y a 2 tables j'aimerais prendre une partie des Programmation robot suiveur de ligne [ par coolbart ] Bonjour,dans le cadre de mes études avec 2 collègues, nous devons réaliser de A à Z un robot qui suit une ligne blanche sur fond noire. Malheureusemen executer un script perl linux sous windows [ par bensirack ] bonjour j'ai un script perl ki marche correctement sur linux mais que je dois executer sous windows. j'ai essaye de faire quelque modif pour qu'elle m opération sur les fichiers [ par bossou ] Bonjour à tous. je suis très novice en programmation avec python et je souhaite avoir un exemple de script qui me permettra de charger un fichier text Serveur/Client (Je comprend pas 2lignes) [ par Guillamue06 ] Bonjour, voila j'ai vue cette source serveur et j'éssai de la comprendre et 2 ligne m'échape : import socket HOST = '127.0.0.1' # The remote host


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales