Partage
  • Partager sur Facebook
  • Partager sur Twitter

Crée un bouton pour rejouer une partie

dans un jeux en python (Tkinter)

    15 juillet 2019 à 15:27:11

    Salut tout le monde, je travaille sur un petit jeux en python avec tkinter.

    Description du jeux : Une fois le jeux démarrer, il y'a l'apparition d'un ballon qui se déplace du bas vers le haut et il y'a une barre horizontale qui doit éviter la collision avec la boule avec la touche m pour aller a droite et la touche c pour aller a gauche.

    Pour une premiere fois, le jeux marche bien comme je le veux. Mais des que la première partit termine, mon bouton rejouer ne réussi pas reprendre le jeu.

    Aider moi a rectifier ma fonction rejouer. Merci d'avance.

    Voici mon code

    import random
    from tkinter import *
    
    # Fonction qui gere le temp de jeux
    def incremente():
    "Incrémente le compteur à chaque seconde"
    global compteur1, compteur2, dy
    if j:
    compteur1 += 1
    if compteur1 == 30:
    dy = dy - 1
    if compteur1 == 45:
    dy = dy - 1
    if compteur1 == 60:
    dy = dy - 1
    compteur1 =0
    compteur2 +=1
    temp['text'] = str(compteur2)+":"+str(compteur1)
        fen.after(1000, incremente)
    
    # Fonction qui nous fait entrer dans la page d'acceuil
    def bienvenue():
    texte_bienvenue.place(relx=0.5, rely=0.2, anchor='center')
        B_play.place(relx=0.5, rely=0.6, anchor='center')
    
    # Fonction qui demarre la boule
    def anim_ballon():
    global x, y, dy, x1, x2, x3, flag1, j
        y = y + dy
    if y < -50:
    y = 300
    x = random.choice([x1, x2, x3, x4, x5])
        interieur.coords(ballon, x, y, x + 50, y + 50)
    if len(interieur.find_overlapping(interieur.coords(ballon)[0], interieur.coords(ballon)[1],
                                          interieur.coords(ballon)[2],
                                          interieur.coords(ballon)[3])) > 2:
    stop()
            j = 0
    texte_rejouer.place(relx=0.5, rely=0.1, anchor='center')
            B_replay.place(relx=0.5, rely=0.7, anchor='center')
    
    if flag1:
    fen.after(50, anim_ballon)
    
    # Fonction pour deplacer la plaque vers la droite
    def anim_plaque_d(event):
    global xp, yp, dxp, flag2
    if j:
    dxp = 25
    xp = xp + dxp
    if xp <= 0:
    xp, dxp = 0, 25
    if xp > 250:
    xp, dxp = 250, 0
    interieur.coords(plaque, xp, yp, xp + 150, yp + 20)
            fen.after(600000, anim_plaque_d)
    
    # Fonction pour deplacer la plaque vers la gauche
    def anim_plaque_g(event):
    global xp, yp, dxp, flag2
    if j:
    dxp = -15
    if xp >= 250:
    xp, dxp = 250, -25
    if xp <= 0:
    xp, dxp = 0, 0
    xp = xp + dxp
            interieur.coords(plaque, xp, yp, xp + 150, yp + 20)
            fen.after(600000, anim_plaque_g)
    
    # Fonction pour stopper la boule
    def stop():
    global flag1
        flag1 = 0
    
    # Fonction qui nous permet de jouer
    def dans_le_jeu():
    global j,ballon,plaque
        j=1
    texte_bienvenue.destroy()
        B_play.destroy()
        temp.pack(side=LEFT, padx=45)
        v_gauche.pack(side=LEFT)
        v_dorite.pack(side=LEFT, padx=20)
        ballon = interieur.create_oval(x, y, x + 50, y + 50, width=0, fill='red4')
        plaque = interieur.create_rectangle(xp, yp, xp + 150, yp + 20, fill="white")
        fen.bind("<KeyPress-c>", anim_plaque_g)
        fen.bind("<KeyPress-m>", anim_plaque_d)
        fen.after(1000, incremente)
    anim_ballon()
    
    # fonction pour rejouer une parti
    def rejouer():
    fen.destroy()
    j = 1
    dans_le_jeu()
    
    # Programme Principal
    
    # Initialisation des differentes variables
    x1, x2, x3, x4, x5, y, dy, flag1 = 30, 62, 175, 205, 237, 250, -6, 1
    x = random.choice([x1, x2, x3])
    xp, yp, dxp = 0, 80, 0
    compteur1,compteur2 = 0,0
    j = 0
    
    fen = Tk()
    fen.title("Mon petit Jeux")
    fen.geometry("400x350+500+10")
    fen.configure(bg='SteelBlue2')
    interieur = Canvas(fen, bg='indigo', width=400, height=300)
    image = PhotoImage(file='fond-jeu.gif', master=interieur)
    interieur.create_image(200, 154, image=image)
    texte_bienvenue = Label(interieur, text="Bienvenue dans ce petit jeux!!!\nCliquez sur Jouer pour commencer\nla partie", font="{courier new} 14 bold")
    texte_rejouer = Label(interieur, text="Vous avez perdu !!!", font="{courier new} 22 bold")
    B_replay = Button(interieur, text="Rejouer", width=8, command=rejouer, font="{courier new} 16 bold")
    B_play = Button(interieur, text="Jouer", width=8, command=dans_le_jeu, font="{courier new} 16 bold")
    font_temp = "{courier new} 12 bold italic"
    temp = Label(fen, font=font_temp, bg='white')
    temp['text'] = "0:0"
    interieur.pack()
    v_gauche = Button(fen, text="<", command = anim_plaque_g, width=6, bg="white")
    v_dorite = Button(fen, text=">", command = anim_plaque_d, width=6, bg="white")
    
    # On entre dans la page d'acceuil du jeux
    bienvenue()
    
    # On Commencement le jeux
    if j==1:
    dans_le_jeu()
    
    fen.mainloop()
    
    



    -
    Edité par AboubacryBa1 15 juillet 2019 à 15:50:24

    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2019 à 15:45:03

      Ton code est partiellement en blanc sur blanc on ne voit rien.

      Utilise le bouton </> et choisi "python" pour mettre ton code.

      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2019 à 15:46:13

        ok

        -
        Edité par AboubacryBa1 15 juillet 2019 à 22:42:53

        • Partager sur Facebook
        • Partager sur Twitter
          15 juillet 2019 à 16:38:29

          Il y a des problèmes d'indentation à partir de la ligne 5
          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2019 à 22:39:50

            thelinekioubeur a écrit:

            Il y a des problèmes d'indentation à partir de la ligne 5

            oui mais ca c'est après avoir copier ici mon code. Celui dans ma machine était bien indenter et mon programme s'est bien exécuter

            -
            Edité par AboubacryBa1 15 juillet 2019 à 22:40:45

            • Partager sur Facebook
            • Partager sur Twitter
              16 juillet 2019 à 9:10:57

              Ok mais copie ton code avec la bonne indentation sinon on ne pourra pas t'aider
              • Partager sur Facebook
              • Partager sur Twitter
                16 juillet 2019 à 23:51:43

                thelinekioubeur a écrit:

                Ok mais copie ton code avec la bonne indentation sinon on ne pourra pas t'aider


                import random
                from tkinter import *
                
                # Fonction qui gere le temp de jeux
                def incremente():
                    "Incrémente le compteur à chaque seconde"
                    global  compteur1, compteur2, dy
                    if j:
                        compteur1 += 1
                    if compteur1 == 30:
                        dy = dy - 1
                    if compteur1 == 45:
                        dy = dy - 1
                    if compteur1 == 60:
                        dy = dy - 1
                        compteur1 =0
                        compteur2 +=1
                    temp['text'] = str(compteur2)+":"+str(compteur1)
                    fen.after(1000, incremente)
                
                # Fonction qui nous fait entrer dans la page d'acceuil
                def bienvenue():
                    texte_bienvenue.place(relx=0.5, rely=0.2, anchor='center')
                    B_play.place(relx=0.5, rely=0.6, anchor='center')
                
                # Fonction qui demarre la boule
                def anim_ballon():
                    global x, y, dy, x1, x2, x3, flag1, j
                    y = y + dy
                    if y < -50:
                        y = 300
                        x = random.choice([x1, x2, x3, x4, x5])
                    interieur.coords(ballon, x, y, x + 50, y + 50)
                    if len(interieur.find_overlapping(interieur.coords(ballon)[0], interieur.coords(ballon)[1],
                                                      interieur.coords(ballon)[2],
                                                      interieur.coords(ballon)[3])) > 2:
                        stop()
                        j = 0
                        texte_rejouer.place(relx=0.5, rely=0.1, anchor='center')
                        B_replay.place(relx=0.5, rely=0.7, anchor='center')
                
                    if flag1:
                        fen.after(50, anim_ballon)
                
                # Fonction pour deplacer la plaque vers la droite
                def anim_plaque_d(event):
                    global xp, yp, dxp, flag2
                    if j:
                        dxp = 25
                        xp = xp + dxp
                        if xp <= 0:
                            xp, dxp = 0, 25
                        if xp > 250:
                            xp, dxp = 250, 0
                        interieur.coords(plaque, xp, yp, xp + 150, yp + 20)
                        fen.after(600000, anim_plaque_d)
                
                # Fonction pour deplacer la plaque vers la gauche
                def anim_plaque_g(event):
                    global xp, yp, dxp, flag2
                    if j:
                        dxp = -15
                        if xp >= 250:
                            xp, dxp = 250, -25
                        if xp <= 0:
                            xp, dxp = 0, 0
                        xp = xp + dxp
                        interieur.coords(plaque, xp, yp, xp + 150, yp + 20)
                        fen.after(600000, anim_plaque_g)
                
                # Fonction pour stopper la boule
                def stop():
                    global flag1
                    flag1 = 0
                
                # Fonction qui nous permet de jouer
                def dans_le_jeu():
                    global j,ballon,plaque
                    j=1
                    texte_bienvenue.destroy()
                    B_play.destroy()
                    temp.pack(side=LEFT, padx=45)
                    v_gauche.pack(side=LEFT)
                    v_dorite.pack(side=LEFT, padx=20)
                    ballon = interieur.create_oval(x, y, x + 50, y + 50, width=0, fill='red4')
                    plaque = interieur.create_rectangle(xp, yp, xp + 150, yp + 20, fill="white")
                    fen.bind("<KeyPress-c>", anim_plaque_g)
                    fen.bind("<KeyPress-m>", anim_plaque_d)
                    fen.after(1000, incremente)
                    anim_ballon()
                
                # fonction pour rejouer une parti
                def rejouer():
                    fen.destroy()
                    j = 1
                    dans_le_jeu()
                
                # Programme Principal
                
                # Initialisation des differentes variables
                x1, x2, x3, x4, x5, y, dy, flag1 = 30, 62, 175, 205, 237, 250, -6, 1
                x = random.choice([x1, x2, x3])
                xp, yp, dxp = 0, 80, 0
                compteur1,compteur2 = 0,0
                j = 0
                
                fen = Tk()
                fen.title("Mon petit Jeux")
                fen.geometry("400x350+500+10")
                fen.configure(bg='SteelBlue2')
                interieur = Canvas(fen, bg='indigo', width=400, height=300)
                image = PhotoImage(file='fond-jeu.gif', master=interieur)
                interieur.create_image(200, 154, image=image)
                texte_bienvenue = Label(interieur, text="Bienvenue dans ce petit jeux!!!\nCliquez sur Jouer pour commencer\nla partie", font="{courier new} 14 bold")
                texte_rejouer = Label(interieur, text="Vous avez perdu !!!", font="{courier new} 22 bold")
                B_replay = Button(interieur, text="Rejouer", width=8, command=rejouer, font="{courier new} 16 bold")
                B_play = Button(interieur, text="Jouer", width=8, command=dans_le_jeu, font="{courier new} 16 bold")
                font_temp = "{courier new} 12 bold italic"
                temp = Label(fen, font=font_temp, bg='white')
                temp['text'] = "0:0"
                interieur.pack()
                v_gauche = Button(fen, text="<", command = anim_plaque_g, width=6, bg="white")
                v_dorite = Button(fen, text=">", command = anim_plaque_d, width=6, bg="white")
                
                # On entre dans la page d'acceuil du jeux
                bienvenue()
                
                # On Commencement le jeux
                if j==1:
                    dans_le_jeu()
                
                fen.mainloop()
                

                Vous aurez aussi besoin de l'amage de fond du jeux:

                Merci d'avance.

                • Partager sur Facebook
                • Partager sur Twitter
                  17 juillet 2019 à 9:07:58

                  Ok comme l'indique l'erreur tu essaye de d'utiliser une fenêtre qui est détruite.

                  Il ne faut pas détruire la fenêtre mais uniquement les widget qu'elle contient.

                  Commence par retirer le fen.destroy() ligne 94.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 juillet 2019 à 11:28:43

                    Salut, le fen.destroy c'était pour que ça puisse recommencer le jeux depuis le début. Quand je l'enlève comme tu peu le voir le jeux reprend mais pas a zero c'est pourquoi la boule et la plaque seront encore brusquement en collision.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 juillet 2019 à 11:30:41

                      Il faut que tu réinitialise toutes tes variables.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 juillet 2019 à 13:49:31

                        oui j'avais penser a ca, mais a quel niveux je doit le faire pour que tout marche bien?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 juillet 2019 à 13:55:18

                          Tout est dans le Canvas non ? Donc tu peux détruire le canvas et le recréer.

                          Il existe aussi une méthode canva.delete("all")

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Crée un bouton pour rejouer une partie

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          • Editeur
                          • Markdown