Partage
  • Partager sur Facebook
  • Partager sur Twitter

Help please

    12 mai 2015 à 19:56:51

    from tkinter import *
    from random import randrange
    
    # Déclarations des fonctions
    
    # Cette fonction va permettre de mettre le serpent en mouvement de manière automatique
    
    def move():
        global dx
        global dy
        global x
        global y
        global eat
        global flag
        global pomme
        global serpent
        global coord_serpent
        global direction
        global score
    
        # Le repas du petit serpent
    
        if coord_serpent[0]==x and coord_serpent[1]==y:
            can1.delete(pomme)
            eat=1
            coord=len(coord_serpent)
            score=score+10
            print (score)
            if direction==1:
    
                x1=coord_serpent[coord-4]
                y1=coord_serpent[coord-3]
                x2=coord_serpent[coord-2]
                y2=coord_serpent[coord-1]
    
                x1=x1+10
                x2=x2+10
                y2=y2+10
    
                coord_serpent.append(x1)
                coord_serpent.append(y1)
                coord_serpent.append(x2)
                coord_serpent.append(y2)
    
                serpent.append(can1.create_rectangle(x1,y1,x2,y2,fill="red"))
    
            if direction==2:
    
                x1=coord_serpent[coord-4]
                y1=coord_serpent[coord-3]
                x2=coord_serpent[coord-2]
                y2=coord_serpent[coord-1]
    
                x1=x1-10
                x2=x2-10
                y2=y2+10
    
                coord_serpent.append(x1)
                coord_serpent.append(y1)
                coord_serpent.append(x2)
                coord_serpent.append(y2)
    
                serpent.append(can1.create_rectangle(x1,y1,x2,y2,fill="red"))
    
            if direction==3:
    
                x1=coord_serpent[coord-4]
                y1=coord_serpent[coord-3]
                x2=coord_serpent[coord-2]
                y2=coord_serpent[coord-1]
    
                y1=y1+10
                y2=y2+10
    
                coord_serpent.append(x1)
                coord_serpent.append(y1)
                coord_serpent.append(x2)
                coord_serpent.append(y2)
    
                serpent.append(can1.create_rectangle(x1,y1,x2,y2,fill="red"))
    
            if direction==4:
    
                x1=coord_serpent[coord-4]
                y1=coord_serpent[coord-3]
                x2=coord_serpent[coord-2]
                y2=coord_serpent[coord-1]
    
                x2=x2+10
                y2=y2-10
    
                coord_serpent.append(x1)
                coord_serpent.append(y1)
                coord_serpent.append(x2)
                coord_serpent.append(y2)
    
                # On rajoute un nouveau carré dans notre liste de carrés
    
                serpent.append(can1.create_rectangle(x1,y1,x2,y2,fill="red"))
    
    
        food()
    
        # Les coordonnées de chaque carré prendront les coordonnées du carré qui le succède
        # cela permettra à chacun des carré de se suivre et d'obtenir l'effet du serpent 
    
        i=4
        j=1
    
        while j<len(serpent):
            coord_serpent[len(coord_serpent)-(i)]=coord_serpent[len(coord_serpent)-(i+4)]
            coord_serpent[len(coord_serpent)-(i-1)]=coord_serpent[len(coord_serpent)-(i+3)]
            coord_serpent[len(coord_serpent)-(i-2)]=coord_serpent[len(coord_serpent)-(i+2)]
            coord_serpent[len(coord_serpent)-(i-3)]=coord_serpent[len(coord_serpent)-(i+1)]
            i+=4
            j+=1
    
        # On fait le serpent avancer
    
        coord_serpent[0]=coord_serpent[0]+dx
        coord_serpent[1]=coord_serpent[1]+dy
        coord_serpent[2]=coord_serpent[0]+10
        coord_serpent[3]=coord_serpent[1]+10
    
    
        # Si le serpent touche le mur la partie s'arrête
    
        #
        i=0
        j=0
    
        if flag!=0:
            while j<len(serpent):
    
                # On redéfinie les coordonnées de chacun des carré
                # composant le corps du serpent
    
                can1.coords(serpent[j],coord_serpent[i],coord_serpent[i+1],coord_serpent[i+2],coord_serpent[i+3])
    
                i+=4
                j+=1
    
        if flag>0:
            fen1.after(30,move)
    
    
    # Cette fonction va permettre de générer au hasard de la nourriture dans le canevas
    
    def food():
        global eat
        global x
        global y
        global pomme
        global coord_serpent
        if eat==1:
            x=randrange(10,480,10)
            y=randrange(10,280,10)
            i=0
            i2=0
            pomme=can1.create_oval(x,y,x+10,y+10,fill="green")
            eat=0
    
    
    # Direction du petit serpent
    
    def left(event):
        global dx
        global dy
        global direction
        global coord_serpent
        if direction!=2:
            dx=-10
            dy=0
            direction=1
    
    
    
    def right(event):
        global dx
        global dy
        global direction
        if direction!=1:
            dx=10
            dy=0
            direction=2
    
    
    
    def up(event):
        global dx
        global dy
        global direction
        if direction!=4:
            dx=0
            dy=-10
            direction=3
    
    
    def down(event):
        global dx
        global dy
        global direction
        if direction!=3:
            dx=0
            dy=10
            direction=4
    
    
    # Programme principal
    
    # Définition du canevas (espace de jeu)
    
    fen1=Tk()
    fen1.title("Snake les amis")
    can1=Canvas(fen1,width=500,height=300,bg="white")
    
    # Définition des touches qui permettront de déplacer le serpent
    
    can1.bind_all("<Left>",left)
    can1.bind_all("<Right>",right)
    can1.bind_all("<Up>",up)
    can1.bind_all("<Down>",down)
    
    can1.grid(row=0,column=0,rowspan=10)
    
    # Liste des coordonnées du serpent
    
    coord_serpent=[20,20,50,50]
    
    # Définition des coordonnées de départ du serpent
    
    serpent=[can1.create_rectangle(coord_serpent[0],coord_serpent[1],coord_serpent[2],coord_serpent[3],fill="red")]
    
    
    flag=1
    eat=0
    
    # Première pomme
    
    x=randrange(10,480,10)
    y=randrange(10,280,10)
    pomme=can1.create_oval(x,y,x+10,y+10,fill="green")
    
    # Pas avancement serpent
    
    dx=10
    dy=0
    
    # il faut donner une valeur a direction
    
    direction=1
    
    # Le compteur de score
    score=0
    
    move()
    
    fen1.mainloop()
    
    Qui peut m'expliquer à quoi sert le flag ?
    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2015 à 20:55:44

      Tu ne te rappelles plus à quoi sert la variable que tu as créé?
      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
        13 mai 2015 à 9:48:02

        Oly et l'ironie du code copié collé ^^

        Salut,

        Le flag est surement une variable de debuggage puisqu'elle n'est utilisée que dans une seule fonction qui teste sa non-nullité et sa positivité

        En somme le codeur a surement passé la variable à -1 pour placer son serpent sans mouvement,
        Et à 0 pour afficher le décor et placer les pommes ;)
        Puis à 1 pour tester son prog en entier.

        • Partager sur Facebook
        • Partager sur Twitter
        OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
          14 mai 2015 à 0:01:01

          Non mais justement je cherche à comprendre ce programme, pour ensuite en faire un moi c'est pour ça que je cherche des réponse mais je ne comprend pas ce flag :-/

          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2015 à 12:07:42

            IQbrod a écrit:

            Le flag est surement une variable de debuggage puisqu'elle n'est utilisée que dans une seule fonction qui teste sa non-nullité et sa positivité

            En somme le codeur a surement passé la variable à -1 pour placer son serpent sans mouvement,
            Et à 0 pour afficher le décor et placer les pommes ;)
            Puis à 1 pour tester son prog en entier.


            Salut,

            Au risque de me répéter qu'y a t-il que tu n'as pas compris dans mon explication ?

            • Partager sur Facebook
            • Partager sur Twitter
            OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
              15 mai 2015 à 12:27:15

               i=4
                  j=1
               
                  while j<len(serpent):
                      coord_serpent[len(coord_serpent)-(i)]=coord_serpent[len(coord_serpent)-(i+4)]
                      coord_serpent[len(coord_serpent)-(i-1)]=coord_serpent[len(coord_serpent)-(i+3)]
                      coord_serpent[len(coord_serpent)-(i-2)]=coord_serpent[len(coord_serpent)-(i+2)]
                      coord_serpent[len(coord_serpent)-(i-3)]=coord_serpent[len(coord_serpent)-(i+1)]
                      i+=4
                      j+=1
               
                  # On fait le serpent avancer
               
                  coord_serpent[0]=coord_serpent[0]+dx
                  coord_serpent[1]=coord_serpent[1]+dy
                  coord_serpent[2]=coord_serpent[0]+10
                  coord_serpent[3]=coord_serpent[1]+10
               
               
                  # Si le serpent touche le mur la partie s'arrête
               
                  #
                  i=0
                  j=0
               
                  if flag!=0:
                      while j<len(serpent):
               
                          # On redéfinie les coordonnées de chacun des carré
                          # composant le corps du serpent
               
                          can1.coords(serpent[j],coord_serpent[i],coord_serpent[i+1],coord_serpent[i+2],coord_serpent[i+3])
               
                          i+=4
                          j+=1
               
                  if flag>0:
                      fen1.after(30,move)
              

              J'avais compris ça mais je comprend pas la partie ou il y a ce flag, je vous joint la paertie que je ne comprend pas :
              • Partager sur Facebook
              • Partager sur Twitter

              Help please

              × 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