Partage
  • Partager sur Facebook
  • Partager sur Twitter

Projet ISN : Labyrinthe en Tkinter

    9 mai 2013 à 13:12:48

    Bonjour , je suis en Terminal S et j'ai choisi l'option ISN ,

    J'ai un problème pour faire un labyrinthe à l'aide de Tkinter : Je ne sais pas comment faire pour que le carré de ne passe pas à travers les murs :( !

    Ici il n'y a qu'un seul mur pour le moment mais j'ai pas l'intention d'en faire d'autre avant d'avoir réglé ce problème . Nos profs ne sont pas doué pour le python donc ils ne nous sont pas d'une aide précieuse ! 

    from Tkinter import *

    def Clavier(event):

        """ Gestion de l'événement Appui sur une touche du clavier """

        global PosX,PosY

        touche = event.char

        # déplacement vers le haut

        if touche == 'z':

            PosY -= 20

        # déplacement vers le bas

        if touche == 's':

            PosY += 20

        # déplacement vers la droite

        if touche == 'd':

            PosX += 20

        # déplacement vers la gauche

        if touche == 'q':

            PosX -= 20

        # on dessine le pion à sa nouvelle position

        Canevas.coords(Pion,PosX -5, PosY -5, PosX +5, PosY +5)

    # --- définition des fonctions gestionnaires d'événements : ---

    def drawline():

        "Tracé d'une ligne dans le canevas "

        global x1,y1,x2,y2

        Canevas.create_line(x1,x2,y1,y2,width=4,color=black)

    x1, y1, x2, y2 = 100,100,200,100# coordonnées de la ligne

    # Création de la fenêtre principale

    Mafenetre = Tk()

    Mafenetre.title('Pion')

    # position initiale du carré

    PosX = 0

    PosY = 400

    #Création d'un widget Canvas

    Largeur = 400

    Hauteur = 400

    Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')

    Ligne = Canevas.create_line(x1,x2,y1,y2) 

    Pion = Canevas.create_rectangle(PosX-5,PosY-5,PosX+5,PosY+5,width=1,outline='black',fill='red')

    Canevas.focus_set()

    Canevas.bind('<Key>',Clavier)

    Canevas.pack(padx =5, pady =5)

    # Création d'un widget Button (bouton Quitter)

    Button(Mafenetre, text ='Quitter', command = Mafenetre.quit).pack(side=LEFT,padx=5,pady=5)

    Mafenetre.mainloop()

    Voilà le code . J'aimerais de l'aide pour pouvoir avancé dans mon projet . Je ne trouve nul part d'aide pour reussir à faire ceci . 

    Merci de votre aide!

    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2013 à 23:21:02

      Alors voila, tu peux mettre ton code entre les balises </> lorsque tu tape un texte, elle est à droite de l'icone du paysage, et à gauche de l'icone ^_^

      Il sera vraiment plus lisible

      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2013 à 13:42:23

        from Tkinter import *
        
        def Clavier(event):
        
            """ Gestion de l'événement Appui sur une touche du clavier """
        
            global PosX,PosY
        
            touche = event.char
        
            # déplacement vers le haut
        
            if touche == 'z':
        
                PosY -= 20
        
            # déplacement vers le bas
        
            if touche == 's':
        
                PosY += 20
        
            # déplacement vers la droite
        
            if touche == 'd':
        
                PosX += 20
        
            # déplacement vers la gauche
        
            if touche == 'q':
        
                PosX -= 20
        
            # on dessine le pion à sa nouvelle position
        
            Canevas.coords(Pion,PosX -5, PosY -5, PosX +5, PosY +5)
        
        # --- définition des fonctions gestionnaires d'événements : ---
        
        def drawline():
        
            "Tracé d'une ligne dans le canevas "
        
            global x1,y1,x2,y2
        
            Canevas.create_line(x1,x2,y1,y2,width=4,color=black)
        
        x1, y1, x2, y2 = 100,100,200,100# coordonnées de la ligne
        
        # Création de la fenêtre principale
        
        Mafenetre = Tk()
        
        Mafenetre.title('Pion')
        
        # position initiale du carré
        
        PosX = 0
        
        PosY = 400
        
        #Création d'un widget Canvas
        
        Largeur = 400
        
        Hauteur = 400
        
        Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')
        
        Ligne = Canevas.create_line(x1,x2,y1,y2) 
        
        Pion = Canevas.create_rectangle(PosX-5,PosY-5,PosX+5,PosY+5,width=1,outline='black',fill='red')
        
        Canevas.focus_set()
        
        Canevas.bind('<Key>',Clavier)
        
        Canevas.pack(padx =5, pady =5)
        
        # Création d'un widget Button (bouton Quitter)
        
        Button(Mafenetre, text ='Quitter', command = Mafenetre.quit).pack(side=LEFT,padx=5,pady=5)
        
        Mafenetre.mainloop()

        -
        Edité par zados 16 mai 2013 à 13:43:22

        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2013 à 13:43:32

          D'accord merci ! C'est bon
          • Partager sur Facebook
          • Partager sur Twitter
            16 mai 2013 à 18:57:40

            Salut Zados. Il est normal que ton carré rouge "traverse" les murs puisque tu ne testes pas s'il risque de la faire ou pas. C'est un problème de "collision".

            Pour ton mur , il y a collision si  x1-5<PosX<x2+5 et y1-5<posY<y2+5 (si tu assures que x1<x2 et y1<y2). C'est ce qu'il faut tester avant d'autoriser la modif detes posX et Y dans ta fonction Clavier.

            Cela pourrait bien marcher pour UN mur.

            Anticipe en réfléchissant à l'avance comment tu vas gérer plusieurs murs.

            Quant à tes profs, c'est probablement plus Tkinter qu'ils maitrisent mal. On ne peut pas connaître tous les langages, toutes les interfaces graphiques, etc...

            Bon courage!

            • Partager sur Facebook
            • Partager sur Twitter
            Il y a 10 types de personnes: ceux qui savent compter en binaire et ceux qui ne savent pas...
              16 mai 2013 à 19:25:24

              Euh, excuse moi, j'ai tapé un peu vite (et changé de pseudo), faudra revoir un peu la formule pour le test, en distinguant les murs verticaux ou horizontaux (pour des murs obliques, c'est un peu plus complexe, il faut que dist(CentreDuCarre, (AB) )>5sqrt(2), utilise la formule de distance d'un point à une droite de ton cours de maths).

              Bon courage.

              • Partager sur Facebook
              • Partager sur Twitter
              Il y a 10 types de personnes: ceux qui savent compter en binaire et ceux qui ne savent pas...

              Projet ISN : Labyrinthe en Tkinter

              × 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