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

un jeu en tkinter

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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)

Édité par Nadwaso

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

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.

+1 -0
Staff

Cette réponse a aidé l'auteur du sujet

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 !

+1 -0
Auteur du sujet

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

Édité par Nadwaso

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

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.

+1 -0
Auteur du sujet

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

Édité par Nadwaso

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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