Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/05/2019, à 10:03

Nat62

SOS aide pour programmer une machine à sous

Résolu et un grand merci

Dernière modification par Nat62 (Le 21/05/2019, à 19:09)

Hors ligne

#2 Le 21/05/2019, à 10:14

pingouinux

Re : SOS aide pour programmer une machine à sous

Bonjour Nat62,

l'objectif est de créer une machine à sous; de faire défiler les images et d'arrêter le défilement pour obtenir trois images identiques pour gagner

Il n'est effectivement pas précisé que c'est le programme qui fait défiler les images, et l'utilisateur qui les arrête.

Redonne déjà le script tel qu'il est actuellement, et j'essaierai de regarder dans la journée.

Hors ligne

#3 Le 21/05/2019, à 10:57

Nat62

Re : SOS aide pour programmer une machine à sous

OK super ! merci

j'ai mis en commentaires dans la fonction Démarrer  la programmation qui sert à arrêter les  trois  images identiques et à les aligner !
Du coup quand on clique sur le bouton GO les images défilent indéfiniment !

from tkinter import*
from time import sleep
import random



# On définit la fonction Démarrer. Elle va être appelée quand on va cliquer sur le bouton Go.
def Demarrer() :
  boutonStop.configure(state='normal') # le bouton GO est activé
  DeplacementImagColonnes(canvas,liste_images)



#def Stopper() : A FAIRE




fen=Tk()  # Création d'une fenêtre graphique avec le module tkinter
fen.title("Machine à sous")

canvas=Canvas(fen, width='700',height='700',background='black')
canvas.pack()



# Création de deux étoiles concentriques (l'un jaune et l'autre marron)
etoile1=canvas.create_polygon(350,15,317,75,250,75,301,123,280,190,350,150,420,190,400,123,450,75,383,75,fill="yellow",outline='yellow')
etoile2=canvas.create_polygon(350,27,322,80,260,80,308,123,288,180,350,142,412,180,393,123,440,80,378,80,fill="brown",outline='yellow')

