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. #81
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

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

    Pas facile ces histoires de variables.
    En plus les noms "rond" et "carre" sont bien plus que "global", ce sont aussi des figures affichées à l'écran. Des figures avec lesquelles l'utilisateur "joue".

    Malaise! Ils sont construits par canvas.create_rectangle et canvas.create_oval. Les .create_machin retournent un id qui permettra de leur appliquer "move", "delete". Les stocker dans des variables globales nommée "id_rond", "id_carre" est le début d'une idée qui fonctionne à condition de se rappeler de préfixer "rond" et "carre" par "id_".

    Pour ces trucs elle est particulière car "rond" et "carre" se voient, ce sont de vrais objets.
    id_rond et id_carre ne sont que représentation de ces objets là côté programme Python
    C'est une table de correspondance.

    Un des intérêts de la POO est de simplifier cette correspondance. Mais gardons la POO pour plus tard.
    TCL/TK (et par suite tkinter) apportent une solution primitive - un truc d'avant la POO -.
    La possibilité de donner un nom aux figures, aux widgets,...

    On peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.create_rectangle(carreX, carreY, ..., tag='carre')
    On dit à Tk: "cette figure là est importante, je veux pouvoir l'utiliser en lui donnant un nom à moi".
    Heu?!? En fait on ne dit rien du tout: .create_machin retournera toujours son "id" mais tag='carre' est une astuce qui nous permet de se passer de stocker l'identifiant du "carre" dans une variable id_carre. Plus de variable "id_carre" et plus de correspondance ni problème côté variable "global" ou pas.

    Le carré correspond à la figure appelée "carre" et on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    canvas.move('carre', dx, dy)
    canvas.delete('carre')
    çà va marcher et la gestion de la correspondance où s'inquiéter de savoir si ce doit être "global" ou pas ne sont plus des soucis. tkinter vous aide a exprimer "cet objet là" plus simplement.

    Pourquoi se compliquer la vie si on peut faire simple ?

    - W
    PS: Honnêtement, en regardant les soucis des posts des ISN, il y a un problème. Ils se lancent dans des constructions parfois compliqué sans avoir assimilé nombre de concepts de base.
    Soit l'enseignement est défaillant, soit ces élèves là n'ont pas passé assez de temps à la console pour assimiler les cours, soit les projets dans lesquels on les laisse s'embarquer sont trop compliqués.
    Et vu la complexité variable des différents projets, j'ai plutôt l'impression que les lycéens proposent et que les enseignants n'ont pas la possibilité de dire "plus simple".
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  2. #82
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ok tres bien mais c'est quoi d ? et pourquoi dep//4 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = dep//4 = int(dep/4) # division entière de dep par 4
    c'est une variable locale (temporaire) que je crée pour éviter de multiplier les calculs dans canevas.find_overlapping()

    cette variable d me permet d'agrandir la zone de détection de collision du carré joueur avec le rond et les obstacles en fonction du coef d'accélération dep : plus on se déplace vite et plus la zone de détection s'élargit pour éviter de "louper" une collision à cause d'un carré joueur qui se déplacerait trop vite.

    en termes techniques on appelle d une variable de réajustement / de correction.

  3. #83
    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 wiztricks Voir le message
    Salut,

    Pas facile ces histoires de variables.
    En plus les noms "rond" et "carre" sont bien plus que "global", ce sont aussi des figures affichées à l'écran. Des figures avec lesquelles l'utilisateur "joue".

    Malaise! Ils sont construits par canvas.create_rectangle et canvas.create_oval. Les .create_machin retournent un id qui permettra de leur appliquer "move", "delete". Les stocker dans des variables globales nommée "id_rond", "id_carre" est le début d'une idée qui fonctionne à condition de se rappeler de préfixer "rond" et "carre" par "id_".

    Pour ces trucs elle est particulière car "rond" et "carre" se voient, ce sont de vrais objets.
    id_rond et id_carre ne sont que représentation de ces objets là côté programme Python
    C'est une table de correspondance.

    Un des intérêts de la POO est de simplifier cette correspondance. Mais gardons la POO pour plus tard.
    TCL/TK (et par suite tkinter) apportent une solution primitive - un truc d'avant la POO -.
    La possibilité de donner un nom aux figures, aux widgets,...

    On peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.create_rectangle(carreX, carreY, ..., tag='carre')
    On dit à Tk: "cette figure là est importante, je veux pouvoir l'utiliser en lui donnant un nom à moi".
    Heu?!? En fait on ne dit rien du tout: .create_machin retournera toujours son "id" mais tag='carre' est une astuce qui nous permet de se passer de stocker l'identifiant du "carre" dans une variable id_carre. Plus de variable "id_carre" et plus de correspondance ni problème côté variable "global" ou pas.

    Le carré correspond à la figure appelée "carre" et on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    canvas.move('carre', dx, dy)
    canvas.delete('carre')
    çà va marcher et la gestion de la correspondance où s'inquiéter de savoir si ce doit être "global" ou pas ne sont plus des soucis. tkinter vous aide a exprimer "cet objet là" plus simplement.

    Pourquoi se compliquer la vie si on peut faire simple ?

    - W
    PS: Honnêtement, en regardant les soucis des posts des ISN, il y a un problème. Ils se lancent dans des constructions parfois compliqué sans avoir assimilé nombre de concepts de base.
    Soit l'enseignement est défaillant, soit ces élèves là n'ont pas passé assez de temps à la console pour assimiler les cours, soit les projets dans lesquels on les laisse s'embarquer sont trop compliqués.
    Et vu la complexité variable des différents projets, j'ai plutôt l'impression que les lycéens proposent et que les enseignants n'ont pas la possibilité de dire "plus simple".
    concrètement je n'ai pas compris grand chose de tous ce que vous avez dit mais je vais repondre a votre ps pour que vous puissiez comprendre:
    c'est en effet le premiere année que nous faisons iSN au lycée. Nous n'avons en effet que 2h par semaine de cours ce qui est tres peu pour le travail que represente l'informatique et il est vrai que nos professeur nous on donnés que les bases tres legeres du genre print if for ce qui ne nous aide pas non plus et comme ce n'est pas la matiere la plus importante chez nous nous devons en priorité travailler les matières scientifiques. mais je passe beaucoup de temps sur mes programmes qui ne sont pas si durs que ca et j'apprends beaucoup plus vite sur les forum avec les techniques de tarball69 qui ne me donne pas les reponses mais qui m'apprends a ecrire et raisonner pour que ca devienne de plus en plus automatique pour moi. j'espere avoir repondu a vos questions. bonne soirée.

  4. #84
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = dep//4 = int(dep/4) # division entière de dep par 4
    c'est une variable locale (temporaire) que je crée pour éviter de multiplier les calculs dans canevas.find_overlapping()

    cette variable d me permet d'agrandir la zone de détection de collision du carré joueur avec le rond et les obstacles en fonction du coef d'accélération dep : plus on se déplace vite et plus la zone de détection s'élargit pour éviter de "louper" une collision à cause d'un carré joueur qui se déplacerait trop vite.

    en termes techniques on appelle d une variable de réajustement / de correction.
    d'accord merci beaucoup je prefere comprendre que de copier bêtement et de ne pas savoir reutiliser cette variable

  5. #85
    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
    voial j'ai fais ca pour créer un nouveau rond et une autre rectangle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            canevas.create_oval(id_rond)
            #nouvel_obstacle()
            canevas.create_rectangle(id_rect)
    mais j'ai ca ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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:\Python27\lib\lib-tk\Tkinter.py", line 531, in callit
        func(*args)
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 57, in move
        canevas.create_oval(id_rond)
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 2266, in create_oval
        return self._create('oval', args, kw)
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 2251, in _create
        *(args + self._options(cnf, kw))))
    TclError: wrong # coordinates: expected 0 or 4, got 1

  6. #86
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    voial j'ai fais ca pour créer un nouveau rond et une autre rectangle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            canevas.create_oval(id_rond)
            #nouvel_obstacle()
            canevas.create_rectangle(id_rect)
    mais j'ai ca ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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:\Python27\lib\lib-tk\Tkinter.py", line 531, in callit
        func(*args)
      File "C:\Users\Manon\Documents\Programme Python\snake.py", line 57, in move
        canevas.create_oval(id_rond)
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 2266, in create_oval
        return self._create('oval', args, kw)
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 2251, in _create
        *(args + self._options(cnf, kw))))
    TclError: wrong # coordinates: expected 0 or 4, got 1
    c'est normal.

    doc Tkinter :

    http://infohost.nmt.edu/tcc/help/pub...eate_oval.html

    http://infohost.nmt.edu/tcc/help/pub...rectangle.html

    attention à ne pas confondre vitesse et précipitation.

    de plus, je vous avais discrètement suggéré de recourir à des fonctions() si vous regardez bien.

    en fait, j'aurais préféré que vous conserviez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if id_rond in collisions:
        canevas.delete(id_rond)
        nouveau_rond()
        nouvel_obstacle()
    # end if
    puis que vous créiez un peu plus loin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def nouveau_rond ():
        # votre code ici (j'ai une bonne raison de vous faire faire ça)
        # vous verrez ensuite pourquoi ;-)
    # end def
     
    def nouvel_obstacle ():
        # votre code ici (j'ai une bonne raison de vous faire faire ça)
        # vous verrez ensuite pourquoi ;-)
    # end def
    see what I mean?

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 183
    Par défaut
    donc je fais ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
    et apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def new_rond():
    #je remplis avec les liens donnés ?
    def new_rect ()
    #idem ?

  8. #88
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    donc je fais ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
    et apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def new_rond():
    #je remplis avec les liens donnés ?
    def new_rect ()
    #idem ?
    oui, après vous créez un rond avec canvas.create_oval() comme vous l'avez (déjà) fait dans la fonction newgame(), de même que vous créez un rectangle obstacle supplémentaire comme vous l'avez (déjà) fait dans la fonction newgame().

    c'est kif-kif la bourrique, ce code.

    il y aura juste un léger moment suspendu où (j'espère que) vous vous poserez la question : hey ? mais si je l'ai (déjà) écrit dans newgame() et que je dois le réécrire dans mes nouvelles fonctions, peut-être serait-il plus simple de déplacer mon code écrit dans newgame() vers mes nouvelles fonctions puis d'appeler mes nouvelles fonctions dans newgame() aussi ?

    non ?

    ça s'appelle la méthode de programmation DRY (Don't Repeat Yourself).

  9. #89
    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, après vous créez un rond avec canvas.create_oval() comme vous l'avez (déjà) fait dans la fonction newgame(), de même que vous créez un rectangle obstacle supplémentaire comme vous l'avez (déjà) fait dans la fonction newgame().

    c'est kif-kif la bourrique, ce code.

    il y aura juste un léger moment suspendu où (j'espère que) vous vous poserez la question : hey ? mais si je l'ai (déjà) écrit dans newgame() et que je dois le réécrire dans mes nouvelles fonctions, peut-être serait-il plus simple de déplacer mon code écrit dans newgame() vers mes nouvelles fonctions puis d'appeler mes nouvelles fonctions dans newgame() aussi ?

    non ?

    ça s'appelle la méthode de programmation DRY (Don't Repeat Yourself).
    oui justelent j'avais deja commencé a faire ca or j'avais ecris apre id_rond parce que dans newgame id_rond=canevas.create_oval() sauf que ca marche pas donc comment faire ?

  10. #90
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    oui justelent j'avais deja commencé a faire ca or j'avais ecris apre id_rond parce que dans newgame id_rond=canevas.create_oval() sauf que ca marche pas donc comment faire ?
    vous pouvez republier le dernier code en date que je voie où vous en êtes réellement, svp ?

  11. #91
    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
    vous pouvez republier le dernier code en date que je voie où vous en êtes réellement, svp ?
    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 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
     
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    # directions
    def left (event):#mouvement vers la gauche
        global direction
        direction = 'gauche'
     
    # end def
    def right (event):#mouvement vers la droite
        global direction
        direction = 'droite'
     
    # end def
    def up (event):#mouvement vers le haut
        global direction
        direction = 'haut'
     
    # end def
    def down (event):#mouvement vers le bas
        global direction
        direction = 'bas'
     
    # end def 
     
     
     
    # création de l'interface graphique 
    fenetre = Tk()
    fenetre.title('Jeu Final')
     
    # canevas graphique
    canevas = Canvas(fenetre, width=500, height=500, bg='#046380')
    canevas.pack(side=TOP, padx=5, pady=5)
     
    # init coordonnées du carré
    carreX, carreY = (235, 250)
     
    # dessin du carré
    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()

  12. #92
    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
    #!/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
     
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    # directions
    def left (event):#mouvement vers la gauche
        global direction
        direction = 'gauche'
     
    # end def
    def right (event):#mouvement vers la droite
        global direction
        direction = 'droite'
     
    # end def
    def up (event):#mouvement vers le haut
        global direction
        direction = 'haut'
     
    # end def
    def down (event):#mouvement vers le bas
        global direction
        direction = 'bas'
     
    # end def 
     
     
     
    # création de l'interface graphique 
    fenetre = Tk()
    fenetre.title('Jeu Final')
     
    # canevas graphique
    canevas = Canvas(fenetre, width=500, height=500, bg='#046380')
    canevas.pack(side=TOP, padx=5, pady=5)
     
    # init coordonnées du carré
    carreX, carreY = (235, 250)
     
    # dessin du carré
    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()
    ils sont où def new_rond() et def new_rect() ?

  13. #93
    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
    ils sont où def new_rond() et def new_rect() ?
    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
    #!/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
     
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    def new_carre():#faire apparaitre un nouveau rond
     
    def new_rond ():#faire apparaitre un nouvel obstacle
     
    # 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()

  14. #94
    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
    #!/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
     
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    def new_carre():#faire apparaitre un nouveau rond
     
    def new_rond ():#faire apparaitre un nouvel obstacle
     
    # 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()
    waaaw! ça sent le surmenage, ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def new_carre():#faire apparaitre un nouveau rond
     
    def new_rond ():#faire apparaitre un nouvel obstacle
    ce serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def new_rect (): # faire apparaitre un nouvel obstacle
        pass # en attendant
    # end def
     
    def new_rond (): # faire apparaitre un nouveau rond
        pass # en attendant
    # end def
    vous voulez faire une pause ?

  15. #95
    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
    waaaw! ça sent le surmenage, ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def new_carre():#faire apparaitre un nouveau rond
     
    def new_rond ():#faire apparaitre un nouvel obstacle
    ce serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def new_rect (): # faire apparaitre un nouvel obstacle
        pass # en attendant
    # end def
     
    def new_rond (): # faire apparaitre un nouveau rond
        pass # en attendant
    # end def
    vous voulez faire une pause ?
    Non non pas du tout je ne le savais juste pas

  16. #96
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    Non non pas du tout je ne le savais juste pas
    non mais, manon, regardez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def new_carre():#faire apparaitre un nouveau rond
    new_carre (en fait new_rect) et ensuite vous dites "faire apparaitre un nouveau rond" ?

    vous êtes sûre que ça va ?

  17. #97
    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
    non mais, manon, regardez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def new_carre():#faire apparaitre un nouveau rond
    new_carre (en fait new_rect) et ensuite vous dites "faire apparaitre un nouveau rond" ?

    vous êtes sûre que ça va ?
    ah oui mais ca je l'avais deja modifié je parlais de pass

  18. #98
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par man0n Voir le message
    ah oui mais ca je l'avais deja modifié je parlais de pass
    ok, donc code à jour (publier ici) ?

  19. #99
    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, donc code à jour (publier ici) ?
    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
    #!/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
     
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    def new_rect():#faire apparaitre un nouvel obstacle
        pass
     
    def new_rond ():#faire apparaitre un nouveau rond
        pass
     
    # 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()

  20. #100
    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
    #!/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
     
        # détection de collisions
        d = dep//4
        collisions = canevas.find_overlapping(carreX-d, carreY-d, carreX+10+d, carreY+10+d)
        # collision avec le rond ?
        if id_rond in collisions:
            canevas.delete(id_rond)
            #nouveau_rond()
            new_rond()
            #nouvel_obstacle()
            new_rect()
        #end if
     
        #acceleration du carré possible
        if dep <= 20:
            dep +=0.1
        # déplacement du carré
        canevas.coords(id_carre, carreX, carreY, carreX+10, carreY+10)
        # on reprend le prochain pas dans 700 ms
        fenetre.after(100, move)
     
        # Si sortie d'un côté, entrée de l'autre côté
        if carreY > 500:
            carreY = 0
        elif carreY < 0:
            carreY = 500
        # end if
        if carreX > 500:
            carreX = 0
        elif carreX < 0:
            carreX = 500
        # end if
     
        if (carreX, carreY) == (rondX, rondY):
            canevas.delete(id_carre)
    # end def
     
    def new_rect():#faire apparaitre un nouvel obstacle
        pass
     
    def new_rond ():#faire apparaitre un nouveau rond
        pass
     
    # 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, voilà votre code remis d'aplomb (vous pouvez faire 'sélectionner tout' > copier > coller dans votre fichier script pour aller plus vite, c'est votre code avec juste qqs retouches) :

    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()
    Allez, il nous reste encore la détection de collision avec les obstacles et la fonction game_over().

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