.move + events deplacement TKINTER python 3.7

Signaler
-
 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

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"
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()
> 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
> 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
sachant que def comptage et chutelibre ne sont que des test qui malheuresement ne marchent pas
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()