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 : 773
Taille : 7,4 Ko
Nom : background-night.png
Affichages : 742
Taille : 3,0 Ko
Nom : sol-day.png
Affichages : 1082
Taille : 7,3 Ko
Nom : sol-day.png
Affichages : 1082
Taille : 7,3 Ko
Nom : tuyau_vers_le_bas.png
Affichages : 1852
Taille : 5,8 Ko
Nom : tuyau_vers_le_haut.png
Affichages : 1361
Taille : 5,9 Ko