Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide jeu de dames python

Sujet résolu
    23 mai 2018 à 18:46:17

    Bonjour, je suis en terminale S et j'ai un projet d'ISN (Informatique et science du numérique) à rendre.

    Nous devons faire un petit jeu et j'ai décidé de faire un jeu de dames.

    J'ai utilisé le module tkinter pour créer toute la partie graphique et pour avoir des boutons.

    J'ai rencontré plusieurs difficultés et parfois j'ai su me débrouiller mais maintenant j'ai besoin d'aide. Je n'ai plus beaucoup de temps pour terminer ce programme et je suis bloqué.

    J'utilise un bouton "Droite" pour déplacer mon pion vers la droit et un bouton "Gauche" pour le déplacer vers la gauche.

    Pour éviter que mes pions ne sortent du damier, j'ai crée une variable nommée "CompteurPionB1". Cette dernière commence à 0 et devrait augmenter de 1 à chaque fois que le pion se déplace à droite et baisser de -1 lorsqu'il se déplace à gauche. En outre, lorsque le compteur atteint 0, le bouton "Gauche" disparaît pour éviter qu'on ne clique dessus et que l'on fasse sortir le pion. Pareil pour le bouton "Droite" lorsque le compteur atteint 3.

    Problème: Le compteur ne veut pas changer de valeur lorsque je clique sur les boutons.

    Voici mon code python :

    from Tkinter import * #Importation du module Tkinter
    
    
    
    Jeu_de_dames = Tk() #Création de la fenêtre pour l'interface graphique nommée "Jeu_de_dames"
    
    
    CompteurTour = 0
    CompteurPionB1 = 0
    
    
    def Droite(PionJoueur, Ajout):
        Damier.move(PionJoueur, 150, -150)
        Ajout += 1
        return Ajout
    
    
    def Gauche(PionJoueur, Retrait):
        Damier.move(PionJoueur, -150, -150)
        Retrait += 1
        return Retrait
    
        
    def TestCompteur():
        print CompteurPionB1
    
    
    Damier = Canvas(Jeu_de_dames,width=600, height=900, bg="sienna4")
    Damier.pack()
    
    
    Damier.create_rectangle(0,0,150,150, fill="khaki", width=0)
    Damier.create_rectangle(300,0,450,150, fill="khaki", width=0)
    Damier.create_rectangle(150,150,300,300, fill="khaki", width=0)
    Damier.create_rectangle(450,150,600,300, fill="khaki", width=0)
    Damier.create_rectangle(0,300,150,450, fill="khaki", width=0)
    Damier.create_rectangle(300,300,450,450, fill="khaki", width=0)
    Damier.create_rectangle(150,450,300,600, fill="khaki", width=0)
    Damier.create_rectangle(450,450,600,600, fill="khaki", width=0)
    Damier.create_rectangle(0,600,150,750, fill="khaki", width=0)
    Damier.create_rectangle(300,600,450,750, fill="khaki", width=0)
    Damier.create_rectangle(150,750,300,900, fill="khaki", width=0)
    Damier.create_rectangle(450,750,600,900, fill="khaki", width=0)
    
    
    PionN1 = Damier.create_oval(175,25,275,125, fill="black", width=0)
    PionN2 = Damier.create_oval(475,25,575,125, fill="black", width=0)
    PionB1 = Damier.create_oval(25,775,125,875, fill="white", width=0)
    PionB2 = Damier.create_oval(325,775,425,875, fill="white", width=0)
    
    
    if CompteurPionB1 < 3:
        bouton_droite = Button(Jeu_de_dames, text="Droite", command=lambda: Droite(PionB1, CompteurPionB1))
        bouton_droite.pack()
    
    if CompteurPionB1 > 0:
        bouton_gauche = Button(Jeu_de_dames, text="Gauche", command=lambda: Gauche(PionB1, CompteurPionB1))
        bouton_gauche.pack()
        
    
    bouton_test = Button(Jeu_de_dames, text="Compteur", command=TestCompteur)
    bouton_test.pack()
    
    
    Jeu_de_dames.mainloop() #On démarre la boucle qui s'interrompt lorsqu'on ferme la fenêtre


    Je vous remercie par avance de votre aide.

    -
    Edité par TheYaya 23 mai 2018 à 20:41:45

    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2018 à 22:20:24

      Up, s'il vous plait j'ai besoin de régler ce problème avant mardi car c'est la date de mon épreuve.
      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2018 à 22:55:15

        Salut :)

        C'est sale, je suis sur iPad.

        L'idée est de mettre un IntVar().

        Tu veux pas que ça aille en dessous de 0, n'ai au dessus de 3.

        À chaque clic tu fais une condition avec la méthode get() du IntVar. Prenons le gauche, si l condition est :

        Si variable.get() < 0 alors

            appeler la fonction qui grise (bloque) le bouton gauche.

        pour changer la valeur du IntVar, utilise la méthode set(nouvelle_valeur). Prenons le droit, tu fais 

        variable.set(variable.get() + 1).

        sinon, oldprogrammer suggère widget.var, mais comme je connais pas, je le laisse t'en dire plus s'il passe par là.

        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2018 à 23:39:45

          Merci de ton aide :) J'ai plus ou moins compris ce que tu voulais dire (malgré que je ne connaissais pas cela) mais le problème persiste, comment je fais pour incrémenter la valeur du IntVar à l'aide d'un argument dans une fonction ?

          Par exemple:

          def BoutonsB1():
              bouton_droiteB1 = Button(Jeu_de_dames, text="Droite pion 1", command=lambda: DroiteB(PionB1, CompteurPionB1))
              if CompteurPionB1 < 3:
                  bouton_droiteB1.pack()
              bouton_gaucheB1 = Button(Jeu_de_dames, text="Gauche pion 1", command=lambda: GaucheB(PionB1, CompteurPionB1))
              if CompteurPionB1 > 0: 
                  bouton_gaucheB1.pack()
          
          def BoutonsB2():
              bouton_droiteB2 = Button(Jeu_de_dames, text="Droite pion 2", command=lambda: DroiteB(PionB2, CompteurPionB2))
              if CompteurPionB2 < 3:
                  bouton_droiteB2.pack()
              bouton_gaucheB2 = Button(Jeu_de_dames, text="Gauche pion 2", command=lambda: GaucheB(PionB2, CompteurPionB2))
              if CompteurPionB2 > 0:
                  bouton_gaucheB2.pack()
          
          def DroiteB(PionJoueur, Ajout):
              Damier.move(PionJoueur, 150, -150)
              Ajout += 1
              return Ajout
          
          
          def GaucheB(PionJoueur, Retrait):
              Damier.move(PionJoueur, -150, -150)
              Retrait -= 1
              return Retrait

          A l'aide des fonctions "DroiteB" et "GaucheB" qui permettent de déplacer mes pions, j'aimerai modifier la valeur de mes variables "CompteurPionB1" et "CompteurPionB2" sans avoir besoin de créer 2 fonctions pour chaque variables. Comme tu le peux le voir ci-dessus, j'ai essayé de stocker ces variables dans des arguments que j'ai nommé "Ajout" et "Retrait" mais ça ne fonctionne pas. Le "return" ne permet que de faire ressortir les variables "Ajout" et "Retrait" et non pas d'augmenter la valeur de "CompteurPionB1" ou "CompteurPionB2"

          Edit: J'ai trouvé une solution sans passer par un argument de fonction.

          -
          Edité par TheYaya 25 mai 2018 à 17:47:02

          • Partager sur Facebook
          • Partager sur Twitter
            26 mai 2018 à 12:50:12

            TheYaya a écrit:

            Edit: J'ai trouvé une solution sans passer par un argument de fonction.

            -
            Edité par TheYaya il y a environ 19 heures

            Salut :)

            Et c'est quoi ta solution ? De plus, le IntVar() n'implique pas un paramètre de fonction.

            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2018 à 9:23:56

              C'est pas très propre mais je me suis servi de "global" afin de faire sortir la variable de la fonction et j'ai ajouté un chiffre en argument pour savoir de quel compteur on parle (car j'en ai plusieurs) :

              def BoutonsB1():
                  bouton_droiteB1 = Button(Jeu_de_dames, text="Droite pion 1", command=lambda: Mouvement(PionB1, 1, 150, -150, bouton_droiteB1, bouton_gaucheB1))
                  if CompteurPionB1 < 3 and CompteurPionB1 + 0.9 != CompteurPionB2:
                      bouton_droiteB1.pack()
                  bouton_gaucheB1 = Button(Jeu_de_dames, text="Gauche pion 1", command=lambda: Mouvement(PionB1, 2, -150, -150, bouton_droiteB1, bouton_gaucheB1))
                  if CompteurPionB1 > 0.7 and CompteurPionB1 - 1.1 != CompteurPionB2:
                      bouton_gaucheB1.pack()
                  BoutonSelectionB1.destroy()
                  BoutonSelectionB2.destroy()
              
              def BoutonsB2():
                  bouton_droiteB2 = Button(Jeu_de_dames, text="Droite pion 2", command=lambda: Mouvement(PionB2, 3, 150, -150, bouton_droiteB2, bouton_gaucheB2))
                  if CompteurPionB2 < 3:
                      bouton_droiteB2.pack()
                  bouton_gaucheB2 = Button(Jeu_de_dames, text="Gauche pion 2", command=lambda: Mouvement(PionB2, 4, -150, -150, bouton_droiteB2, bouton_gaucheB2))
                  if CompteurPionB2 > 0.7:
                      bouton_gaucheB2.pack()
                  BoutonSelectionB1.destroy()
                  BoutonSelectionB2.destroy()
                  
              def BoutonsN1():
                  bouton_droiteN1 = Button(Jeu_de_dames, text="Droite pion 1", command=lambda: Mouvement(PionN1, 5, 150, 150, bouton_droiteN1, bouton_gaucheN1))
                  if CompteurPionN1 < 2.9 and CompteurPionN1 - 0.9 != CompteurPionB1:
                      bouton_droiteN1.pack()
                  bouton_gaucheN1 = Button(Jeu_de_dames, text="Gauche pion 1", command=lambda: Mouvement(PionN1, 6, -150, 150, bouton_droiteN1, bouton_gaucheN1))
                  if CompteurPionN1 > 0.7 and CompteurPionN1 + 1.1 != CompteurPionB1:
                      bouton_gaucheN1.pack()
                  BoutonSelectionN1.destroy()
                  BoutonSelectionN2.destroy()
              
              def BoutonsN2():
                  bouton_droiteN2 = Button(Jeu_de_dames, text="Droite pion 2", command=lambda: Mouvement(PionN2, 7, 150, 150, bouton_droiteN2, bouton_gaucheN2))
                  if CompteurPionN2 < 2.9:
                      bouton_droiteN2.pack()
                  bouton_gaucheN2 = Button(Jeu_de_dames, text="Gauche pion 2", command=lambda: Mouvement(PionN2, 8, -150, 150, bouton_droiteN2, bouton_gaucheN2))
                  if CompteurPionN2 > 0.7:        
                      bouton_gaucheN2.pack()
                  BoutonSelectionN1.destroy()
                  BoutonSelectionN2.destroy()
              
              def Mouvement(PionJoueur, ChoixPion, X, Y, DelBouton1, DelBouton2):
                  global CompteurTour
                  global CompteurPionB1
                  global CompteurPionB2
                  global CompteurPionN1
                  global CompteurPionN2
                  DelBouton1.destroy()
                  DelBouton2.destroy()
                  Damier.move(PionJoueur, X, Y)
                  if ChoixPion == 1:
                      CompteurPionB1 += 0.9
                  if ChoixPion == 2:
                      CompteurPionB1 -= 1.1
                  if ChoixPion == 3:
                      CompteurPionB2 += 0.9
                  if ChoixPion == 4:
                      CompteurPionB2 -= 1.1
                  if ChoixPion == 5:
                      CompteurPionN1 += 1.1
                  if ChoixPion == 6:
                      CompteurPionN1 -= 0.9
                  if ChoixPion == 7:
                      CompteurPionN2 += 1.1
                  if ChoixPion == 8:
                      CompteurPionN2 -= 0.9



              • Partager sur Facebook
              • Partager sur Twitter

              Aide jeu de dames python

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown