Je n'ai pas compris quelque chose de complétement logique

un jeu en tkinter

Le problème exposé dans ce sujet a été résolu.

Voilà je code un mini-jeu tk avec Python à l'aide d'un bouquin. J'ai un problème idiot, je comprends tout au code, tout ! Mais je ne comprends pas comment la balle change d'angle dans le jeu ? Une âme charitable pour m'aiguiller ?

 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
from tkinter import *
import random
import time

#On crée la classe Balle
class Balle:
    def __init__(self,canvas,couleur):
        self.canvas = canvas
        self.id = canvas.create_oval(10,10,25,25,fill=couleur)#Notre balle est crée
        self.canvas.move(self.id,245,100)
        departs = [-3,-2,-1,1,2,3]
        random.shuffle(departs)
        self.x = departs[0]
        self.y = -3
        self.hauteur_canevas = 400
        self.largeur_canevas = 500
    def dessiner(self):
        self.canvas.move(self.id,self.x,self.y)
        pos = self.canvas.coords(self.id)
        if pos[0]<=0:
            self.x =3 
        if pos[2]>=self.largeur_canevas:
            self.x = -3
        if pos[1]<=0:
            self.y = 3  
        if pos[3]>= self.hauteur_canevas:
            self.y = -3 

tk = Tk()
tk.title("Jeu")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)

canvas = Canvas(tk, width =500,height=400, bd=0, highlightthickness=0)
canvas.pack()
balle = Balle(canvas,'red')


tk.update()

while 1 :
    balle.dessiner()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)
+0 -0

move est une fonction qui déplace l'objet d'autant qu'on lui donne en argument.

De base elle fait avancer de 3 et monter de 3.

Mais à un moment tu arrives à dépasser (à droite) la longueur du canvas ou bien à être trop haut. Alors il change la manière de faire déplacer la balle.

Maintenant que tu sais en gros ce que ça fait, à toit de deviner la figure qui est ainsi créée.

Ce qu'il faut comprendre c'est que self.x et self.y devraient plutôt s'appeler self.delta_x et self.delta_y puisqu'ils représentent de combien la balle est déplacé à chaque itération.

Sinon, comment comprend tu les lignes 20 à 27 ? C'est là que tout se passe !

Merci à tous,

J'ai compris les lignes 20 à 27, comment elle se déplace, comment elle ne sort pas du canvas,etc. Ce que je n'ai pas compris, et qui peut paraître bête, c'est comment la balle change d'angle. Si quelqu'un pourrait m'expliquer.

Edit : c'est ça qui m'embête en particulier :

1
2
3
4
departs = [-3,-2,-1,1,2,3]
        random.shuffle(departs)
        self.x = departs[0]
        self.y = -3

Merci

+0 -0

Le shuffle n'est fait qu'au début du programme. C'est la vitesse initial. Ce n'est pas ça qui change l'angle sur les bords mais les lignes que je t'ai indiqué juste avant.

Je pense que tu les à mal comprise c'est pourquoi je te conseil de nous expliquer comment tu les à compris.

Ligne 20 : On crée une fontion dessiner()

Ligne 21 : On appelle la fonction move au canvas, on lui passe le paramètre de la balle, puis self.x et self.y.

Ligne 22: là on met dans une variable la position x1 y1 x2 et y2 de la balle

ligne 23 : Si la balle touche le haut de l'écran et bah on arrête de soustraire 3 à la position et on lui dit d'avancer de 3

Pour les lignes c'est la même chose mais selon leur côte (pas du tout clair, non ?)

Edit : En regardant le programme exécuté, et bien j'ai compris en me basant sur le quadrillage d'artragis, même si ça reste vague 2eme edit: j'ai fait des schemas, j'en déduit qu'il faut que j'améliore ma logique ou ma concentration, je met en resolu.

Merci à tous

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte