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. #41
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    dep <= 20 ?
    et dans le code, ça donnerait quoi ?

  2. #42
    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
    et dans le code, ça donnerait quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if dep <= 20:
            dep +=0.1

  3. #43
    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
     if dep <= 20:
            dep +=0.1
    OUI, tout bêtement.

    ou plus brutalement :

    on peut aussi l'écrire comme ça.

  4. #44
    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, tout bêtement.

    ou plus brutalement :

    on peut aussi l'écrire comme ça.
    d'accord merci. <<<donc il nous reste le plus dur je pense faire manger la boule par le carré et tuer le carré par le rectangle.

  5. #45
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    d'accord merci. <<<donc il nous reste le plus dur je pense faire manger la boule par le carré et tuer le carré par le rectangle.
    Allez, je sors le bidon d'huile de coude.

    On va y arriver.

  6. #46
    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
    Allez, je sors le bidon d'huile de coude.

    On va y arriver.
    je n'en doute pas !

    par quoi commencer ? comment dire que si collision entre carré et rond alors rond disparaît ?

  7. #47
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    je n'en doute pas !

    par quoi commencer ? comment dire que si collision entre carré et rond alors rond disparaît ?
    plusieurs solutions :

    * soit on mémorise la position (x, y) d'un rond au moment où on le crée puis on le compare à la position (X, Y) de notre carré

    * soit on fait une détection "en aveugle" avec canvas.find_overlapping(), mais avec le problème de l'accélération dep, on risque de ne pas détecter le rond (sauf bidouille)

    pour faire disparaître un rond : à sa création, on mémorise son identifiant id_rond de canvasItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        # création de l'objet à attraper
        pX = randrange(5, 495)
        pY = randrange(5, 495)
        id_rond = canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green')
    puis, le moment venu, on le fait disparaître :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canevas.delete(id_rond)
    à vous de jouer.

  8. #48
    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
    plusieurs solutions :

    * soit on mémorise la position (x, y) d'un rond au moment où on le crée puis on le compare à la position (X, Y) de notre carré

    * soit on fait une détection "en aveugle" avec canvas.find_overlapping(), mais avec le problème de l'accélération dep, on risque de ne pas détecter le rond (sauf bidouille)

    .
    ce qu'il y a c'est que je ne connais aucune des deux techniques j'aurai besoin d'un peu plus de précisions ...

    pour faire disparaître un rond : à sa création, on mémorise son identifiant id_rond de canvasItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        # création de l'objet à attraper
        pX = randrange(5, 495)
        pY = randrange(5, 495)
        id_rond = canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green')
    puis, le moment venu, on le fait disparaître :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canevas.delete(id_rond)
    ca par contre ca devrait aller !

    à vous de jouer

  9. #49
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ce qu'il y a c'est que je ne connais aucune des deux techniques j'aurai besoin d'un peu plus de précisions ...
    Quand vous créez votre rond, vous écrivez ceci dans la fonction newgame() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        # création de l'objet à attraper
        pX = randrange(5, 495)
        pY = randrange(5, 495)
        id_rond = canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green')
    sauf que pour le moment, ni pX ni pY ne sont globales : une fois la fonction newgame() terminée, l'ordinateur supprimera ces variables car elles sont dites "locales" à la fonction, c'est-à-dire qu'elles n'existent que pour la fonction qui les a créées.

    de plus, pX et pY, ce n'est pas très parlant. il vaudrait mieux les appeler rondX et rondY.

    une fois qu'on a fait ça, on peut comparer (rondX, rondY) à (carreX, carreY) dans la fonction move().

    c'est plus clair ?

  10. #50
    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
    Quand vous créez votre rond, vous écrivez ceci dans la fonction newgame() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        # création de l'objet à attraper
        pX = randrange(5, 495)
        pY = randrange(5, 495)
        id_rond = canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green')
    sauf que pour le moment, ni pX ni pY ne sont globales : une fois la fonction newgame() terminée, l'ordinateur supprimera ces variables car elles sont dites "locales" à la fonction, c'est-à-dire qu'elles n'existent que pour la fonction qui les a créées.

    de plus, pX et pY, ce n'est pas très parlant. il vaudrait mieux les appeler rondX et rondY.

    une fois qu'on a fait ça, on peut comparer (rondX, rondY) à (carreX, carreY) dans la fonction move().

    c'est plus clair ?
    assez merci ! j'essaye de faire ca demain

  11. #51
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    assez merci ! j'essaye de faire ca demain
    bonne nuit, à demain.

  12. #52
    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
    bonne nuit, à demain.
    bonjour, j'ai commencé ca mais ca ne marche pas ...

    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
    123
    124
    125
    126
    127
    #!/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 X, Y, dep, direction
         # 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 = ''
        id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
        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 X, Y, 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
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(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
     
        # === FIXME ===
    #
    # si collision (carré, rond):
    #   supprimer rond touché
    #   générer nouveau rond aléatoire
    #   générer 2 blocs noirs aléatoires
    # fin si
     
    # 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()

  13. #53
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    bonjour, j'ai commencé ca mais ca ne marche pas ...

    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
    def newgame():#definition des aprametres du jeu    
        global x, y, dep, direction
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
     
        # création de l'objet à attraper
        pX = randrange(5, 495)
        pY = randrange(5, 495)
        id_rond=canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
     
        # création de l'obstacle
        pX = randrange(5, 495)
        pY = 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 = ''
        id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
        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 x, y, dep, direction
         # mise en mouvement
        if direction == 'gauche':
            x -= dep
        elif direction == 'droite':
            x += dep
        elif direction == 'haut':
            y -= dep              
        elif direction == 'bas':
            y += dep   
        # end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(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 y > 500:
            y = 0
        elif y < 0:
            y = 500
        # end if
        if x > 500:
            x = 0
        elif x < 0:
            x = 500
        # end if
     
        # === FIXME ===
    #
    # si collision (carré, rond):
    #   supprimer rond touché
    #   générer nouveau rond aléatoire
    #   générer 2 blocs noirs aléatoires
    # fin si
     
    # 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()
    Bonjour,

    Voyons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def newgame():#definition des aprametres du jeu    
        global x, y, dep, direction
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
     
        # création de l'objet à attraper
        pX = randrange(5, 495)
        pY = randrange(5, 495)
        id_rond=canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green')
    Je me mets à la place de l'ordinateur et qu'est-ce que je vois ? On utilise des variables rondX et rondY dans canvas.create_oval() sans les avoir initialisées avant ?

    C'est comme si je vous demandais de mettre un lanfounet dans votre cabas.

  14. #54
    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 me mets à la place de l'ordinateur et qu'est-ce que je vois ? On utilise des variables rondX et rondY dans canvas.create_oval() sans les avoir initialisées avant ?

    C'est comme si je vous demandais de mettre un lanfounet dans votre cabas.
    oui mais a combien dois-je initialiser ?

    j'ai encore 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
    123
    124
    125
    126
    127
    #!/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 X, Y, dep, direction
         # 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 = ''
        id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
        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 X, Y, 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
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(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
     
        # === FIXME ===
    #
    # si collision (carré, rond):
    #   supprimer rond touché
    #   générer nouveau rond aléatoire
    #   générer 2 blocs noirs aléatoires
    # fin si
     
    # 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()

  15. #55
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    oui mais a combien dois-je initialiser ?

    j'ai encore 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
    123
    124
    125
    126
    127
    #!/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 X, Y, dep, direction
         # 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 = ''
        id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
        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 X, Y, 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
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(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
     
        # === FIXME ===
    #
    # si collision (carré, rond):
    #   supprimer rond touché
    #   générer nouveau rond aléatoire
    #   générer 2 blocs noirs aléatoires
    # fin si
     
    # 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 quand vous lancez le script, est-ce que Python vous couine des insanités genre NameError à l'oreille ?

    En revanche, vous avez une faute ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
    Rappel (extrait de la doc Tkinter) :

    .coords(tagOrId, x0, y0, x1, y1, ..., xn, yn)

    If you pass only the tagOrId argument, returns a tuple of the coordinates of the lowest or only object specified by that argument. The number of coordinates depends on the type of object. In most cases it will be a 4-tuple (x1, y1, x2, y2) describing the bounding box of the object.

    You can move an object by passing in new coordinates.
    Faites aussi attention à vos globales partout dans votre script => l'ordinateur ne peut pas savoir qu'une variable est globale dans une fonction si vous ne le lui dites pas.

  16. #56
    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
    Et quand vous lancez le script, est-ce que Python vous couine des insanités genre NameError à l'oreille ?
    non ... j'ai ca
    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 28, in newgame
        move ()
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 55, in move
        canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
    UnboundLocalError: local variable 'carreX' referenced before assignment
    En revanche, vous avez une faute ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
    comment reconnaître x de carrex rondx et rectx si je mets juste x ?
    Faites aussi attention à vos globales partout dans votre script => l'ordinateur ne peut pas savoir qu'une variable est globale dans une fonction si vous ne le lui dites pas.
    mais j'ai mis les globales ?

  17. #57
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    non ... j'ai ca
    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 28, in newgame
        move ()
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 55, in move
        canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
    UnboundLocalError: local variable 'carreX' referenced before assignment
    Mêmes causes, mêmes effets : les globales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def move():#definitions des mouvements du carré
        global X, Y, dep, direction
    Où sont passées les déclarations de carreX, carreY en globales, ici ?

    Et X et Y : toujours d'actualité ?

    comment reconnaître x de carrex rondx et rectx si je mets juste x ?
    Non, canvas.coords() ne retourne pas un id_carre.

    Vous vouliez sans doute dire (en bas du script) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # 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')
    id_carre = canevas.create_rectangle(carreX, carreY, carreX+10, carreY+10, outline='white', fill='#C03000')
    et par conséquent (dans newgame()) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        # mise en mouvement possible du carré
        direction = ''
        #id_carre=canevas.coords(carre, carreX, carreY, carreX+10, carreY+10)
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        move ()
    D'ailleurs, en étant tâtillon, cette ligne ne sert à rien, puisqu'on va retrouver canevas.coords() dans move() à la ligne suivante.

    A la limite : drop it!

    mais j'ai mis les globales ?
    et non, justement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def newgame():#definition des aprametres du jeu
        global X, Y, dep, direction
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
    Où sont déclarés rondX, rondY, id_rond, rectX, rectY et id_rect dans global ?

    Pour moi (et pour l'ordi), ces variables sont pour l'instant locales à la fonction.

    X et Y toujours d'actualité ?

  18. #58
    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
    voila j'ai 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
    123
    124
    125
    126
    #!/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
     
        # === FIXME ===
    #
    # si collision (carré, rond):
    #   supprimer rond touché
    #   générer nouveau rond aléatoire
    #   générer 2 blocs noirs aléatoires
    # fin si
     
    # 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()

  19. #59
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    voila j'ai 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
    123
    124
    125
    126
    #!/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
     
        # === FIXME ===
    #
    # si collision (carré, rond):
    #   supprimer rond touché
    #   générer nouveau rond aléatoire
    #   générer 2 blocs noirs aléatoires
    # fin si
     
    # 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()
    Ah ? Presque :

    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')
    Qui donne :

    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 "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1489, in __call__
        return self.func(*args)
      File "./manon+snake.py", line 28, in newgame
        move ()
      File "./manon+snake.py", line 55, in move
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
    NameError: global name 'id_carre' is not defined
    Beute ouaille ?

  20. #60
    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

    Beute ouaille ?
    quoi ???

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