.move + events deplacement TKINTER python 3.7

Anoikis -  
 Anoikis -
Bonjour,
Je suis actuellement en terminale S et je suis un novice du code, cependant j'ai un projet a realiser pour mon bac cette annee. Nous avons decide de faire un tetris avec tkinter.
On s'est dit que de faire un tableau avec des 0 et des 1 etait pas mal pour faire en sorte que les collisions et les suppressions de lignes se fassent sans probleme.
Toutefois je bloque sur un point assez bete finalement. (interdiction d'utiliser pygame)
On voudrait donner à un objet (carré / forme tetris) un mouvement vers le bas, jusqu'a la rien d'extraordinaire la commande canevas.move est là maiiiis !! une fois cela realise nous avons besoin aussi de pouvoir le faire deplacer sur la droite, la gauche et le bas. Sauf qu'il y a un probleme je n'arrive pas à fusionner les pixels de .move par tkinter avec le tableau de 0 et 1 et par dessus cela impossible de faire bouger le carre pendant sa descente sans qu'il se remette à sa position initiale (j'ai essaye de renvoyer les coords dans la fonction)
Si qql a une solution qui n'est pas forcemment tkinter je suis preneur xD

Configuration: Windows / Chrome 79.0.3945.130

1 réponse

  1. trifou
     
    Bonjour, sans un code minimaliste permettant de reproduire ton problème, difficile de t'aider.

    Je ne comprends pas ce que tu entends par "fusionner les pixels de .move"
    0
    1. Anoikis
       
      il est vrai !!
      desole je t'envoie mon code. Bon c'est pas minimaliste mais pour comprendre comment j'ai fais je t'envoie tout.

      ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

      from tkinter import *
      from time import sleep
      import threading



      def KeyBoard(event):
      global xc,yc,LC
      NewL,NewC=xc,yc
      Key = event.keysym

      if Key == 'Down':
      NewL,NewC=xc,yc+1

      if Key == 'Left':
      NewL,NewC=xc-1,yc

      if Key == 'Right':
      NewL,NewC=xc+1,yc

      Verification(NewL,NewC)

      def Verification(NewL,NewC):
      global xc,yc,LC

      if LC[NewL][NewC]==0:
      LC[xc][yc]=0
      xc,yc=NewL,NewC
      LC[xc][yc]=1
      MyCanvas.coords(Piece,xc*20,yc*20 , xc*20 +20, yc*20 +20)

      def chutelibre():
      global xc,yc,LC
      NewL,NewC=xc,yc

      while temps<20:
      b=b+1
      if b>5000:
      yc=yc+1
      print(xc,yc)
      MyCanvas.coords(Piece,xc*20,yc*20 , xc*20 +20, yc*20 +20)
      break






      def comptage():
      global b






      def chuteobjet():
      global chutelibrecoord,yc,LC,NewL,NewC
      NewL,NewC=chutelibrecoord,chutelibrecoord2

      if MyCanvas.coords(Piece)[3]>675 or MyCanvas.coords(Piece)[3]<0 :
      chutelibrecoord=0

      MyCanvas.move(Piece,chutelibrecoord2,chutelibrecoord)
      print(LC)
      MyWindow.after(20,chuteobjet)
      Verification(NewL,NewC)




      ###############################################################################

      MyWindow = Tk()
      MyWindow.title('Tetris')


      ###############################################################################
      temps=0
      b=0
      t = threading.Thread(target=comptage)
      chutelibrecoord=7
      chutelibrecoord2=0
      xc = 7
      yc = 0
      a=0
      ###############################################################################

      MyCanvas = Canvas(MyWindow, width = 300, height =700, bg ='blue')
      Piece = MyCanvas.create_rectangle(xc*20,yc*20,xc*20+20,yc*20+20,width=0,fill='red')
      MyCanvas.focus_set()
      MyCanvas.bind('<Key>',KeyBoard,)
      MyCanvas.pack(padx =50, pady =50)


      Button(MyWindow, text ='Exit', command = MyWindow.destroy).pack(side=LEFT,padx=5,pady=5)
      #20 zero de largeur / 14 en longueur
      LC=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
      [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]

      print(LC)

      i=0
      j=0
      while j < 15:
      while i<35:
      if LC[j][i]==1:
      MyCanvas.create_rectangle(j*20,i*20,j*20+20,i*20+20,fill='black')
      i=i+1
      i=0
      j=j+1


      comptage()

      MyWindow.mainloop()
      0
      1. trifou > Anoikis
         
        Ton code n’étant pas entre balises codes du forum, il est illisible et non testable.

        Je ne vois pas à quoi sert le thread dans ton code
        0
      2. Anoikis > trifou
         
        Desole j’ai ps l’habitude des forums, j’ai trouvé finalement
        le thread était seulement un test pr faire une pause au prog
        mais dcp j’ai trouvé comment faire merci qd meme
        0
    2. Anoikis
       
      sachant que def comptage et chutelibre ne sont que des test qui malheuresement ne marchent pas
      0
    3. Anoikis
       
      et par fusionner enft je voulais dire que qd je me deplace en pixel sur le canevas je me deplace pas dans le tableau dans la fonction chuteobjet()
      0