.move + events deplacement TKINTER python 3.7
Anoikis
-
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
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() -
-
-