Projet Tetris ISN | comment perdre ? [Fermé]

Signaler
-
 trifou -
Bonjour,
J'ai élaboré un programme tetris pour mon projet isn mais je n'arrive pas a trouver comment je pourrais faire loose le programme dans le sens ou qd mes blocs sont en haut HOP affichage "Loose" ou n'importe mais je cherche à faire stopper le programme.
meric de m'aider si qql c'est ? je met le prog ci dessous
y'a 300 lignes desole ^^ (INTERDICTION A PYGAME)


<config>###############################TETRIS YAP######################################
###############################################################################
#                        By Yanis, Pierre, Arthur                             #
###############################################################################
###############################################################################

from tkinter import *

#################################Variable######################################

limite = True

x=0

#-#-#-#-#-#-#

PosX1 = 100
PosX2 = 120
PosX3 = 100
PosX4 = 120
PosY1 = 20
PosY2 = 20
PosY3 = 40
PosY4 = 40
posx1 = 4
posx2 = 5
posx3 = 4
posx4 = 5
posy1 = 0
posy2 = 0
posy3 = 1
posy4 = 1

#-#-#-#-#-#-#

Largeur = 220
Hauteur = 460



################################MODULE#########################################

###############################################################################
def mouvement(event):
    global PosX1,PosX2,PosX3,PosX4,PosY1,PosY2,PosY3,PosY4,limite,Pion1,Pion2,Pion3,Pion4, posx1, posx2,posx3,posx4,posy1,posy2,posy3,posy4, tab
    touche = event.keysym


    # déplacement vers le bas
    if touche == 'Down' and (posy1 and posy2 and posy3 and posy4) != 21 and tab[posy3+1][posx3] == 0 and tab[posy4+1][posx4] == 0 :


        
        tab[posy1][posx1]=0 #on donne la valeur 0 au position x/y aux pions
        tab[posy2][posx2]=0 #dans le tableau 'tab'
        tab[posy3][posx3]=0
        tab[posy4][posx4]=0
        
        PosY1 = PosY1 + 20 #deplacement du groupe d'objet composant notre
        PosY2 = PosY2 + 20 #composant notre carré de quatre petit carré en y (ordonné)
        PosY3 = PosY3 + 20
        PosY4 = PosY4 + 20
        
        posy1 = posy1 + 1 #pareil pour x (abscisse)
        posy2 = posy2 + 1
        posy3 = posy3 + 1
        posy4 = posy4 + 1
        
        tab[posy1][posx1]=Pion1 #on redefinit leurs valeurs dans le tableau
        tab[posy2][posx2]=Pion2 #pour figer les pions dans le 'tab'
        tab[posy3][posx3]=Pion3
        tab[posy4][posx4]=Pion4
        
        print(tab)
        
                  

    # déplacement vers la droite (meme processus)
    if touche == 'Right' and (posx1 and posx2 and posx3 and posx4) != 9 and tab[posy2][posx2+1] == 0 and tab[posy4][posx4+1] == 0:
        
        tab[posy1][posx1]=0
        tab[posy2][posx2]=0
        tab[posy3][posx3]=0
        tab[posy4][posx4]=0
        
        PosX1 = PosX1 +20
        PosX2 = PosX2 +20
        PosX3 = PosX3 +20
        PosX4 = PosX4 +20
        
        posx1 = posx1 +1
        posx2 = posx2 +1
        posx3 = posx3 +1
        posx4 = posx4 +1
        
        tab[posy1][posx1]=Pion1
        tab[posy2][posx2]=Pion2
        tab[posy3][posx3]=Pion3
        tab[posy4][posx4]=Pion4
        
        print(tab)
        
        
    # déplacement vers la gauche (meme processus)
    if touche == 'Left' and (posx1 and posx2 and posx3 and posx4) != 0 and tab[posy1][posx1-1] == 0 and tab[posy3][posx3-1] == 0:
        
        tab[posy1][posx1]=0
        tab[posy2][posx2]=0
        tab[posy3][posx3]=0
        tab[posy4][posx4]=0
        
        PosX1 = PosX1 - 20
        PosX2 = PosX2 - 20
        PosX3 = PosX3 - 20
        PosX4 = PosX4 - 20
        
        posx1 = posx1 - 1
        posx2 = posx2 - 1
        posx3 = posx3 - 1
        posx4 = posx4 - 1
        
        tab[posy1][posx1]=Pion1
        tab[posy2][posx2]=Pion2
        tab[posy3][posx3]=Pion3
        tab[posy4][posx4]=Pion4
        print(tab)
        
    #On renvoie les coordonnées du pion pour ne pas avoirn de decalage avec
    #d'autres fonctions
    
    canvas.coords(Pion1,PosX1 -10, PosY1 -10, PosX1 +10, PosY1 +10)
    canvas.coords(Pion2,PosX2 -10, PosY2 -10, PosX2 +10, PosY2 +10)
    canvas.coords(Pion3,PosX3 -10, PosY3 -10, PosX3 +10, PosY3 +10)
    canvas.coords(Pion4,PosX4 -10, PosY4 -10, PosX4 +10, PosY4 +10)

