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. #121
    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
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    #!/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, nb_rond
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        nb_rond=0 #compteur de ronds avalés
     
        # 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, nb_rond
         # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif id_rect in collisions:
            game_over()
            move.stop()
     
     
        #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 100 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
     
    def new_rect():#faire apparaitre un nouvel obstacle
         # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # end def
     
    def game_over():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini !')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+".").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Cancel', command=fenetre2.destroy).pack(side=RIGHT, padx=5, pady=5)
        #Label2(fenetre2, text="Voulez-vous creer votre propre QCM ?").pack(padx=0, pady=11)
        #Button(fenetre2, text='oui', command=).pack(side=LEFT, padx=5, pady=5)
     
     
    # 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é
    id_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()

  2. #122
    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
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    #!/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, nb_rond
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        nb_rond=0 #compteur de ronds avalés
     
        # 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, nb_rond
         # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif id_rect in collisions:
            game_over()
            move.stop()
     
     
        #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 100 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
     
    def new_rect():#faire apparaitre un nouvel obstacle
         # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # end def
     
    def game_over():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini !')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+".").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Cancel', command=fenetre2.destroy).pack(side=RIGHT, padx=5, pady=5)
        #Label2(fenetre2, text="Voulez-vous creer votre propre QCM ?").pack(padx=0, pady=11)
        #Button(fenetre2, text='oui', command=).pack(side=LEFT, padx=5, pady=5)
     
     
    # 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é
    id_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()
    Bon, alors...

    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
    def newgame():#definition des aprametres du jeu
        global rondX, rondY, rectX, rectY, carreX, carreY, dep, direction, id_rond, id_rect, id_carre, nb_rond
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        nb_rond=0 #compteur de ronds avalés
     
        # 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')
    votre code n'est pas à jour ici : je vous avais fourni autre chose, il me semble :

    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
    128
    129
    130
    131
    132
    133
    134
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
    # zone de définition des fonctions
     
    def newgame(): # definition des parametres du jeu
        global dep, direction
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
        # 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
         # 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)
            new_rond()
            new_rect()
        # 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 reboucle dans un certain délai
        fenetre.after(100, move)
    # end def
     
    def new_rect(): # faire apparaitre un nouvel obstacle
        # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        # NOTE:
        # inutile de mémoriser ici l'ID de l'obstacle:
        # si le carré joueur percute autre chose que id_rond alors
        # c'est forcément un obstacle
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond (): # faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # 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é
    id_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()
    correspondant à ce post : http://www.developpez.net/forums/d14...r/#post7821277

    essayez de tenir compte de mes modifs sinon on va perdre un temps fou à réinventer la roue à chaque fois.

  3. #123
    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
    Bon, alors...

    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
    def newgame():#definition des aprametres du jeu
        global rondX, rondY, rectX, rectY, carreX, carreY, dep, direction, id_rond, id_rect, id_carre, nb_rond
         # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        nb_rond=0 #compteur de ronds avalés
     
        # 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')
    votre code n'est pas à jour ici : je vous avais fourni autre chose, il me semble :

    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
    128
    129
    130
    131
    132
    133
    134
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
    # zone de définition des fonctions
     
    def newgame(): # definition des parametres du jeu
        global dep, direction
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
        # 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
         # 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)
            new_rond()
            new_rect()
        # 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 reboucle dans un certain délai
        fenetre.after(100, move)
    # end def
     
    def new_rect(): # faire apparaitre un nouvel obstacle
        # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        # NOTE:
        # inutile de mémoriser ici l'ID de l'obstacle:
        # si le carré joueur percute autre chose que id_rond alors
        # c'est forcément un obstacle
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond (): # faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # 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é
    id_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()
    correspondant à ce post : http://www.developpez.net/forums/d14...r/#post7821277

    essayez de tenir compte de mes modifs sinon on va perdre un temps fou à réinventer la roue à chaque fois.
    h oui voila (avec les modifs que j'ai commencé a faire )
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
     
    # zone de définition des fonctions
     
    def newgame(): # definition des parametres du jeu
        global dep, direction
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
        # 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, nb_rond
         # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif id_rect in collisions:
            game_over()
            move.stop()    
        #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 reboucle dans un certain délai
        fenetre.after(100, move)
    #end def
     
    def new_rect():#faire apparaitre un nouvel obstacle
         # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # end def
     
    def game_over():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini !')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+".").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Cancel', command=fenetre2.destroy).pack(side=RIGHT, padx=5, pady=5)
        #Label2(fenetre2, text="Voulez-vous creer votre propre QCM ?").pack(padx=0, pady=11)
        #Button(fenetre2, text='oui', command=).pack(side=LEFT, padx=5, pady=5)
     
     
    # 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é
    id_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()

  4. #124
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    h oui voila (avec les modifs que j'ai commencé a faire )
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
     
    # zone de définition des fonctions
     
    def newgame(): # definition des parametres du jeu
        global dep, direction
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
        # 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, nb_rond
         # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif id_rect in collisions:
            game_over()
            move.stop()    
        #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 reboucle dans un certain délai
        fenetre.after(100, move)
    #end def
     
    def new_rect():#faire apparaitre un nouvel obstacle
         # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # end def
     
    def game_over():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini !')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+".").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Cancel', command=fenetre2.destroy).pack(side=RIGHT, padx=5, pady=5)
        #Label2(fenetre2, text="Voulez-vous creer votre propre QCM ?").pack(padx=0, pady=11)
        #Button(fenetre2, text='oui', command=).pack(side=LEFT, padx=5, pady=5)
     
     
    # 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é
    id_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()
    Alors, dans newgame() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def newgame(): # definition des parametres du jeu
        global dep, direction
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
    il vous manque l'init de nb_rond :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def newgame(): # definition des parametres du jeu
        global dep, direction, nb_rond
        # init compteur ronds mangés
        nb_rond = 0
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
    ensuite, dans move() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif id_rect in collisions:
            game_over()
            move.stop()
        #end if
    je ne sais pas ce que vous lui voulez à cet id_rect, mais d'une part il n'existe plus et d'autre part, il est inutile ici.

    bref, après game_over(), il ne faut pas balancer n'importe quoi : certes, on ne veut pas que move() continue de s'exécuter, mais pour cela, il nous suffit de prioriser le if... elif... avec un else... final et le tour sera joué.

    corrigé :

    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
        # collision avec le rond ?
        if id_rond in collisions:
            # on mange un rond
            canevas.delete(id_rond)
            # on incrémente le compteur de ronds mangés
            nb_rond += 1
            # nouveau rond
            new_rond()
            # nouvel obstacle
            new_rect()
        # collision avec autre chose qu'un rond ?
        # ce qui implique collision avec un obstacle
        elif collisions:
            # fin de partie !
            game_over()
        # pas de collisions
        # la partie continue !
        else:
            #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 reboucle dans un certain délai
            fenetre.after(100, move)
        #end if - collisions
    #end def
    mettez à jour votre code et passons à l'étude de la fonction game_over(), voulez-vous ?

  5. #125
    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;7823098CODE

    mettez à jour votre code et passons à l'étude de la fonction game_over(), voulez-vous ?
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
     
    # zone de définition des fonctions
     
    def newgame(): # definition des parametres du jeu
        global dep, direction, nb_rond
        #compteur de ronds touchés
        nb_rond = 0
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
        # 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,id_rond, nb_rond
         # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif collisions:
            game_over()
        #acceleration du carré possible
        else :
            if dep <= 20:
               dep +=0.1
        #end if
        # 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 reboucle dans un certain délai
        fenetre.after(100, move)
    #end def
     
    def new_rect():#faire apparaitre un nouvel obstacle
         # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # end def
     
    def game_over():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini !')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+".").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Cancel', command=fenetre2.destroy).pack(side=RIGHT, padx=5, pady=5)
        #Label2(fenetre2, text="Voulez-vous creer votre propre QCM ?").pack(padx=0, pady=11)
        #Button(fenetre2, text='oui', command=).pack(side=LEFT, padx=5, pady=5)
     
     
    # 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é
    id_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()

  6. #126
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
    (snip)(snip)
     
    # on lance la boucle principale
    fenetre.mainloop()
    bouha ! je viens de faire un test => catastropheuuu ! des fenêtres partout !

    il faut vite corriger la fonction move() :

    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
    def move():#definitions des mouvements du carré
        global carreX, carreY, dep, direction, id_carre,id_rond, nb_rond
         # 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
        # 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)
        # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif len(collisions) > 1:
            return game_over()
        # end if
        # acceleration du carré possible
        if dep <= 20:
           dep += 0.1
        # on reboucle dans un certain délai
        fenetre.after(100, move)
    #end def
    c'était pas évident de trouver le bon déroulement !

    copiez / collez le code de la fonction move() ci-dessus dans votre script puis republiez votre code complet à jour, svp.

  7. #127
    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
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
     
     
     
    # zone de définition des fonctions
     
    def newgame(): # definition des parametres du jeu
        global dep, direction, nb_rond
        #compteur de ronds touchés
        nb_rond = 0
        # initialisation de dep
        dep = 3  # on démarre à 3 pixels
        # création de l'objet à attraper
        new_rond()
        # création de l'obstacle
        new_rect()
        # 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,id_rond, nb_rond
         # 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
        # 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)
        # 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)
            nb_rond += 1
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        elif len(collisions) > 1:
            return game_over()
        # end if
        # acceleration du carré possible
        if dep <= 20:
           dep += 0.1
        # on reboucle dans un certain délai
        fenetre.after(100, move)
    #end def
     
    def new_rect():#faire apparaitre un nouvel obstacle
         # création de l'obstacle
        rectX = randrange(5, 495)
        rectY = randrange(5, 495)
        canevas.create_rectangle(rectX, rectY, rectX+20, rectY+10, outline='black', fill='black')
    # end def
     
    def new_rond ():#faire apparaitre un nouveau rond
        global rondX, rondY, id_rond
        # 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')
    # end def
     
    def game_over():
        global nb_rond
        fenetre2 = Tk()
        fenetre2.title('Cest fini !')
        Label(fenetre2, text="Vous avez perdu. Vous avez mangé " + str(nb_rond)+".").pack(padx=0, pady=11)#vous avez donc maintenant +str(nb de rond+ nb bonnerep)
        Button(fenetre2, text='Cancel', command=fenetre2.destroy).pack(side=RIGHT, padx=5, pady=5)
        #Label2(fenetre2, text="Voulez-vous creer votre propre QCM ?").pack(padx=0, pady=11)
        #Button(fenetre2, text='oui', command=).pack(side=LEFT, padx=5, pady=5)
     
     
    # 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é
    id_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()
    c'est quoi len(collisions) >1 ?

  8. #128
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from random import randrange
    from Tkinter import *
    (snip)(snip)
    # on lance la boucle principale
    fenetre.mainloop()
    c'est quoi len(collisions) >1 ?
    len(...) veut dire length mais pas dans le sens longueur, plutôt dans le sens nombre d'éléments dans (...)

    donc ici, len(collisions) signifie nombre d'éléments dans la liste des collisions.

    en effet la variable collisions est en réalité une liste de tous les identifiants IDs des canvasItems qu'elle trouve avec find_overlapping().

    or, comme le carré joueur est systématiquement compris dans cette zone de détection, les collisions avec les obstacles ne sont valables que pour une liste de collisions qui contient au moins 2 éléments (le carré et l'obstacle).

    d'où le test if len(collisions) > 1 (plus d'un élément dans la liste, le carré et un obstacle... ou peut-être deux obstacles... ou trois... ou plus, quoi)

    vux comment ça marche ?

  9. #129
    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
    len(...) veut dire length mais pas dans le sens longueur, plutôt dans le sens nombre d'éléments dans (...)

    donc ici, len(collisions) signifie nombre d'éléments dans la liste des collisions.

    en effet la variable collisions est en réalité une liste de tous les identifiants IDs des canvasItems qu'elle trouve avec find_overlapping().

    or, comme le carré joueur est systématiquement compris dans cette zone de détection, les collisions avec les obstacles ne sont valables que pour une liste de collisions qui contient au moins 2 éléments (le carré et l'obstacle).

    d'où le test if len(collisions) > 1 (plus d'un élément dans la liste, le carré et un obstacle... ou peut-être deux obstacles... ou trois... ou plus, quoi)

    vux comment ça marche ?
    nikel tout pigé ! donc ca y est c'est fini ?

  10. #130
    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
    il faudrait que quand on clique sur cancel la fentre du jeu se ferme c'est possible ?

    et surtout empecher que les ronds ne se mettent pas sur les obstacles.

  11. #131
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    il faudrait que quand on clique sur cancel la fentre du jeu se ferme c'est possible ?

    et surtout empecher que les ronds ne se mettent pas sur les obstacles.
    Oui, à ce propos : vous préférez afficher un message dans une fenêtre de dialogue à part ou un message dans le canevas directement ?

    les deux sont parfaitement possibles.

    que voulez-vous faire ?

  12. #132
    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, à ce propos : vous préférez afficher un message dans une fenêtre de dialogue à part ou un message dans le canevas directement ?

    les deux sont parfaitement possibles.

    que voulez-vous faire ?
    je comprends pas votre question ?

  13. #133
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    je comprends pas votre question ?
    dans game_over(), on peut soit afficher le message "Perdu ! Vous avez mangé xxx ronds !" dans une fenêtre de dialogue à part de la fenêtre de jeu soit afficher ce message directement dans le canevas graphique du jeu.

    comme vous voulez.

    vous choisissez ?

  14. #134
    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
    dans game_over(), on peut soit afficher le message "Perdu ! Vous avez mangé xxx ronds !" dans une fenêtre de dialogue à part de la fenêtre de jeu soit afficher ce message directement dans le canevas graphique du jeu.

    comme vous voulez.

    vous choisissez ?
    je preferai qu'une nouvelle fenetre s'affiche comme on a commencé a faire

  15. #135
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    je preferai qu'une nouvelle fenetre s'affiche comme on a commencé a faire
    OK, dans ce cas, la fonction game_over() va ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def game_over():
        """ c'est fini ! """
     
        import tkMessageBox
     
        tkMessageBox.showinfo(
            "C'est fini !",
            "Perdu ! Vous avez mangé {nb} ronds !".format(nb=nb_rond),
            parent=fenetre,
        )
     
    # end def
    ça vous va comme ça ?

    pour en savoir plus sur tkMessageBox : http://infohost.nmt.edu/tcc/help/pub...essageBox.html

  16. #136
    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
    OK, dans ce cas, la fonction game_over() va ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def game_over():
        """ c'est fini ! """
     
        import tkMessageBox
     
        tkMessageBox.showinfo(
            "C'est fini !",
            "Perdu ! Vous avez mangé {nb} ronds !".format(nb=nb_rond),
            parent=fenetre,
        )
     
    # end def
    ça vous va comme ça ?

    pour en savoir plus sur tkMessageBox : http://infohost.nmt.edu/tcc/help/pub...essageBox.html
    ouiii ! j'avais deja regardé ce matin ! c'est super mais c'est quoi exactement parent ?

  17. #137
    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
    comment faire pour que la fenetre du jeu se faire quand on clique sur le bouton ok ?

  18. #138
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ouiii ! j'avais deja regardé ce matin ! c'est super mais c'est quoi exactement parent ?
    tkMessageBox(titre, texte, parent) => le parent c'est la fenêtre à laquelle la fenêtre de dialogue doit se rattacher.

    ici, la fenêtre "parent" de la fenêtre de dialogue, c'est fenetre notre fenêtre de jeu.

  19. #139
    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
    tkMessageBox(titre, texte, parent) => le parent c'est la fenêtre à laquelle la fenêtre de dialogue doit se rattacher.

    ici, la fenêtre "parent" de la fenêtre de dialogue, c'est fenetre notre fenêtre de jeu.
    okok

    et donc pour que la fenetre du jeu se ferme quand on clique sur ok pour empecher de recommencer de jouer

  20. #140
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    comment faire pour que la fenetre du jeu se faire quand on clique sur le bouton ok ?
    tout simplement comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def game_over():
        """ c'est fini ! """
     
        import tkMessageBox
     
        tkMessageBox.showinfo(
            "C'est fini !",
            "Perdu ! Vous avez mangé {nb} ronds !".format(nb=nb_rond),
            parent=fenetre,
        )
     
        fenetre.destroy()
     
    # end def
    fallait y penser !

    l'intérêt d'utiliser une fenêtre de dialogue, c'est que cette fenêtre de dialogue bloque la fenêtre parente tant qu'on n'a pas cliqué sur le bouton "OK" => du coup, le code de la fenêtre parente n'est pas exécuté tant que la fenêtre de dialogue n'a pas fini.

    simple, non ?

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