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

Tkinter Python Discussion :

Jeu snake tkinter


Sujet :

Tkinter Python

  1. #161
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    ligne 2 : est-ce que vous pourriez me remettre cette ligne 2 d'aplomb, svp ? pour l'instant, le code est faux si mal tabulé.

    ligne 3 : une condition if se termine toujours par ":"

    bon, on sait que canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) va nous retourner une liste d'identifiants IDs de tous les canvasItems qu'il détectera dans cette zone.

    si cette liste est vide, la condition if canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) vaudra False et donc le code qui suivra ne sera pas exécuté.

    a contrario, si cette liste est pleine, la condition if canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) vaudra True et donc le code qui suivra sera exécuté.

    or, nous, on veut justement pouvoir poser notre rond quand il n'y a rien dans les alentours de (rondX, rondY), autrement dit, on voudrait pouvoir tester quand la liste est vide et non pas quand elle est pleine.

    que doit-on changer dans cette condition pour que ça fonctionne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if canevas.find_overlapping():
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    else:

  2. #162
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if canevas.find_overlapping():
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    else:
    non, ce n'est pas ça.

    Petit indice :

    En logique booléenne (TRUE/FALSE) :

    (A): TRUE == NOT FALSE

    (B): FALSE == NOT TRUE

    si la condition IF TRUE n'est pas ce que l'on cherche, alors la condition IF FALSE est certainement ce que l'on cherche.

    si je remplace FALSE par NOT TRUE en vertu de la règle (B), j'obtiens IF FALSE == IF NOT TRUE

    et nous avons vu que la condition IF FALSE donc par conséquent IF NOT TRUE est la condition que nous cherchons très certainement.

    en appliquant ce raisonnement à notre condition if canevas.find_... nous obtenons ... ?

  3. #163
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    non, ce n'est pas ça.

    Petit indice :

    En logique booléenne (TRUE/FALSE) :

    (A): TRUE == NOT FALSE

    (B): FALSE == NOT TRUE

    si la condition IF TRUE n'est pas ce que l'on cherche, alors la condition IF FALSE est certainement ce que l'on cherche.

    si je remplace FALSE par NOT TRUE en vertu de la règle (B), j'obtiens IF FALSE == IF NOT TRUE

    et nous avons vu que la condition IF FALSE donc par conséquent IF NOT TRUE est la condition que nous cherchons très certainement.

    en appliquant ce raisonnement à notre condition if canevas.find_... nous obtenons ... ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if canevas.find_withtag(rondX-20, rondY-20, rondX+20, rondY+20):
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    else:

  4. #164
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if canevas.find_withtag(rondX-20, rondY-20, rondX+20, rondY+20):
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    else:
    non, je voudrais que vous regardiez canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) comme étant la condition TRUE de l'indice que je vous ai donné.

    disons que : TRUE = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)

    dans le code on aurait un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    true = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)
    if true:
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    or, nous avons vu que c'est la condition booléenne IF FALSE qui nous intéresse, c'est-à-dire la condition IF NOT TRUE qui nous intéresse, ce qui devrait se traduire dans le code par ....... ?

    RAPPEL :

    En logique booléenne (TRUE / FALSE) :

    (A): TRUE == NOT FALSE

    (B): FALSE == NOT TRUE

    si la condition IF TRUE n'est pas ce que l'on cherche, alors la condition IF FALSE est certainement ce que l'on cherche.

    si je remplace FALSE par NOT TRUE en vertu de la règle (B), j'obtiens IF FALSE == IF NOT TRUE

    et nous avons vu que la condition IF FALSE donc par conséquent IF NOT TRUE est la condition que nous cherchons très certainement.

  5. #165
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    non, je voudrais que vous regardiez canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) comme étant la condition TRUE de l'indice que je vous ai donné.

    disons que : TRUE = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)

    dans le code on aurait un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    true = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)
    if true:
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    or, nous avons vu que c'est la condition booléenne IF FALSE qui nous intéresse, c'est-à-dire la condition IF NOT TRUE qui nous intéresse, ce qui devrait se traduire dans le code par ....... ?

    RAPPEL :

    En logique booléenne (TRUE / FALSE) :

    (A): TRUE == NOT FALSE

    (B): FALSE == NOT TRUE

    si la condition IF TRUE n'est pas ce que l'on cherche, alors la condition IF FALSE est certainement ce que l'on cherche.

    si je remplace FALSE par NOT TRUE en vertu de la règle (B), j'obtiens IF FALSE == IF NOT TRUE

    et nous avons vu que la condition IF FALSE donc par conséquent IF NOT TRUE est la condition que nous cherchons très certainement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    true = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)
    if not true:
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if

  6. #166
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    true = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)
    if not true:
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    alors là, moi, je dis : CHAMPAGNE !

    bon, il suffit maintenant de remplacer true par sa valeur dans le if, on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    reste qu'on a un autre problème : pour l'instant cette recherche ne se fait qu'une seule fois.

    or, si on trouve quelquechose dans les alentours de (rondX, rondY), le rond ne sera pas créé.

    autrement dit, on a oublié de boucler tant qu'on a pas créé de rond...

    ce qui se traduirait par ... ?

    (indice : il faut utiliser la boucle while 1: et on sort d'une boucle avec le mot-clé break)

    code final de new_rond() ?

  7. #167
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    alors là, moi, je dis : CHAMPAGNE !

    bon, il suffit maintenant de remplacer true par sa valeur dans le if, on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    reste qu'on a un autre problème : pour l'instant cette recherche ne se fait qu'une seule fois.

    or, si on trouve quelquechose dans les alentours de (rondX, rondY), le rond ne sera pas créé.

    autrement dit, on a oublié de boucler tant qu'on a pas créé de rond...

    ce qui se traduirait par ... ?

    (indice : il faut utiliser la boucle while 1: et on sort d'une boucle avec le mot-clé break)

    code final de new_rond() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while canevas.overlapping(...)
        no canevas.create(...)
    else:
    def.break

  8. #168
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while canevas.overlapping(...)
        no canevas.create(...)
    else:
    def.break
    qu'est-ce que c'est que ce charabia ?

    franchement, vous croyez que je me serais tué à vous faire faire écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    pour ensuite vous faire écrire quelque chose de complètement différent ?

    ne cherchez pas midi à 14h : ce que je vous fais faire est généralement de l'ordre de l'évidence, exploitez l'existant, rajoutez-y juste while 1: au bon endroit et break là où il faut et votre fonction new_rond() est terminée !

    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
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # création de l'objet à attraper
        # où est-ce que je mets while 1: ?
            # init position aléatoire
            rondX = randrange(5, 495)
            rondY = randrange(5, 495)
            # rien dans les parages ?
            if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
                # on peut créer le rond
                id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
                # on sort de la boucle
                # où est-ce que je mets break ?
            # end if
        # end while
    # end def

  9. #169
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    qu'est-ce que c'est que ce charabia ?

    franchement, vous croyez que je me serais tué à vous faire faire écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rondX = randrange(5, 495)
    rondY = randrange(5, 495)
    if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
       id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    # end if
    pour ensuite vous faire écrire quelque chose de complètement différent ?

    ne cherchez pas midi à 14h : ce que je vous fais faire est généralement de l'ordre de l'évidence, exploitez l'existant, rajoutez-y juste while 1: au bon endroit et break là où il faut et votre fonction new_rond() est terminée !

    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
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # création de l'objet à attraper
        # où est-ce que je mets while 1: ?
            # init position aléatoire
            rondX = randrange(5, 495)
            rondY = randrange(5, 495)
            # rien dans les parages ?
            if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
                # on peut créer le rond
                id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
                # on sort de la boucle
                # où est-ce que je mets break ?
            # end if
        # end while
    # end def
    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
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # création de l'objet à attraper
        while 1: 
            # init position aléatoire
            rondX = randrange(5, 495)
            rondY = randrange(5, 495)
            # rien dans les parages ?
            if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
                # on peut créer le rond
                id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
                # on sort de la boucle
                break
            # end if            
        # end while
    # end def

  10. #170
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    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
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # création de l'objet à attraper
        while 1: 
            # init position aléatoire
            rondX = randrange(5, 495)
            rondY = randrange(5, 495)
            # rien dans les parages ?
            if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20):
                # on peut créer le rond
                id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
                # on sort de la boucle
                break
            # end if            
        # end while
    # end def
    eh ben, voilà ! ce n'était pas si dur, finalement !

    il ne vous reste plus qu'à mettre ce code dans votre script à la place de l'ancienne définition de new_rond() et ça devrait être bon.


  11. #171
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    eh ben, voilà ! ce n'était pas si dur, finalement !

    il ne vous reste plus qu'à mettre ce code dans votre script à la place de l'ancienne définition de new_rond() et ça devrait être bon.

    je ne pensais pas qu'on devaait les mettre seus comme ca ...!

  12. #172
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    je ne pensais pas qu'on devaait les mettre seus comme ca ...!
    ??? pas compris ???

  13. #173
    Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    ??? pas compris ???
    je ne pensais pas qu'on ppouvais mettre juste while 1 et break tout seuls comme ca sasn rien avant ou apres

  14. #174
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    je ne pensais pas qu'on ppouvais mettre juste while 1 et break tout seuls comme ca sasn rien avant ou apres
    while 1: signifie littéralement "tant que 1 (ce qui est toujours vrai) boucler:" c'est-à-dire finalement "boucler tout le temps:"

    on ne met pas while 1: et break tous seuls sans rien : while 1: boucle bien sur le bloc de code qui se trouve sous lui et break est bien compris dans la condition if ... donc non, ils ne sont pas seuls du tout, même.

    bon allez, moi, je vais au dodo...

    bonne nuit !

Discussions similaires

  1. Problème jeu snake Tkinter
    Par jojo41 dans le forum Tkinter
    Réponses: 0
    Dernier message: 14/05/2014, 15h18
  2. [CS4] jeu Snake avec notion des classes
    Par amineprog dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 29/12/2010, 14h00
  3. Jeu Snake
    Par slim_java dans le forum Téléchargez
    Réponses: 0
    Dernier message: 29/12/2010, 11h22
  4. Aide pour pouvoir ammeliorer mon jeu (Snake)
    Par kump_ dans le forum Projets
    Réponses: 24
    Dernier message: 13/08/2008, 02h26
  5. [ancien jeu] Snake deux joueur en ligne?
    Par Extra-Nitro dans le forum Web
    Réponses: 7
    Dernier message: 28/02/2007, 18h59

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