#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
def lost():
    global PosX1,PosX2,PosX3,PosX4,PosY1,PosY2,PosY3,PosY4,limite,Pion1,Pion2,Pion3,Pion4, posx1,posx2,posx3,posx4,posy1,posy2,posy3,posy4,tab

    if 

#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
def chutelibre():
    global limite, PosX1,PosX2,PosX3,PosX4,PosY1,PosY2,PosY3,PosY4,limite,Pion1,Pion2,Pion3,Pion4, posx1, posx2,posx3,posx4,posy1,posy2,posy3,posy4, tab,x
    
    while limite == False :
            
        if x == 50:
            x=0
            
            tab[posy1][posx1]=0
            tab[posy2][posx2]=0 
            tab[posy3][posx3]=0
            tab[posy4][posx4]=0
            
            PosY1 = PosY1 + 20
            PosY2 = PosY2 + 20
            PosY3 = PosY3 + 20
            PosY4 = PosY4 + 20
            
            posy1 = posy1 + 1
            posy2 = posy2 + 1  
            posy3 = posy3 + 1 
            posy4 = posy4 + 1
            
            tab[posy1][posx1]=Pion1
            tab[posy2][posx2]=Pion2
            tab[posy3][posx3]=Pion3
            tab[posy4][posx4]=Pion4
            
            canvas.coords(Pion1,PosX1 -10, PosY1 -10, PosX1 +10, PosY1 +10)
            canvas.coords(Pion2,PosX2 -10, PosY2 -10, PosX2 +10, PosY2 +10)
            canvas.coords(Pion3,PosX3 -10, PosY3 -10, PosX3 +10, PosY3 +10)
            canvas.coords(Pion4,PosX4 -10, PosY4 -10, PosX4 +10, PosY4 +10)
            
            #print tab
            #print posy1
            #print Pion2
            #print Pion3
            #print Pion4
        else :
            x = x + 1
            canvas.after(1)
        if (PosY3 > Hauteur - 40 or PosY4 > Hauteur - 40 or tab[posy3+1][posx3] != 0 or tab[posy4+1][posx4] != 0):
            
            tab[posy1][posx1] = Pion1
            tab[posy2][posx2] = Pion2
            tab[posy3][posx3] = Pion3
            tab[posy4][posx4] = Pion4
            
            Ligne()
            lost()
            
            PosX1 = 100
            PosX2 = 120
            PosX3 = 100
            PosX4 = 120
            
            PosY1 = 20
            PosY2 = 20
            PosY3 = 40
            PosY4 = 40
            
            posx1 = 4
            posx2 = 5
            posx3 = 4
            posx4 = 5
            
            posy1 = 0
            posy2 = 0
            posy3 = 1
            posy4 = 1
            
            Pion1=canvas.create_rectangle(PosX1-10,PosY1-10,PosX1+10,PosY1+10,width=2,outline='red',fill='AntiqueWhite')
            Pion2=canvas.create_rectangle(PosX2-10,PosY2-10,PosX2+10,PosY2+10,width=2,outline='red',fill='AntiqueWhite')
            Pion3=canvas.create_rectangle(PosX3-10,PosY3-10,PosX3+10,PosY3+10,width=2,outline='red',fill='AntiqueWhite')
            Pion4=canvas.create_rectangle(PosX4-10,PosY4-10,PosX4+10,PosY4+10,width=2,outline='red',fill='AntiqueWhite')
            
            canvas.coords(Pion1,PosX1 -10, PosY1 -10, PosX1 +10, PosY1 +10)
            canvas.coords(Pion2,PosX2 -10, PosY2 -10, PosX2 +10, PosY2 +10)
            canvas.coords(Pion3,PosX3 -10, PosY3 -10, PosX3 +10, PosY3 +10)
            canvas.coords(Pion4,PosX4 -10, PosY4 -10, PosX4 +10, PosY4 +10) 
            
        
        
        canvas.update()
        
        
        

#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
def Ligne():
    global PosX1,PosX2,PosX3,PosX4,PosY1,PosY2,PosY3,PosY4,limite,Pion1,Pion2,Pion3,Pion4, posx1,posx2,posx3,posx4,posy1,posy2,posy3,posy4,tab

    n=0 
    
    for p in range (posy4, posy4-4,-1):
        nb = 0
        for x in range (10):
            if tab[p][x]!=0:
                nb = nb + 1
                if nb == 10 :
                    for i in range (10):
                        canvas.delete(tab[p][i])
                        tab[p][i]=0
                        
                    n = n + 1
    for s in range (n):
        for y in range (posy4, 0, -1):
            for x in range (10):
                tab[y][x]=tab[y-1][x]
                PosX = x * 20 + 20
                PosY = y * 20 + 20                
                canvas.coords(tab[y][x],PosX -10, PosY -10, PosX +10, PosY +10)
    
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#

