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

  1. #1
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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, les tuyaux ont une hauteur différente à chaque ouverture de fenêtre mais pas à chaque défilement...

    J'ai aussi regardé le code que tu m'avais envoyé la dernière fois mais je n'ai rien trouvé

    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
    """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
     
    h = randint(256,505)
    H = h-241
    h2 = randint(256,505)
    H2 = h-241
     
    # 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():
        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():
        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'interompt quand on ferme la fenêtre
    fenetre.mainloop()

  2. #2
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Ah et merci d'avance bien évidemment.
    D'ailleurs, je m'adresse à Wiztricks dans mon message mais toute aide est la bienvenue les amis

  3. #3
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    De l'aléatoire oui, mais pas comme tu as fait, car d'après ce que je comprends de ton code que l'on ne peut tester, puisqu'on n'a pas les images, c'est que le tuyau du haut et du bas se déplacent en même temps et sont sur la même coordonnée x.

    Je ne vois pas non plus pourquoi il y a autant de fonctions de déplacements, sachant que les éléments de 1er plan doivent se déplacer de la même façon, une seule fonction devrait suffire à tout faire, après bien sûr on peut répartir chaque tâche dans des fonctions annexes en fonction des types d'items à déplacer.

    Le sol devrait être une liste d'images dont la somme des largeurs devrait être un peu plus large que l'écran, ainsi, si la première image de la liste se retrouve hors écran on la déplace en fin de liste, de façon à avoir un flux continue d'images à afficher.

    Il en est de même pour les tuyaux, il faut gérer cela avec des listes, tuyaux haut et tuyaux bas n'ayant aucun liens de parentés, ils doivent être gérés indépendamment.
    Le temps ronge l'amour comme l'acide.

Discussions similaires

  1. POWER POINT : défilement aléatoire
    Par lilmod dans le forum Powerpoint
    Réponses: 0
    Dernier message: 02/03/2014, 13h14
  2. 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
  3. Défilement aléatoire sur mon PC
    Par adilou1981 dans le forum Windows XP
    Réponses: 13
    Dernier message: 01/07/2009, 18h21
  4. Défilement d'images aléatoire
    Par thovex dans le forum C++
    Réponses: 6
    Dernier message: 26/04/2007, 17h11
  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