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. #61
    Membre émérite
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 283
    Par défaut
    Citation Envoyé par man0n Voir le message
    quoi ???
    Hint du souffleur : "but why ?"
    Ou encore : "ok, mais pourquoi, justement ?"
    Je rigole, mais on est tous passé par là, et on y repasse parfois...

    Je crois que tu stresses un peu, et tu ne prends pas assez de recul. Ne cherches pas à aller trop vite, respire, et suis au pieds de la lettre les indications de tarball69. Remarque valable pour tous ceux concernés par ce genre de travail, ceci dit. En tous cas, chapeau tarball69 !

  2. #62
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    Citation Envoyé par AdmChiMay Voir le message
    Hint du souffleur : "but why ?"
    Ou encore : "ok, mais pourquoi, justement ?"
    Je rigole, mais on est tous passé par là, et on y repasse parfois...

    Je crois que tu stresses un peu, et tu ne prends pas assez de recul. Ne cherches pas à aller trop vite, respire, et suis au pieds de la lettre les indications de tarball69. Remarque valable pour tous ceux concernés par ce genre de travail, ceci dit. En tous cas, chapeau tarball69 !
    oui tarball69 fait un tres bon travail pedagogue et patient seulement non je ne suis pas stressée je ne comprends simplement pas. merci pour les précisions.

  3. #63
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    et donc en attendant de resoudre lautre probleme j'ai commencé ca est ce que c'est bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def action:
        global carreX, carreY, rondX, rondY, rectX, rectY
        if carreX=rondX and carreY=rondY:
            id_rond.delete()
            id_rect.create()
    #end def

  4. #64
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par man0n Voir le message
    oui tarball69 fait un tres bon travail pedagogue et patient seulement non je ne suis pas stressée je ne comprends simplement pas. merci pour les précisions.
    Exceptionnel, je suis en admiration (sincèrement, sans ironie) !

  5. #65
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par AdmChiMay Voir le message
    Hint du souffleur : "but why ?"
    Ou encore : "ok, mais pourquoi, justement ?"
    Je rigole, mais on est tous passé par là, et on y repasse parfois...

    Je crois que tu stresses un peu, et tu ne prends pas assez de recul. Ne cherches pas à aller trop vite, respire, et suis au pieds de la lettre les indications de tarball69. Remarque valable pour tous ceux concernés par ce genre de travail, ceci dit. En tous cas, chapeau tarball69 !

  6. #66
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Exceptionnel, je suis en admiration (sincèrement, sans ironie) !

  7. #67
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    repondu a tout le monde sauf a moi ...

  8. #68
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    repondu a tout le monde sauf a moi ...

  9. #69
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    je disais pas ca pour des remerciements c'est surtout moi qui vous remercies ! mais je nai plus qu'une journée pour terminer mon jeu si vous aviez le temps de jetter un nouveau coup d'œil a mon code modifié et me dire ce que je dois faire pour regler les problèmes

  10. #70
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    et donc en attendant de resoudre lautre probleme j'ai commencé ca est ce que c'est bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def action:
        global carreX, carreY, rondX, rondY, rectX, rectY
        if carreX=rondX and carreY=rondY:
            id_rond.delete()
            id_rect.create()
    #end def
    bon, on va essayer d'accélérer un peu la cadence.

    donc : def action sans parenthèses, ça ne le fait pas : on définit une fonction avec def, alors même s'il n'y a pas d'arguments à la fonction, il faut toujours mettre des parenthèses avec def nom_de_fonction ().

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def action ():
        global carreX, carreY, rondX, rondY, rectX, rectY
        if carreX=rondX and carreY=rondY:
            id_rond.delete()
            id_rect.create()
    #end def
    Ensuite, Python comprend parfaitement la comparaison de coordonnées de points (tuples) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def action ():
        global carreX, carreY, rondX, rondY, rectX, rectY
        if (carreX, carreY) == (rondX, rondY):
            id_rond.delete()
            id_rect.create()
    #end def
    Pour finir, id_rond.delete() et id_rect.create(), je ne sais pas d'où ça sort, ce truc ?

    Je suppose que vous vouliez dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def action ():
        global carreX, carreY, rondX, rondY, rectX, rectY
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_rond)
            nouvel_obstacle() # on le définira ensuite
    #end def
    Ceci dit, l'ensemble de ce code mis dans une fonction action() => je ne vois pas trop l'intérêt : vous avez la fonction move() dans laquelle vous pouvez effectuer ce test.

    Pourquoi créer une nouvelle action pour ça ?

  11. #71
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    donc voila mon dernier code modifié
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
    # zone de définition des fonctions
     
    def newgame():#definition des aprametres du jeu    
        global rondX, rondY, rectX, rectY, carreX, carreY, dep, direction, id_rond, id_rect, id_carre
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
     
        # création de l'objet à attraper
        rondX = randrange(5, 495)
        rondY = randrange(5, 495)
        id_rond=canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
     
        # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        id_rect=canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
     
        # mise en mouvement possible du carré
        direction = ''
        move ()
     
        # utilisation des flèches du clavier
        fenetre.bind("<Right>", right)
        fenetre.bind('<Left>', left)
        fenetre.bind('<Up>', up)
        fenetre.bind('<Down>', down)
    # end def
     
     
    def move():#definitions des mouvements du carré
        global carreX, carreY, dep, direction, id_carre
         # mise en mouvement
        if direction == 'gauche':
            carreX -= dep
        elif direction == 'droite':
            carreX += dep
        elif direction == 'haut':
            carreY -= dep              
        elif direction == 'bas':
            carreY += dep   
        # end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    # directions
    def left (event):#mouvement vers la gauche
        global direction
        direction = 'gauche'
     
    # end def
    def right (event):#mouvement vers la droite
        global direction
        direction = 'droite'
     
    # end def
    def up (event):#mouvement vers le haut
        global direction
        direction = 'haut'
     
    # end def
    def down (event):#mouvement vers le bas
        global direction
        direction = 'bas'
     
    # end def 
     
     
     
    # création de l'interface graphique 
    fenetre = Tk()
    fenetre.title('Jeu Final')
     
    # canevas graphique
    canevas = Canvas(fenetre, width=500, height=500, bg='#046380')
    canevas.pack(side=TOP, padx=5, pady=5)
     
    # init coordonnées du carré
    carreX, carreY = (235, 250)
     
    # dessin du carré
    carre = canevas.create_rectangle(carreX, carreY, carreX+10, carreY+10, outline='white', fill='#C03000')
     
    # init boutons
    Button(fenetre, text='New Game', command=newgame).pack(side=LEFT, padx=5, pady=5)
     
    Button(fenetre, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=5, pady=5)
     
    #infos 
    Label(fenetre, text="Cliquez sur 'New Game' pour commencer").pack(padx=0, pady=11)
     
     
    # on lance la boucle principale
    fenetre.mainloop()
    et j'ai toujours ce probleme que je ne sais pas comment regler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
        return self.func(*args)
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 27, in newgame
        move ()
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 54, in move
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
    NameError: global name 'id_carre' is not defined

  12. #72
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    donc voila mon dernier code modifié
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
    # zone de définition des fonctions
     
    def newgame():#definition des aprametres du jeu    
        global rondX, rondY, rectX, rectY, carreX, carreY, dep, direction, id_rond, id_rect, id_carre
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
     
        # création de l'objet à attraper
        rondX = randrange(5, 495)
        rondY = randrange(5, 495)
        id_rond=canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
     
        # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        id_rect=canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
     
        # mise en mouvement possible du carré
        direction = ''
        move ()
     
        # utilisation des flèches du clavier
        fenetre.bind("<Right>", right)
        fenetre.bind('<Left>', left)
        fenetre.bind('<Up>', up)
        fenetre.bind('<Down>', down)
    # end def
     
     
    def move():#definitions des mouvements du carré
        global carreX, carreY, dep, direction, id_carre
         # mise en mouvement
        if direction == 'gauche':
            carreX -= dep
        elif direction == 'droite':
            carreX += dep
        elif direction == 'haut':
            carreY -= dep              
        elif direction == 'bas':
            carreY += dep   
        # end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    # directions
    def left (event):#mouvement vers la gauche
        global direction
        direction = 'gauche'
     
    # end def
    def right (event):#mouvement vers la droite
        global direction
        direction = 'droite'
     
    # end def
    def up (event):#mouvement vers le haut
        global direction
        direction = 'haut'
     
    # end def
    def down (event):#mouvement vers le bas
        global direction
        direction = 'bas'
     
    # end def 
     
     
     
    # création de l'interface graphique 
    fenetre = Tk()
    fenetre.title('Jeu Final')
     
    # canevas graphique
    canevas = Canvas(fenetre, width=500, height=500, bg='#046380')
    canevas.pack(side=TOP, padx=5, pady=5)
     
    # init coordonnées du carré
    carreX, carreY = (235, 250)
     
    # dessin du carré
    carre = canevas.create_rectangle(carreX, carreY, carreX+10, carreY+10, outline='white', fill='#C03000')
     
    # init boutons
    Button(fenetre, text='New Game', command=newgame).pack(side=LEFT, padx=5, pady=5)
     
    Button(fenetre, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=5, pady=5)
     
    #infos 
    Label(fenetre, text="Cliquez sur 'New Game' pour commencer").pack(padx=0, pady=11)
     
     
    # on lance la boucle principale
    fenetre.mainloop()
    et j'ai toujours ce probleme que je ne sais pas comment regler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
        return self.func(*args)
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 27, in newgame
        move ()
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 54, in move
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
    NameError: global name 'id_carre' is not defined
    Lisez la dernière ligne du message d'erreur et faites le rapprochement avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # dessin du carré
    carre = canevas.create_rectangle(carreX, carreY, carreX+10, carreY+10, outline='white', fill='#C03000')
    il vous dit que id_carre n'est pas défini au moment de s'en servir.

    pourquoi ? parce que......

  13. #73
    Invité
    Invité(e)
    Par défaut erratum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    au temps pour moi, je suis allé un peu vite, c'est id_rond qu'on supprime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_rond)

  14. #74
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    Parce qu'il n'est pas defini mais comment on le definie je ne l'avais jamais etudié avant donc je ne sais pas du tout coment faire

  15. #75
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Parce qu'il n'est pas defini mais comment on le definie je ne l'avais jamais etudié avant donc je ne sais pas du tout coment faire
    Non, je sais qu'il faut faire vite, mais quand même : relisez attentivement mon post, svp.

  16. #76
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Non, je sais qu'il faut faire vite, mais quand même : relisez attentivement mon post, svp.
    J'insiste là-dessus parce que c'est un bug qui arrive fréquemment quand on débute : on change le nom d'une variable, mais on oublie de répercuter ce changement partout dans le script.

    Regardez bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # dessin du carré
    carre = canevas.create_rectangle(carreX, carreY, carreX+10, carreY+10, outline='white', fill='#C03000')
    Nous avons tout simplement oublié de répercuter le nouveau nom id_carre au bon endroit (à la place de l'ancien nom carre).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # dessin du carré
    id_carre = canevas.create_rectangle(carreX, carreY, carreX+10, carreY+10, outline='white', fill='#C03000')

  17. #77
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    Ah oui d'accord ! Je change ca merci

  18. #78
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    ca marche mais le rond disparaît pas quand le carré est dessus...

  19. #79
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ca marche mais le rond disparaît pas quand le carré est dessus...
    Oui, exact.

    Je viens de faire quelques tests et vu les imprécisions dues au coef dep, on a mieux jeu de passer par les détections de collisions grâce à canvas.find_overlapping().

    Bon, là, je ne vais pas m'étendre indéfiniment sur cette méthode canvas.find_overlapping().

    Je vous file du code qui fonctionne :

    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
    def move():
        """definitions des mouvements du carré"""
        global carreX, carreY, dep, direction
        # mise en mouvement
        if direction == 'gauche':
            carreX -= dep
        elif direction == 'droite':
            carreX += dep
        elif direction == 'haut':
            carreY -= dep
        elif direction == 'bas':
            carreY += dep
        # end if
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            #nouvel_obstacle()
        # end if
        #acceleration du carré possible
        if dep <= 20:
            dep += 0.1
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 100 ms
        fenetre.after(100, move)
    # end def
    on se servira aussi par la suite de la variable collisions pour gérer les blocs noirs qui tuent le carré joueur.

  20. #80
    Membre très actif
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Oui, exact.

    Je viens de faire quelques tests et vu les imprécisions dues au coef dep, on a mieux jeu de passer par les détections de collisions grâce à canvas.find_overlapping().

    Bon, là, je ne vais pas m'étendre indéfiniment sur cette méthode canvas.find_overlapping().

    Je vous file du code qui fonctionne :

    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
    def move():
        """definitions des mouvements du carré"""
        global carreX, carreY, dep, direction
        # mise en mouvement
        if direction == 'gauche':
            carreX -= dep
        elif direction == 'droite':
            carreX += dep
        elif direction == 'haut':
            carreY -= dep
        elif direction == 'bas':
            carreY += dep
        # end if
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            #nouvel_obstacle()
        # end if
        #acceleration du carré possible
        if dep <= 20:
            dep += 0.1
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 100 ms
        fenetre.after(100, move)
    # end def
    on se servira aussi par la suite de la variable collisions pour gérer les blocs noirs qui tuent le carré joueur.
    ok tres bien mais c'est quoi d ? et pourquoi dep//4 ?

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