def Demarrer():
    global limite
    if limite == True:
        limite = False
        chutelibre()


###############################################################################
# la variable tab sera desormais notre plan de jeu

tab= [[0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0],
      [0,0,0,0,0,0,0,0,0,0]]

listpion=[0]

#creation, de quadrillage


# on créé notre fenetre
window = Tk()
window.title('Tetris YAP')


# creation du canevas + dimensions declarées
Largeur = 220
Hauteur = 460
canvas = Canvas(window, width = Largeur, height =Hauteur, bg ='azure')

canvas.focus_set()
canvas.bind('<Key>',mouvement)
canvas.pack(padx =5, pady =5)

BoutonGo = Button(window, text ='Play', command = Demarrer)
BoutonGo.pack(side = LEFT, padx = 10, pady = 10)

###

# creation d'un bouton pour quitter le programme
Button(window, text ='Quitter', command = window.destroy).pack(side=LEFT,padx=5,pady=5)

Pion1=canvas.create_rectangle(PosX1-10,PosY1-10,PosX1+10,PosY1+10,width=2,outline='red',fill='AntiqueWhite')
Pion2=canvas.create_rectangle(PosX2-10,PosY2-10,PosX2+10,PosY2+10,width=2,outline='red',fill='AntiqueWhite')
Pion3=canvas.create_rectangle(PosX3-10,PosY3-10,PosX3+10,PosY3+10,width=2,outline='red',fill='AntiqueWhite')
Pion4=canvas.create_rectangle(PosX4-10,PosY4-10,PosX4+10,PosY4+10,width=2,outline='red',fill='AntiqueWhite')



window.mainloop()
</config>

1 réponse

Bonjour,

Avoir pris connaissance de la méthode after, c'est bien, mais il faudrait s'en servir convenablement, s'en servir pour juste faire un sleep ne va pas du tout. Tu dois bien te rendre compte que les pièces descendent trop vite et que ce n'est pas jouable.

Maintenant pour ton problème, si tu remplis ton tableau
tab
correctement, alors il suffit de regarder si la 1ère ligne du tableau contient autre chose que 0 à tel index pour déterminer que le joueur a perdu avant de lâcher la pièce suivante.
> Anoikis
Bonsoir, move permet de déplacer un item de tant en x et tant en y, je ne vois pas pourquoi tu parles d'event ni même le rapport.

Et je t'ai déjà dit comment faire, avant de faire spawn une nouvelle pièce, il suffit de regarder si les positions où les rectangles doivent apparaître sont bien toutes à 0, et pour cela il faut remplir correctement ton tableau.
J'ai donc essaye ce que tu m'as propose et j'ai un probleme pour le code la definition apparemment je suis en dehors de la liste pourtant je respect mon tableau

def horizontale():
global PosX1,PosX2,PosX3,PosX4,PosY1,PosY2,PosY3,PosY4,limite,Pion1,Pion2,Pion3,Pion4, posx1,posx2,posx3,posx4,posy1,posy2,posy3,posy4,tab

q=0

for p in range (posy1, posy1-11,-1):
qb = 0
for x in range (20):
if tab[p][x]!=0:
qb = qb + 1
if qb == 20 :
for i in range (20):
canvas.delete(tab[p][i])
tab[p][i]=0

q = q + 1
for s in range (q):
for y in range (posy1, 0, -1):
for x in range (21):
tab[x][y]=tab[x][y-1]
PosX = x * 20 + 20
PosY = y * 20 + 20
canvas.coords(tab[y][x],PosX -10, PosY -10, PosX +10, PosY +10)
> Anoikis
Bonsoir,

Lorsque tu postes du code, utilise les balises codes du forum.

Qu'est-ce qui garantit que dans
for p in range (posy1, posy1-11,-1)
posy1 est supérieur à 11 ?

Et il faudrait quand même penser à travailler avec des listes, parce que bon tes 50 variables globales fait que ton code est imbuvable et on a pas trop envie de s'y pencher à moins de tout refaire.

Je pense qu'un tétris est un projet trop complexe (pour le moment), tu devrais choisir un jeu plus simple à réaliser, si du moins tu as encore beaucoup de temps disponible avant de rendre ton projet.
> trifou
et la def :
ligne() supprime deja les lignes pleines
Anoikis / Pierre Varenne c’est la meme personne hien c’est bien moi je suis juste en compte invité