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 :

Défilement aléatoire en boucle


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 14
    Par défaut Défilement aléatoire en boucle
    Bonsoir ou bonjour
    Si je vous contacte aujourd'hui, c'est parce que j'ai (de nouveau) besoin d'aide pour un petit problème lié à Tkinter (et surtout à ma façon de l'utiliser )

    Pour refaire bref, j'ai réussi à faire défiler le sol pour mon jeu comme Flappy Bird grâce à toi Wiztricks et je t'en remercie énormément.
    Maintenant que le sol défile, j'ai aussi voulu le faire pour les tuyaux.
    Evidemment, j'ai réussi car j'ai appris du plus grand

    Sauf que je voudrais que la hauteur des tuyaux soit différent à chaque défilement comme le vrai jeu quoi pour rajouter de la difficulté parce des tuyaux toujours au même emplacement, c'est embêtant
    Alors, j'ai essayé de mettre en jeu de l'aléatoire, j'ai cru avoir réussi mais non, le tuyau pointant vers le haut a bien une hauteur différente à chaque défilement mais pas pour celui vers le bas, ce qui est dérangeant...

    J'ai déjà posté ce message auparavant mais j'ai modifié certaines choses et la dernière fois, je n'avais pas fourni les images donc il était assez dur de m'aider.
    Merci d'avance pour votre aide, surtout que je galère depuis pas mal de temps sur ce point
    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
    """L'interface graphique avec Tkinter.
     
    On crée une fenêtre constitué du fond du jeu et où les obstabcles/sol défilent...
     
    """
     
    # On importe Tkinter
    from tkinter import *
    # On importe le module random va nous permettre d’utiliser des fonctions générant des nombres aléatoires.
    import random
    #On importe randint qui va nous perlettre de générer un nombre aléatoire dans un intervalle donné.
    from random import randint
    #global va permettre de définir des variables globales que l'on va utiliser dans des fonctions par exemple.
    global h
     
    #height est la hauteur
    #widhth est la largeur
     
    #h est la hauteur du tuyau pointant vers le haut, plus h est grand, plus le tuyau est bas et inversement.
    #h maximum = 256
    #h minimum = 505
    #distance entre les tuyaux vaut 100 pixels
    #Les tuyaux se superposent aussi de 141 pixels à cause de leur emplacment initial
    #Donc si H est la hauteur du tuyau pointant vers le bas, on enlève 241 pixel à h
     
    # On crée une fenêtre, racine de notre interface
    fenetre = Tk()
     
    #La fonction deplacement va permettre, comme son nom l'indique, de déplacer l'objet (ici le sol)
    def deplacement():
        #On commence par associer les coordonnées de l'image à img_coords
        img_coords=canvas.coords(image_sol)
        # On associe ensuite la largeur de l'image à img_width
        img_width=sol.width()
     
    #Le chiffre 144 correspond au X de l'image et permet de le déplacer en entier (je crois)    
        if img_coords[0]+img_width >= 144:
            #canvas.move va permettre de déplacer le sol de -5 pixels en abscisse.
            canvas.move(image_sol,-5,0)
            #canvas.after va permettre de déplacer l'image toutes les 40 milisecondes.
            canvas.after (40,deplacement)
        else:
            img_coords=canvas.coords(image_sol,144,512)
            canvas.move(image_sol,-5,0)
            canvas.after (40,deplacement)
     
    def deplacement2():
        img_coords_copy=canvas.coords(image_sol2)
        img_width_copy=sol2.width()
     
    #Si le déplacement est supérieur ou égal à 432 pixels.
        if img_coords_copy[0]+img_width_copy >= 432:
            canvas.move(image_sol2,-5,0)
            canvas.after(40,deplacement2)
    #J'ai mis 434 pour X car 432 est le X de l'image afin qu'on ne le voit plus à l'écran.
        else:
            img_coords_copy=canvas.coords(image_sol2,432,512)
            canvas.move(image_sol2,-5,0)
            canvas.after(40,deplacement2)
     
    def deplacementTH():
        h = randint(256,505)
        img_coords_tuyau_haut=canvas.coords(image_tuyau_haut)
        img_width_tuyau_haut=tuyau_haut.width()
     
    #Plus le chiffre est faible, plus le tuyau se déplace vers le droite.
        if img_coords_tuyau_haut[0]+img_width_tuyau_haut >= 288-28:
            canvas.move(image_tuyau_haut,-5,0)
            canvas.after(40,deplacementTH)
        else:
            img_coords_tuyau_haut=canvas.coords(image_tuyau_haut,288+28,h)
            canvas.move(image_tuyau_haut,-5,0)
            canvas.after(40,deplacementTH)
     
    def deplacementTB():
        H = h-241
        img_coords_tuyau_bas=canvas.coords(image_tuyau_bas)
        img_width_tuyau_bas=tuyau_bas.width()
     
        if img_coords_tuyau_bas[0]+img_width_tuyau_bas >= 288-28:
            canvas.move(image_tuyau_bas,-5,0)
            canvas.after(40,deplacementTB)
        else:
            img_coords_tuyau_bas=canvas.coords(image_tuyau_bas,288+28,H)
            canvas.move(image_tuyau_bas,-5,0)
            canvas.after(40,deplacementTB)
     
    #On importe les image du jeu
    fond = PhotoImage(file="background-day.png")
    fond2 = PhotoImage(file="background-night.png")
    tuyau_haut = PhotoImage(file="tuyau_vers_le_haut.png")
    tuyau_bas = PhotoImage(file="tuyau_vers_le_bas.png")
    sol = PhotoImage(file="sol-day.png")
    sol2 = PhotoImage(file="sol-day-copy.png")
     
    #On crée une liste comprenant les deux images des fonds du jeu.
    fond=[fond,fond2]
    #On définit F qui représente le choix aléatoire entre les deux valeurs de la liste "fond" c'est-à-dire une des deux images (nuit ou jour)
    F= random.choice(fond)
    # interface racine
    #J'ai redéfinit la hauteur pour mettre 510 car le tuyau dépassait (peut-être une erreur à voir avant c'était 512)
    #J'ai redéfinit la hauteur pour mettre 286 car le sol dépassait (peut-être une erreur à voir avant c'était 288)
    canvas = Canvas(fenetre, width=286, height=510)
     
    #On insère les images dans la fenêtre.
    canvas.create_image(144,256, anchor=CENTER,image=F)
    image_tuyau_haut = canvas.create_image(288+28,h,anchor=CENTER,image=tuyau_haut)
    image_tuyau_bas = canvas.create_image(288+28,H,anchor=CENTER,image=tuyau_bas)
    image_sol = canvas.create_image(144,512, anchor=S,image=sol)
    image_sol2 = canvas.create_image(432,512, anchor=S,image=sol2)
     
    #On démarre les boucles deplacement et deplacement 2
    deplacement()
    deplacement2()
    deplacementTH()
    deplacementTB()
    # On affiche le label dans la fenêtre
    canvas.pack()
     
    # On démarre la boucle Tkinter qui s'interrompt quand on ferme la fenêtre
    fenetre.mainloop()
    Nom : background-day.png
Affichages : 779
Taille : 7,4 Ko
    Nom : background-night.png
Affichages : 748
Taille : 3,0 Ko
    Nom : sol-day.png
Affichages : 1093
Taille : 7,3 Ko
    Nom : sol-day.png
Affichages : 1093
Taille : 7,3 Ko
    Nom : tuyau_vers_le_bas.png
Affichages : 1865
Taille : 5,8 Ko
    Nom : tuyau_vers_le_haut.png
Affichages : 1367
Taille : 5,9 Ko

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Citation Envoyé par Glouber Voir le message
    Alors, j'ai essayé de mettre en jeu de l'aléatoire, j'ai cru avoir réussi mais non, le tuyau pointant vers le haut a bien une hauteur différente à chaque défilement mais pas pour celui vers le bas, ce qui est dérangeant...
    Ce qui marche pour "tuyau haut" doit marcher pareil pour "tuyau bas" et si ce n'est pas le cas, c'est que le code est différent... Donc déjà le relire, pointer les différences et se poser la question de pourquoi çà doit être différent devrait vous conduire à une solution.

    Après si vous n'y arrivez pas, il faut vous concentrer sur l'affichage et le déplacement de ces foutus tuyaux.... en écrivant juste le code qui correspond à çà et en essayant de comprendre ce qui ne va pas.

    Si vous ne vous en sortez toujours pas, vous aurez un exemple de code à poster (qui n'est pas tout votre programme (*)) et vous vous assurerez qu'il fonctionne (car celui que vous avez posté ne marche pas) - ce qui sera plus facile puisque plus court.
    (*) Je n'ai rien contre "tout" le programme, mais comme c'est un supplice à lire (on ne programme pas comme çà: c'est pas grave vous débutez par contre à relire bonjour) autant se résumer à l'essentiel.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Défilement aléatoire en boucle
    Par Glouber dans le forum Tkinter
    Réponses: 2
    Dernier message: 30/03/2019, 15h48
  2. POWER POINT : défilement aléatoire
    Par lilmod dans le forum Powerpoint
    Réponses: 0
    Dernier message: 02/03/2014, 13h14
  3. Générer nombre aléatoire dans boucle
    Par dvp_zero dans le forum Débuter
    Réponses: 2
    Dernier message: 12/07/2011, 18h21
  4. Défilement aléatoire sur mon PC
    Par adilou1981 dans le forum Windows XP
    Réponses: 13
    Dernier message: 01/07/2009, 18h21
  5. Défilement d'images aléatoires ?
    Par innova dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2006, 07h14

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