# Création d'un rectangle de dimensions 400 sur 650; colorié en marron et le contour en noir.
colonne1=canvas.create_rectangle(25,250,675,650,fill="brown",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et 10 sur une même ligne
ligne1=canvas.create_oval(65,255,85,275,fill="yellow",outline='yellow')
ligne2=canvas.create_oval(110,260,120,270,fill="yellow",outline='yellow')
ligne3=canvas.create_oval(145,255,165,275,fill="yellow",outline='yellow')
ligne4=canvas.create_oval(190,260,200,270,fill="yellow",outline='yellow')
ligne5=canvas.create_oval(225,255,245,275,fill="yellow",outline='yellow')
ligne6=canvas.create_oval(270,260,280,270,fill="yellow",outline='yellow')
ligne7=canvas.create_oval(305,255,325,275,fill="yellow",outline='yellow')
ligne8=canvas.create_oval(350,260,360,270,fill="yellow",outline='yellow')
ligne9=canvas.create_oval(385,255,405,275,fill="yellow",outline='yellow')
ligne10=canvas.create_oval(430,260,440,270,fill="yellow",outline='yellow')
ligne11=canvas.create_oval(465,255,485,275,fill="yellow",outline='yellow')
ligne12=canvas.create_oval(510,260,520,270,fill="yellow",outline='yellow')
ligne13=canvas.create_oval(545,255,565,275,fill="yellow",outline='yellow')
ligne14=canvas.create_oval(590,260,600,270,fill="yellow",outline='yellow')
ligne15=canvas.create_oval(625,255,645,275,fill="yellow",outline='yellow')

# Création de trois rectangles de mêmes dimensions 300 sur 200; coloriés en blanc et leur contour en noir.
colonne2=canvas.create_rectangle(50,300,250,600,fill="white",outline="black")
colonne3=canvas.create_rectangle(250,300,450,600,fill="white",outline="black")
colonne4=canvas.create_rectangle(450,300,650,600,fill="white",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et 10 sur une même ligne
ligne16=canvas.create_oval(65,620,85,640,fill="yellow",outline='yellow')
ligne17=canvas.create_oval(110,625,120,635,fill="yellow",outline='yellow')
ligne18=canvas.create_oval(145,620,165,640,fill="yellow",outline='yellow')
ligne19=canvas.create_oval(190,625,200,635,fill="yellow",outline='yellow')
ligne20=canvas.create_oval(225,620,245,640,fill="yellow",outline='yellow')
ligne21=canvas.create_oval(270,625,280,635,fill="yellow",outline='yellow')
ligne22=canvas.create_oval(305,620,325,640,fill="yellow",outline='yellow')
ligne23=canvas.create_oval(350,625,360,635,fill="yellow",outline='yellow')
ligne24=canvas.create_oval(385,620,405,640,fill="yellow",outline='yellow')
ligne25=canvas.create_oval(430,625,440,635,fill="yellow",outline='yellow')
ligne26=canvas.create_oval(465,620,485,640,fill="yellow",outline='yellow')
ligne27=canvas.create_oval(510,625,520,635,fill="yellow",outline='yellow')
ligne28=canvas.create_oval(545,620,565,640,fill="yellow",outline='yellow')
ligne29=canvas.create_oval(590,625,600,635,fill="yellow",outline='yellow')
ligne30=canvas.create_oval(625,620,645,640,fill="yellow",outline='yellow')

# Création d'un bouton Go qui appelle la fonction Démarrer
boutonGo = Button(fen,text='GO',width=10,height=2,command=Demarrer)
boutonGo.place(x=100,y=90)
# Création d'un bouton Stop qui appelle la fonction Stopper
boutonStop = Button(fen,text='STOP',width=10,height=2) # ,command=Stopper
boutonStop.place(x=500,y=90)
# Création d'un bouton Quit pour quitter le jeu
boutonQuit= Button(fen,text='Quit',width=4,height=2,command=fen.destroy)
boutonQuit.place(x=650,y=20)

# On définit une fonction Déplacement qui va faire défiler les images dans les trois colonnes ("colonne2"; "colonne3" et "colonne4")
def DeplacementImagColonnes(canvas,liste_images):
    global imag1, imag2, imag3 # Ces variables sont conservées d'un appel à l'autre
    img1=random.randint(0,4)   # Ces trois variables img1;img2 et img3 sont choisis de façon aléatoire pour chaque colonne.
    img2=random.randint(0,4)   # Elles vont servir à indiquer la position de l'image dans la variable "liste_image" pour chaque colonne.
    img3=random.randint(0,4)
    y1=y2=y3=400      # les trois images sont placées avec une ordonnée égale à 400 (y1 pour la 1ère colonne; y2 pour la 2ème et y3 pour la 3ème )
    dy1,dy2,dy3=20,25,50       # l'ordonnée de chaque colonne va varier respectivement de 20; 25 et 50
    x1,x2,x3=150,350,550       # l'abscisse de chaque colonne est fixée respectivement à 150; 350 et 550

    # Attention : Les images n'existent pas lors du premier appel !

    try:                     # Quand on va cliquer de nouveau sur le bouton Go, les trois images identiques. En effet, si on ne fait pas ça, quand on reclique sur le bouton Go,
        canvas.delete(imag1) # les images défilent de nouveau mais les trois images identiques précédentes restent visibles !
        canvas.delete(imag2)
        canvas.delete(imag3)
    except NameError: pass       # # Il faut ignorer le message d'erreur qui apparaît

    imag1=canvas.create_image(x1,400,anchor=CENTER,image=liste_images[img1]) # On crée l'image qui correspond à la (img1+1)ème position dans "liste_image"
    imag2=canvas.create_image(x2,400,anchor=CENTER,image=liste_images[img2]) # et son centre, placé dans la 1ère colonne, a pour coordonnées (x1;400).
    imag3=canvas.create_image(x3,400,anchor=CENTER,image=liste_images[img3]) # On fait de même pour la 2ème et 3ème colonne.
    while True:    # Boucle infinie
        sleep(.05)  # marque une pause de 5 centièmes de secondes pour que les images ne défilent pas trop vite.

        if y1<500: canvas.move(imag1,0,dy1); y1=y1+dy1     # Si l'ordonnée y1 de l'image de la 1ère colonne est < à 500, cette image va bouger de dy1; Puis on affecte à y1 sa nouvelle valeur y1+dy1
        else:
            canvas.delete(imag1)  # Sinon, à partir de 500 et au delà, cette image va être supprimée (sinon on la verrait encore descendre à l'écran !).
            y1=400                # Ensuite, on affecte à y1 la valeur 400
            img1=(img1+1)%nb_im   # Ensuite, on avance de 1 la valeur de img1.Comme cela on aura l'image suivante de la liste.
            imag1=canvas.create_image(x1,400,anchor=CENTER,image=liste_images[img1]) # On crée l'image qui correspond à la (img1+2)ème position (ou position (img1+1)) dans "liste_image" et son centre, placé dans la 1ère colonne, a pour coordonnées (x1;400).

        if y2<500: canvas.move(imag2,0,dy2); y2=y2+dy2       # idem pour la 2ème colonne
        else:
            img2=(img2+1)%nb_im; canvas.delete(imag2); y2=400
            imag2=canvas.create_image(x2,400,anchor=CENTER,image=liste_images[img2])


        if y3<500: canvas.move(imag3,0,dy3); y3=y3+dy3      # idem pour la 3ème colonne
        else:
            img3=(img3+1)%nb_im; canvas.delete(imag3); y3=400
            imag3=canvas.create_image(x3,400,anchor=CENTER,image=liste_images[img3])

        canvas.update()   # Cela met à jour l'affichage à chaque itération de la boucle. Sans cette mise à jour; la boucle ne fonctionne pas !
#        if img1==img2==img3:      # ça permet d'arrêter le défilement des trois images quand ils sont identiques.
#            canvas.delete(imag1)
#            canvas.delete(imag2)
#            canvas.delete(imag3)       # # on efface les trois images qui sont identiques pour les afficher de nouveau avec le même ordonnée y=450
#            imag1 = canvas.create_image(x1, 450, anchor=CENTER, image=liste_images[img1]) # # Les trois images identiques sont alors alignées !
#            imag2 = canvas.create_image(x2, 450, anchor=CENTER, image=liste_images[img2])
#            imag3 = canvas.create_image(x3, 450, anchor=CENTER, image=liste_images[img3])
#            return

# Programme PRINCIPAL
cerises   =PhotoImage(file="cerises.gif")    # On va chercher les 5 fichiers images
seven     =PhotoImage(file="seven.gif")
feracheval=PhotoImage(file="feracheval.gif")
pasteque  =PhotoImage(file="pasteque.gif")
cloche    =PhotoImage(file="cloche.gif")

liste_images=[cerises,feracheval,seven,pasteque,cloche]  # on définit une variable, appelée "liste_images", qui est une liste d'images
nb_im=len(liste_images)  # On affecte à cette variable la longueur de la liste d'images c'est à dire le nombre d'images qu'elle contient qui est ici 5

boutonStop.configure(state='disable') # le bouton GO est désactivé

fen.mainloop() 

Hors ligne

#4 Le 21/05/2019, à 12:41

pingouinux

Re : SOS aide pour programmer une machine à sous

À partir de ton envoi en #3, j'ai ajouté 2 variables :
arret : True après appui sur STOP
identik : True  si les 3 images sont identiques

L'appui sur le bouton STOP provoque l'arrêt du défilement pendant 10 secondes, et un affichage à la console pour dire si on a gagné ou perdu.

#!/usr/bin/env python3
from tkinter import*
from time import sleep
import random

# On définit la fonction Démarrer. Elle va être appelée quand on va cliquer sur le bouton Go.
def Demarrer() :
  boutonStop.configure(state='normal') # le bouton GO est activé
  DeplacementImagColonnes(canvas,liste_images)

arret=identik=False
def Stopper() :
    global arret
    arret=True

fen=Tk()  # Création d'une fenêtre graphique avec le module tkinter
fen.title("Machine à sous")

canvas=Canvas(fen, width='700',height='700',background='black')
canvas.pack()

# Création de deux étoiles concentriques (l'un jaune et l'autre marron)
etoile1=canvas.create_polygon(350,15,317,75,250,75,301,123,280,190,350,150,420,190,400,123,450,75,383,75,fill="yellow",outline='yellow')
etoile2=canvas.create_polygon(350,27,322,80,260,80,308,123,288,180,350,142,412,180,393,123,440,80,378,80,fill="brown",outline='yellow')

# Création d'un rectangle de dimensions 400 sur 650; colorié en marron et le contour en noir.
colonne1=canvas.create_rectangle(25,250,675,650,fill="brown",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et 10 sur une même ligne
ligne1=canvas.create_oval(65,255,85,275,fill="yellow",outline='yellow')
ligne2=canvas.create_oval(110,260,120,270,fill="yellow",outline='yellow')
ligne3=canvas.create_oval(145,255,165,275,fill="yellow",outline='yellow')
ligne4=canvas.create_oval(190,260,200,270,fill="yellow",outline='yellow')
ligne5=canvas.create_oval(225,255,245,275,fill="yellow",outline='yellow')
ligne6=canvas.create_oval(270,260,280,270,fill="yellow",outline='yellow')
ligne7=canvas.create_oval(305,255,325,275,fill="yellow",outline='yellow')
ligne8=canvas.create_oval(350,260,360,270,fill="yellow",outline='yellow')
ligne9=canvas.create_oval(385,255,405,275,fill="yellow",outline='yellow')
ligne10=canvas.create_oval(430,260,440,270,fill="yellow",outline='yellow')
ligne11=canvas.create_oval(465,255,485,275,fill="yellow",outline='yellow')
ligne12=canvas.create_oval(510,260,520,270,fill="yellow",outline='yellow')
ligne13=canvas.create_oval(545,255,565,275,fill="yellow",outline='yellow')
ligne14=canvas.create_oval(590,260,600,270,fill="yellow",outline='yellow')
ligne15=canvas.create_oval(625,255,645,275,fill="yellow",outline='yellow')

# Création de trois rectangles de mêmes dimensions 300 sur 200; coloriés en blanc et leur contour en noir.
colonne2=canvas.create_rectangle(50,300,250,600,fill="white",outline="black")
colonne3=canvas.create_rectangle(250,300,450,600,fill="white",outline="black")
colonne4=canvas.create_rectangle(450,300,650,600,fill="white",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et 10 sur une même ligne
ligne16=canvas.create_oval(65,620,85,640,fill="yellow",outline='yellow')
ligne17=canvas.create_oval(110,625,120,635,fill="yellow",outline='yellow')
ligne18=canvas.create_oval(145,620,165,640,fill="yellow",outline='yellow')
ligne19=canvas.create_oval(190,625,200,635,fill="yellow",outline='yellow')
ligne20=canvas.create_oval(225,620,245,640,fill="yellow",outline='yellow')
ligne21=canvas.create_oval(270,625,280,635,fill="yellow",outline='yellow')
ligne22=canvas.create_oval(305,620,325,640,fill="yellow",outline='yellow')
ligne23=canvas.create_oval(350,625,360,635,fill="yellow",outline='yellow')
ligne24=canvas.create_oval(385,620,405,640,fill="yellow",outline='yellow')
ligne25=canvas.create_oval(430,625,440,635,fill="yellow",outline='yellow')
ligne26=canvas.create_oval(465,620,485,640,fill="yellow",outline='yellow')
ligne27=canvas.create_oval(510,625,520,635,fill="yellow",outline='yellow')
ligne28=canvas.create_oval(545,620,565,640,fill="yellow",outline='yellow')
ligne29=canvas.create_oval(590,625,600,635,fill="yellow",outline='yellow')
ligne30=canvas.create_oval(625,620,645,640,fill="yellow",outline='yellow')

# Création d'un bouton Go qui appelle la fonction Démarrer
boutonGo = Button(fen,text='GO',width=10,height=2,command=Demarrer)
boutonGo.place(x=100,y=90)
# Création d'un bouton Stop qui appelle la fonction Stopper
boutonStop = Button(fen,text='STOP',width=10,height=2,command=Stopper) # ,command=Stopper
boutonStop.place(x=500,y=90)
# Création d'un bouton Quit pour quitter le jeu
boutonQuit= Button(fen,text='Quit',width=4,height=2,command=fen.destroy)
boutonQuit.place(x=650,y=20)

# On définit une fonction Déplacement qui va faire défiler les images dans les trois colonnes ("colonne2"; "colonne3" et "colonne4")
def DeplacementImagColonnes(canvas,liste_images):
    global imag1, imag2, imag3 # Ces variables sont conservées d'un appel à l'autre
    global arret, identik
    img1=random.randint(0,4)   # Ces trois variables img1;img2 et img3 sont choisis de façon aléatoire pour chaque colonne.
    img2=random.randint(0,4)   # Elles vont servir à indiquer la position de l'image dans la variable "liste_image" pour chaque colonne.
    img3=random.randint(0,4)
    y1=y2=y3=400      # les trois images sont placées avec une ordonnée égale à 400 (y1 pour la 1ère colonne; y2 pour la 2ème et y3 pour la 3ème )
    dy1,dy2,dy3=20,25,50       # l'ordonnée de chaque colonne va varier respectivement de 20; 25 et 50
    x1,x2,x3=150,350,550       # l'abscisse de chaque colonne est fixée respectivement à 150; 350 et 550

    # Attention : Les images n'existent pas lors du premier appel !

    try:                     # Quand on va cliquer de nouveau sur le bouton Go, les trois images identiques. En effet, si on ne fait pas ça, quand on reclique sur le bouton Go,
        canvas.delete(imag1) # les images défilent de nouveau mais les trois images identiques précédentes restent visibles !
        canvas.delete(imag2)
        canvas.delete(imag3)
    except NameError: pass       # # Il faut ignorer le message d'erreur qui apparaît

    imag1=canvas.create_image(x1,400,anchor=CENTER,image=liste_images[img1]) # On crée l'image qui correspond à la (img1+1)ème position dans "liste_image"
    imag2=canvas.create_image(x2,400,anchor=CENTER,image=liste_images[img2]) # et son centre, placé dans la 1ère colonne, a pour coordonnées (x1;400).
    imag3=canvas.create_image(x3,400,anchor=CENTER,image=liste_images[img3]) # On fait de même pour la 2ème et 3ème colonne.
    while True:    # Boucle infinie
        if arret:
           print("Vous avez %s !"%("gagné" if identik else "perdu"))
           sleep(10); arret=False
           
        sleep(.05)  # marque une pause de 5 centièmes de secondes pour que les images ne défilent pas trop vite.

        if y1<500: canvas.move(imag1,0,dy1); y1=y1+dy1     # Si l'ordonnée y1 de l'image de la 1ère colonne est < à 500, cette image va bouger de dy1; Puis on affecte à y1 sa nouvelle valeur y1+dy1
        else:
            canvas.delete(imag1)  # Sinon, à partir de 500 et au delà, cette image va être supprimée (sinon on la verrait encore descendre à l'écran !).
            y1=400                # Ensuite, on affecte à y1 la valeur 400
            img1=(img1+1)%nb_im   # Ensuite, on avance de 1 la valeur de img1.Comme cela on aura l'image suivante de la liste.
            imag1=canvas.create_image(x1,400,anchor=CENTER,image=liste_images[img1]) # On crée l'image qui correspond à la (img1+2)ème position (ou position (img1+1)) dans "liste_image" et son centre, placé dans la 1ère colonne, a pour coordonnées (x1;400).

        if y2<500: canvas.move(imag2,0,dy2); y2=y2+dy2       # idem pour la 2ème colonne
        else:
            img2=(img2+1)%nb_im; canvas.delete(imag2); y2=400
            imag2=canvas.create_image(x2,400,anchor=CENTER,image=liste_images[img2])


        if y3<500: canvas.move(imag3,0,dy3); y3=y3+dy3      # idem pour la 3ème colonne
        else:
            img3=(img3+1)%nb_im; canvas.delete(imag3); y3=400
            imag3=canvas.create_image(x3,400,anchor=CENTER,image=liste_images[img3])

        canvas.update()   # Cela met à jour l'affichage à chaque itération de la boucle. Sans cette mise à jour; la boucle ne fonctionne pas !
        identik= img1==img2==img3
#        if img1==img2==img3:      # ça permet d'arrêter le défilement des trois images quand ils sont identiques.
#            canvas.delete(imag1)
#            canvas.delete(imag2)
#            canvas.delete(imag3)       # # on efface les trois images qui sont identiques pour les afficher de nouveau avec le même ordonnée y=450
#            imag1 = canvas.create_image(x1, 450, anchor=CENTER, image=liste_images[img1]) # # Les trois images identiques sont alors alignées !
#            imag2 = canvas.create_image(x2, 450, anchor=CENTER, image=liste_images[img2])
#            imag3 = canvas.create_image(x3, 450, anchor=CENTER, image=liste_images[img3])
#            return

# Programme PRINCIPAL
cerises   =PhotoImage(file="cerises.gif")    # On va chercher les 5 fichiers images
seven     =PhotoImage(file="seven.gif")
feracheval=PhotoImage(file="feracheval.gif")
pasteque  =PhotoImage(file="pasteque.gif")
cloche    =PhotoImage(file="cloche.gif")

liste_images=[cerises,feracheval,seven,pasteque,cloche]  # on définit une variable, appelée "liste_images", qui est une liste d'images
nb_im=len(liste_images)  # On affecte à cette variable la longueur de la liste d'images c'est à dire le nombre d'images qu'elle contient qui est ici 5

boutonStop.configure(state='disable') # le bouton GO est désactivé

fen.mainloop()

Hors ligne

#5 Le 21/05/2019, à 13:20

pingouinux

Re : SOS aide pour programmer une machine à sous

Version modifiée :
Un clic sur STOP provoque l'arrêt du défilement et l'apparition d'une fenêtre d'information. Le défilement reprend après un clic sur le bouton OK de cette dernière.

#!/usr/bin/env python3
from tkinter import*
from tkinter import messagebox
from time import sleep
import random

# On définit la fonction Démarrer. Elle va être appelée quand on va cliquer sur le bouton Go.
def Demarrer() :
  boutonStop.configure(state='normal') # le bouton GO est activé
  DeplacementImagColonnes(canvas,liste_images)

arret=identik=False
def Stopper() :
    global arret
    arret=True

fen=Tk()  # Création d'une fenêtre graphique avec le module tkinter
fen.title("Machine à sous")

canvas=Canvas(fen, width='700',height='700',background='black')
canvas.pack()

# Création de deux étoiles concentriques (l'un jaune et l'autre marron)
etoile1=canvas.create_polygon(350,15,317,75,250,75,301,123,280,190,350,150,420,190,400,123,450,75,383,75,fill="yellow",outline='yellow')
etoile2=canvas.create_polygon(350,27,322,80,260,80,308,123,288,180,350,142,412,180,393,123,440,80,378,80,fill="brown",outline='yellow')

# Création d'un rectangle de dimensions 400 sur 650; colorié en marron et le contour en noir.
colonne1=canvas.create_rectangle(25,250,675,650,fill="brown",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et 10 sur une même ligne
ligne1=canvas.create_oval(65,255,85,275,fill="yellow",outline='yellow')
ligne2=canvas.create_oval(110,260,120,270,fill="yellow",outline='yellow')
ligne3=canvas.create_oval(145,255,165,275,fill="yellow",outline='yellow')
ligne4=canvas.create_oval(190,260,200,270,fill="yellow",outline='yellow')
ligne5=canvas.create_oval(225,255,245,275,fill="yellow",outline='yellow')
ligne6=canvas.create_oval(270,260,280,270,fill="yellow",outline='yellow')
ligne7=canvas.create_oval(305,255,325,275,fill="yellow",outline='yellow')
ligne8=canvas.create_oval(350,260,360,270,fill="yellow",outline='yellow')
ligne9=canvas.create_oval(385,255,405,275,fill="yellow",outline='yellow')
ligne10=canvas.create_oval(430,260,440,270,fill="yellow",outline='yellow')
ligne11=canvas.create_oval(465,255,485,275,fill="yellow",outline='yellow')
ligne12=canvas.create_oval(510,260,520,270,fill="yellow",outline='yellow')
ligne13=canvas.create_oval(545,255,565,275,fill="yellow",outline='yellow')
ligne14=canvas.create_oval(590,260,600,270,fill="yellow",outline='yellow')
ligne15=canvas.create_oval(625,255,645,275,fill="yellow",outline='yellow')

# Création de trois rectangles de mêmes dimensions 300 sur 200; coloriés en blanc et leur contour en noir.
colonne2=canvas.create_rectangle(50,300,250,600,fill="white",outline="black")
colonne3=canvas.create_rectangle(250,300,450,600,fill="white",outline="black")
colonne4=canvas.create_rectangle(450,300,650,600,fill="white",outline="black")

# Création d'une succession de deux cercles jaunes de diamètre respectif 20 et 10 sur une même ligne
ligne16=canvas.create_oval(65,620,85,640,fill="yellow",outline='yellow')
ligne17=canvas.create_oval(110,625,120,635,fill="yellow",outline='yellow')
ligne18=canvas.create_oval(145,620,165,640,fill="yellow",outline='yellow')
ligne19=canvas.create_oval(190,625,200,635,fill="yellow",outline='yellow')
ligne20=canvas.create_oval(225,620,245,640,fill="yellow",outline='yellow')
ligne21=canvas.create_oval(270,625,280,635,fill="yellow",outline='yellow')
ligne22=canvas.create_oval(305,620,325,640,fill="yellow",outline='yellow')
ligne23=canvas.create_oval(350,625,360,635,fill="yellow",outline='yellow')
ligne24=canvas.create_oval(385,620,405,640,fill="yellow",outline='yellow')
ligne25=canvas.create_oval(430,625,440,635,fill="yellow",outline='yellow')
ligne26=canvas.create_oval(465,620,485,640,fill="yellow",outline='yellow')
ligne27=canvas.create_oval(510,625,520,635,fill="yellow",outline='yellow')
ligne28=canvas.create_oval(545,620,565,640,fill="yellow",outline='yellow')
ligne29=canvas.create_oval(590,625,600,635,fill="yellow",outline='yellow')
ligne30=canvas.create_oval(625,620,645,640,fill="yellow",outline='yellow')

# Création d'un bouton Go qui appelle la fonction Démarrer
boutonGo = Button(fen,text='GO',width=10,height=2,command=Demarrer)
boutonGo.place(x=100,y=90)
# Création d'un bouton Stop qui appelle la fonction Stopper
boutonStop = Button(fen,text='STOP',width=10,height=2,command=Stopper) # ,command=Stopper
boutonStop.place(x=500,y=90)
# Création d'un bouton Quit pour quitter le jeu
boutonQuit= Button(fen,text='Quit',width=4,height=2,command=fen.destroy)
boutonQuit.place(x=650,y=20)

# On définit une fonction Déplacement qui va faire défiler les images dans les trois colonnes ("colonne2"; "colonne3" et "colonne4")
def DeplacementImagColonnes(canvas,liste_images):
    global imag1, imag2, imag3 # Ces variables sont conservées d'un appel à l'autre
    global arret, identik
    img1=random.randint(0,4)   # Ces trois variables img1;img2 et img3 sont choisis de façon aléatoire pour chaque colonne.
    img2=random.randint(0,4)   # Elles vont servir à indiquer la position de l'image dans la variable "liste_image" pour chaque colonne.
    img3=random.randint(0,4)
    y1=y2=y3=400      # les trois images sont placées avec une ordonnée égale à 400 (y1 pour la 1ère colonne; y2 pour la 2ème et y3 pour la 3ème )
    dy1,dy2,dy3=20,25,50       # l'ordonnée de chaque colonne va varier respectivement de 20; 25 et 50
    x1,x2,x3=150,350,550       # l'abscisse de chaque colonne est fixée respectivement à 150; 350 et 550

    # Attention : Les images n'existent pas lors du premier appel !

    try:                     # Quand on va cliquer de nouveau sur le bouton Go, les trois images identiques. En effet, si on ne fait pas ça, quand on reclique sur le bouton Go,
        canvas.delete(imag1) # les images défilent de nouveau mais les trois images identiques précédentes restent visibles !
        canvas.delete(imag2)
        canvas.delete(imag3)
    except NameError: pass       # # Il faut ignorer le message d'erreur qui apparaît

    imag1=canvas.create_image(x1,400,anchor=CENTER,image=liste_images[img1]) # On crée l'image qui correspond à la (img1+1)ème position dans "liste_image"
    imag2=canvas.create_image(x2,400,anchor=CENTER,image=liste_images[img2]) # et son centre, placé dans la 1ère colonne, a pour coordonnées (x1;400).
    imag3=canvas.create_image(x3,400,anchor=CENTER,image=liste_images[img3]) # On fait de même pour la 2ème et 3ème colonne.
    while True:    # Boucle infinie
        if arret:
           messagebox.showinfo(message="Vous avez %s !"%("gagné" if identik else "perdu"))
           arret=False
           
        sleep(.05)  # marque une pause de 5 centièmes de secondes pour que les images ne défilent pas trop vite.

        if y1<500: canvas.move(imag1,0,dy1); y1=y1+dy1     # Si l'ordonnée y1 de l'image de la 1ère colonne est < à 500, cette image va bouger de dy1; Puis on affecte à y1 sa nouvelle valeur y1+dy1
        else:
            canvas.delete(imag1)  # Sinon, à partir de 500 et au delà, cette image va être supprimée (sinon on la verrait encore descendre à l'écran !).
            y1=400                # Ensuite, on affecte à y1 la valeur 400
            img1=(img1+1)%nb_im   # Ensuite, on avance de 1 la valeur de img1.Comme cela on aura l'image suivante de la liste.
            imag1=canvas.create_image(x1,400,anchor=CENTER,image=liste_images[img1]) # On crée l'image qui correspond à la (img1+2)ème position (ou position (img1+1)) dans "liste_image" et son centre, placé dans la 1ère colonne, a pour coordonnées (x1;400).

        if y2<500: canvas.move(imag2,0,dy2); y2=y2+dy2       # idem pour la 2ème colonne
        else:
            img2=(img2+1)%nb_im; canvas.delete(imag2); y2=400
            imag2=canvas.create_image(x2,400,anchor=CENTER,image=liste_images[img2])


        if y3<500: canvas.move(imag3,0,dy3); y3=y3+dy3      # idem pour la 3ème colonne
        else:
            img3=(img3+1)%nb_im; canvas.delete(imag3); y3=400
            imag3=canvas.create_image(x3,400,anchor=CENTER,image=liste_images[img3])

        canvas.update()   # Cela met à jour l'affichage à chaque itération de la boucle. Sans cette mise à jour; la boucle ne fonctionne pas !
        identik= img1==img2==img3
#        if img1==img2==img3:      # ça permet d'arrêter le défilement des trois images quand ils sont identiques.
#            canvas.delete(imag1)
#            canvas.delete(imag2)
#            canvas.delete(imag3)       # # on efface les trois images qui sont identiques pour les afficher de nouveau avec le même ordonnée y=450
#            imag1 = canvas.create_image(x1, 450, anchor=CENTER, image=liste_images[img1]) # # Les trois images identiques sont alors alignées !
#            imag2 = canvas.create_image(x2, 450, anchor=CENTER, image=liste_images[img2])
#            imag3 = canvas.create_image(x3, 450, anchor=CENTER, image=liste_images[img3])
#            return

# Programme PRINCIPAL
cerises   =PhotoImage(file="cerises.gif")    # On va chercher les 5 fichiers images
seven     =PhotoImage(file="seven.gif")
feracheval=PhotoImage(file="feracheval.gif")
pasteque  =PhotoImage(file="pasteque.gif")
cloche    =PhotoImage(file="cloche.gif")

liste_images=[cerises,feracheval,seven,pasteque,cloche]  # on définit une variable, appelée "liste_images", qui est une liste d'images
nb_im=len(liste_images)  # On affecte à cette variable la longueur de la liste d'images c'est à dire le nombre d'images qu'elle contient qui est ici 5

boutonStop.configure(state='disable') # le bouton GO est désactivé

fen.mainloop()

Hors ligne

#6 Le 21/05/2019, à 19:09

Nat62

Re : SOS aide pour programmer une machine à sous

a partir de ta première version j'ai aussi réussi à la rectifier !  je suis trop contente !
Merci beaucoup
un grand merci

bonne soirée

Hors ligne

#7 Le 21/05/2019, à 19:16

pingouinux

Re : SOS aide pour programmer une machine à sous

Si ta fille doit partager sa note avec tous les intervenants, il ne lui restera pas beaucoup…
Bonne soirée aussi

Hors ligne

#8 Le 23/05/2019, à 12:55

Nat62

Re : SOS aide pour programmer une machine à sous

oui c'est sûr !  !;)
je vous dirai leurs notes !!

un énorme merciiiiiii

bonne journée

Hors ligne

#9 Le 31/05/2019, à 16:13

Nat62

Re : SOS aide pour programmer une machine à sous

RECOUCOU

ma fille et sa copine ont eu leur note en ICN niveau seconde !
Accrochez-vous bien; ma fille n'a eu que 11 sur 20 (machine à sous) et sa copine que  8 sur 20 (trouver le bon mot (anagramme de 7 lettres)) !!!
c'est honteux !!!
je suis très déçue !!!

en tout cas un grand merci de nous avoir aidées !!!

bonne journée

Hors ligne

#10 Le 31/05/2019, à 17:17

pingouinux

Re : SOS aide pour programmer une machine à sous

Ce n'est pas cher payé…
J'aimerais bien voir le corrigé du prof pour chacun de ces deux exercices, et savoir en combien de temps il les a mis au point.
Peut-être à une autre fois, pour de nouvelles aventures…

Hors ligne

#11 Le 31/05/2019, à 17:34

Watael

Re : SOS aide pour programmer une machine à sous

et la prochaine fois, Nat62 vous fera bosser pour qui ? le hamster de sa cousine ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 02/06/2019, à 21:07

Ayral

Re : SOS aide pour programmer une machine à sous

Modération : @Watael tu as sans doute oublié de mettre un smiley genre smile smile pour montrer que c'était de l'humour ? Personne ne s'est plaint d'aider Nat62 donc inutile d'en rajouter.


Pour mettre les retours de commande entre deux balises code, les explications sont là : https://forum.ubuntu-fr.org/viewtopic.php?id=1614731
Blog d'un retraité
Site de graphisme du fiston Loïc
Ubuntu 22.04 LTS sur un Thinkpad W540

Hors ligne

#13 Le 02/06/2019, à 22:28

kholo

Re : SOS aide pour programmer une machine à sous

avoue Watael, c'est toi le prof d'info des petites !!! lol

Hors ligne

#14 Le 02/06/2019, à 22:37

Watael

Re : SOS aide pour programmer une machine à sous

non, moi, je suis le vilain petit canard*, qui n'a pas une maman poule. sad

*  j'ai bien dit CAnard


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne