IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Utilisation for i in range (n) pour projet roulette de casino


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut Utilisation for i in range (n) pour projet roulette de casino
    Bonjour ,

    Donc voila j'ai un projet pour le lycée qui de faire une roulette de casino , pour la partie graphique tout ce passe très bien mais ce qui me pose problème c'est l'arrêt de la bille , une foi arriver au centre de la roulette elle repart dans l'autre sens ... On m'a conseillé d'utiliser la commande " for in range (n)" pour que ma bille s’arrête au bout de x secondes , cependant je ne sais pas ou placer cette commande et si quelqu'un pouvait me venir en aide cela m'aiderait énormément ,donc voici mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #  Créé par x, le 25/05/2014
    from __future__ import division
    from lycee import *
    from time import *
    from Tkinter import *
     
     
    #Programme traçant une trajectoire double sinusoidale
     
    #---- Initialisation des variables
    Xo,Yo,Rbille,Rroulette = 200,200,5,80
    t0=time()
     
    #---- Affichage de la position au temps t
    def play ():
        global Xo, Yo, R
     
        t=time()
     
        X=Xo-(90-((5)*(t-t0)))*sin(150*(t-t0))
        Y=Yo-(90-((5)*(t-t0)))*cos(-150*(t-t0))
     
     
     
     
        can1.coords(Bille,X-Rbille,Y-Rbille,X+Rbille,Y+Rbille)
     
        fen1.after(1,play)
     
    #-Programme principal
    #--- Ouverture de la fenêtre principale
    fen1 = Tk()
     
    #---- Définition d'un canevas appelé can1
    can1 = Canvas(fen1,bg='dark green',height=400,width=400)
    can1.pack(side=RIGHT)
     
    bou2 = Button(fen1, text='lancer', command = play)
    bou2.pack()
    Roulette = can1.create_oval(120,120,280,280,width=10 ,fill="RosyBrown4")
     
    Bille = can1.create_oval(195,195,205,205,width=0,fill='white')
     
    fen1.mainloop()



    Je vous remercie par avance de votre aide,
    cordialement yoy27500

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    Salut,

    L'intérêt de poster du code est d'éviter aux personnes qui chercheront à vous aider de perdre du temps.
    Le but est de pouvoir faire fonctionner votre code après un simple copie&coller.

    Quand on lit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def play ():
    (alinéa) global Xo, Yo, R
    ...
    on arrête de lire et, en général, on passe à autre chose sans même perdre le temps vous laisser de petit mot comme celui-ci.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut
    Je suis désolé , mais étant nouveau sur le forum je n'ai pas pris connaissance (Oui je sais c'est mal !) de la commande [CODE] , j'ai donc éditer mon message .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par yoyo27500 Voir le message
    Je suis désolé , mais étant nouveau sur le forum je n'ai pas pris connaissance (Oui je sais c'est mal !) de la commande [CODE] , j'ai donc éditer mon message .
    SVP, évitez de modifier vos messages : ça fausse le fil de la discussion.

    Préférez publier un nouveau message à chaque fois dans le même fil de discussion.

    Les serveurs du forum ont de la place et de la mémoire, ne vous inquiétez pas.

    @+.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    C'est bien.

    Jouez avec ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    # -*- coding:utf-8 -*-
    from time import *
    from Tkinter import *
    from math import sin, cos 
     
    #Programme traçant une trajectoire double sinusoidale
     
    #---- Initialisation des variables
     
    Xo,Yo,Rbille,Rroulette = 200,200,5,80
    t0=time()
     
    #---- Affichage de la position au temps t
    timer = None
    def play ():
        global timer
        if timer:
            return
     
        t=time()
        X=Xo-(90-((5)*(t-t0)))*sin(150*(t-t0))
        Y=Yo-(90-((5)*(t-t0)))*cos(-150*(t-t0))
        can1.coords('bille',X-Rbille,Y-Rbille,X+Rbille,Y+Rbille)
     
        timer = fen1.after(100,play)
     
    def stop():
        global timer
        if timer:
            fen1.after_cancel(timer)
            timer = None
     
    #-Programme principal
    #--- Ouverture de la fenêtre principale
    fen1 = Tk()
     
    #---- Définition d'un canevas appelé can1
    can1 = Canvas(fen1,bg='dark green',height=400,width=400)
    can1.pack(side=RIGHT)
     
    Button(fen1, text='lancer', command=play).pack()
    Button(fen1, text='stop', command=stop).pack()
     
     
    can1.create_oval(120,120,280,280,width=10 ,fill="RosyBrown4") 
    can1.create_oval(195,195,205,205,width=0,fill='white', tag='bille')
     
    fen1.mainloop()
    Il vous montre que la bille s'arrête lorsqu'on arrête d'appeler fen1.after(100,play).
    Ici la condition est déclenché par le Button "stop".

    Vous pourriez créer un nombre aléatoirement et pas trop grand:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    count = nombre aléatoire
    def play():
          global count
          count -= 1
          if count <= 0:
               return
          ... ici on fait bouger la bille...
    Ou une durée aléatoire.

    A vous de voir.
    La bibliothèque random est ici

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut
    Merci beaucoup ! Mais du coup si je veux faire tourner ma bille pendant x secondes il faut que j'utilise count c'est ça ? je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    timer = None
    def play ():
        global timer
        if timer:
            return
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    count (10)
    def play():
          global count
          count -= 1
          if count <= 0:
               return

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    Citation Envoyé par yoyo27500 Voir le message
    Mais du coup si je veux faire tourner ma bille pendant x secondes, il faut que j'utilise count c'est ça ?
    A partir du moment ou çà fait "fen1.after(delay,play)", la durée serait ~count*delai.
    Mais comme vous êtes parti à mesurer le temps sorti de time(), vous pourriez calculer un max_time = t0 + random(qqc) et ré-iterer les .after tant que time < max_time.
    A vous de choisir en fonction de comment vous le sentez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut
    Je suis désolé mais malgré plusieurs tentative je n'y arrive toujours pas j'ai essayer plusieurs choses tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    # Créé par x, le 25/05/2014
    from __future__ import division
    from lycee import *
    from Tkinter import *
    from time import *
     
    Xo,Yo,Rbille,Rroulette = 200,200,5,80
    t0=time()
     
     
    def play ():
        global Xo, Yo, R
     
        t=time()
     
        X=Xo-(90-((5)*(t-t0)))*sin(150*(t-t0))
        Y=Yo-(90-((5)*(t-t0)))*cos(-150*(t-t0))
     
     
     
     
        can1.coords(Bille,X-Rbille,Y-Rbille,X+Rbille,Y+Rbille)
     
        timer = fen1.after(10,play)
     
    def stop():
        global timer
        if timer:
            fen1.after_cancel(12)
            timer = 12
     
    #-Programme principal
    #--- Ouverture de la fenêtre principale
    fen1 = Tk()
     
    #---- Définition d'un canevas appelé can1
    can1 = Canvas(fen1,bg='dark green',height=400,width=400)
    can1.pack(side=RIGHT)
     
    Button(fen1, text='lancer', command=play).pack()
     
     
     
    can1.create_oval(120,120,280,280,width=10 ,fill="RosyBrown4")
    can1.create_oval(195,195,205,205,width=0,fill='white', tag='bille')
     
    fen1.mainloop()

    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # Créé par yoran, le 31/05/2014
    from __future__ import division
    from lycee import *
    from time import *
    from Tkinter import *
    from math import sin, cos
     
    #Programme traçant une trajectoire double sinusoidale
     
    #---- Initialisation des variables
     
    Xo,Yo,Rbille,Rroulette = 200,200,5,80
    t0=time()
     
    #---- Affichage de la position au temps t
    count = 500
    def play():
          global count
          count -= 1
          if count <= 0:
               return
          t=time()
          X=Xo-(90-((5)*(t-t0)))*sin(150*(t-t0))
          Y=Yo-(90-((5)*(t-t0)))*cos(-150*(t-t0))
          can1.coords('bille',X-Rbille,Y-Rbille,X+Rbille,Y+Rbille)
          timer = fen1.after(10,play)
     
    def stop():
        global timer
        if timer:
            fen1.after_cancel(timer)
            timer = None
     
    #-Programme principal
    #--- Ouverture de la fenêtre principale
    fen1 = Tk()
     
    #---- Définition d'un canevas appelé can1
    can1 = Canvas(fen1,bg='dark green',height=400,width=400)
    can1.pack(side=RIGHT)
     
    Button(fen1, text='lancer', command=play).pack()
    Button(fen1, text='stop', command=stop).pack()
     
     
    can1.create_oval(120,120,280,280,width=10 ,fill="RosyBrown4")
    can1.create_oval(195,195,205,205,width=0,fill='white', tag='bille')
     
    fen1.mainloop()
    Sur le dernier j'ai bien la bille qui s'arrête mais elle ne tourne pas de façon fluide et de plus je ne peux pas la relancer .


    Cordialement,
    yoyo2750

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par yoyo27500 Voir le message
    Je suis désolé mais malgré plusieurs tentative je n'y arrive toujours pas j'ai essayer plusieurs choses tel que :
    (snip)(snip)

    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # Créé par yoran, le 31/05/2014
    from __future__ import division
    from lycee import *
    from time import *
    from Tkinter import *
    from math import sin, cos
     
    #Programme traçant une trajectoire double sinusoidale
     
    #---- Initialisation des variables
     
    Xo,Yo,Rbille,Rroulette = 200,200,5,80
    t0=time()
     
    #---- Affichage de la position au temps t
    count = 500
    def play():
          global count
          count -= 1
          if count <= 0:
               return
          t=time()
          X=Xo-(90-((5)*(t-t0)))*sin(150*(t-t0))
          Y=Yo-(90-((5)*(t-t0)))*cos(-150*(t-t0))
          can1.coords('bille',X-Rbille,Y-Rbille,X+Rbille,Y+Rbille)
          timer = fen1.after(10,play)
     
    def stop():
        global timer
        if timer:
            fen1.after_cancel(timer)
            timer = None
     
    #-Programme principal
    #--- Ouverture de la fenêtre principale
    fen1 = Tk()
     
    #---- Définition d'un canevas appelé can1
    can1 = Canvas(fen1,bg='dark green',height=400,width=400)
    can1.pack(side=RIGHT)
     
    Button(fen1, text='lancer', command=play).pack()
    Button(fen1, text='stop', command=stop).pack()
     
     
    can1.create_oval(120,120,280,280,width=10 ,fill="RosyBrown4")
    can1.create_oval(195,195,205,205,width=0,fill='white', tag='bille')
     
    fen1.mainloop()
    Sur le dernier j'ai bien la bille qui s'arrête mais elle ne tourne pas de façon fluide et de plus je ne peux pas la relancer .


    Cordialement,
    yoyo2750
    Bonjour,

    Bon, vous y êtes presque.

    Le principe, c'est donc bien de "casser" la boucle dans la fonction play() qui se fait par fen1.after(10, play).

    En fait, si vous observez bien, c'est lorsque la position (X, Y) de votre bille s'approche de (X0, Y0) qu'il faudrait "casser" la boucle.

    Voici un exemple qui devrait vous aider à réfléchir à la question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    #  Créé par x, le 25/05/2014
    #~ from __future__ import division
    #~ from lycee import *
    from math import sin, cos, pi
    from time import time
    from Tkinter import *
     
     
    #Programme traçant une trajectoire double sinusoidale
     
    #---- Affichage de la position au temps t
    def play ():
        "boucle d'animation bille"
     
        global X0, Y0
     
        # init différentiel temps
        dt = time() - t0
     
        # nouvelle position bille
        X = X0 - (Rroulette - Rbille * dt) * sin(pi * dt)
        Y = Y0 - (Rroulette - Rbille * dt) * cos(-pi * dt)
     
        # déplacement bille
        canvas.coords(bille, X-Rbille, Y-Rbille, X+Rbille, Y+Rbille)
     
        # bille arrivée vers le centre (X0, Y0) ?
        if (X0-2 <= X <= X0+2) and (Y0-2 <= Y <= Y0+2):
     
            # on annonce dans la console
            print "Terminé !\n\nBille au centre !"
     
            # on réautorise le bouton "lancer"
            bouton_lancer.configure(state=NORMAL)
     
        # bille toujours pas arrivée au centre
        else:
     
            # on continue de boucler
            # toutes les 50 millisecondes
            fenetre.after(50, play)
     
        # end if
     
    # end def
     
     
    def lancer_bille ():
        "lancer de bille"
     
        global t0
     
        # on désactive le bouton "lancer"
        # pour éviter des lancements parasites
        bouton_lancer.configure(state=DISABLED)
     
        # on initialise le marqueur temps zéro
        # pour un nouveau lancer
        t0 = time()
     
        # on lance la boucle d'animation de la bille
        play()
     
    # end def
     
     
    #---- Initialisation des variables
    X0, Y0 = (200, 200)
    Rbille = 5
    Rroulette = 80
     
    #-Programme principal
    #--- Ouverture de la fenêtre principale
    fenetre = Tk()
     
    #---- Définition d'un canevas appelé canvas
    canvas = Canvas(fenetre, bg='dark green', height=400, width=400)
    canvas.pack(side=RIGHT)
     
    roulette = canvas.create_oval(120, 120, 280, 280, width=10, fill="RosyBrown4")
     
    bille = canvas.create_oval(195, 195, 205, 205, width=0, fill='white')
     
    bouton_lancer = Button(fenetre, text='lancer', command=lancer_bille)
    bouton_lancer.pack(padx=5, pady=5)
     
    Button(fenetre, text="Quitter", command=fenetre.destroy).pack(side=BOTTOM, padx=5, pady=5)
     
    fenetre.mainloop()
    Bon courage.

    @+.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Par défaut
    Merci c'est exactement ce que je voulait !!! Merci beaucoup !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser le même look and feel pour plusieurs projets
    Par benbauf dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 03/09/2010, 16h59
  2. Utiliser l'adresse de deux cellules pour selectionner une rangé
    Par Gaelb dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 22/08/2008, 15h26
  3. Comment utiliser Range(cells(... pour indiquer une plage de cellules
    Par gerald57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/05/2008, 10h35
  4. Nom de Champ pour utiliser For/Next
    Par Mulele dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 19h57
  5. Nom de Champ dans une table pour utiliser For/Next
    Par Mulele dans le forum Access
    Réponses: 6
    Dernier message: 30/10/2004, 13h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo