Bonjour je reprends python après 5 ans d'arrêt et je n'avais codé que des petits scripts de traitement de fichier. Pour m'attaquer aux classes j'ai décidé de m'attaquer à un logiciel novateur jamais encore porté un jeu de chistera............rien à voir avec un vulgaire pong...non,non rien à voir..
J'ai un peu galéré, pas tout compris (surtout pas le rôle de self) mais le projet a avancé... la balle rebondi sur le fronton, la chistera se déplace sans soucis...sauf que...
j'en arrive à la collision et la je me rend compte que passer une variable d'une classe à une autre n'est pas facile..pourtant à un moment ma balle doit bien savoir ou est ma chistera pour savoir si elle doit rebondir dessus. Après 200000 essais j'ai tenté de copier la solution d'un pong sur lequel je me base mais ca ne fonctionne pas...
Si une bonne âme pouvais me dire comment passer une information d'une classe à une autre mais aussi pourquoi mon code ne fonctionne pas en l'état..
merci..
voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Traceback (most recent call last): File "peloteBasque.py", line 95, in <module> app = Fronton() File "peloteBasque.py", line 26, in __init__ self.pel=Pelo(self.raq) TypeError: object() takes no parameters
et voici le code à peine retouché sur lequel je me base
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 #!/usr/bin/python3 # -*- coding: UTF-8 -*- from tkinter import * class Fronton(Tk): '''Application principale''' def __init__(self): '''constructeur''' self.fen = Tk() self.fen.title('Chistera') self.can=Canvas(self.fen, width=600, height=600, bg="black") self.can.grid(column=0,row=1,sticky="SW",columnspan=5) self.bou_action = Button(self.fen) self.bou_action.config(text='Nouvelle partie', command=self.action) self.bou_action.grid(column=0,row=0,sticky="NW") self.bou_quitter = Button(self.fen) self.bou_quitter.config(text='Quitter', command=self.fen.destroy) self.bou_quitter.grid(column=4,row=0,sticky="NE") self.raq=Chis() self.raq.rect(self.can) self.pel=Pelo(self.raq) self.pel.rond(self.can) self.pel.move() def run(self): self.fen.mainloop() def action(self): self.lab = Label(self.fen) self.lab.config(text='Bravo!!!') class Chis() : """rien""" def rect(self,canvas): self.x1,self.y1,self.x2,self.y2=20,590,70,580 self.canvas=canvas self.rect1=self.canvas.create_rectangle(self.x1,self.y1,self.x2,self.y2,fill="white") canvas.bind_all("<Left>",self.mouv_left) canvas.bind_all("<Right>", self.mouv_right) def mouv_left(self, event) : """mouvement raquette""" if (self.x1>11) : self.x1,self.x2=self.x1-10,self.x2-10 self.canvas.coords(self.rect1,self.x1,self.y1,self.x2,self.y2) def mouv_right(self, event) : """mouvement raquette""" if (self.x2<589) : self.x1,self.x2=self.x1+10,self.x2+10 self.canvas.coords(self.rect1,self.x1,self.y1,self.x2,self.y2) class Pelo() : def _init_(self, chis): self.chis=chis def rond(self,canvas): self.x1,self.y1,self.x2,self.y2=0,0,10,10 self.canvas=canvas self.rond1=self.canvas.create_oval(self.x1,self.y1,self.x2,self.y2,fill="white") def move(self) : if (self.y2 > 595) : self.dy=(-7) elif (self.y1 < 5): self.dy=7 if (self.x1<5): self.dx=7 elif (self.x2 > 595) : self.dx=(-7) if (582<self.y2<590 and self.chis.x1<self.x2<self.chis.x2) : self.dy=(-7) self.x1=self.x1+self.dx self.x2=self.x2+self.dx self.y1=self.y1+self.dy self.y2=self.y2+self.dy self.canvas.coords(self.rond1,self.x1,self.y1,self.x2,self.y2) self.canvas.after(100,self.move) if __name__ == '__main__': app = Fronton() app.run()
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
126
127
128
129
130
131
132 #!/usr/bin/python # -*- coding: UTF-8 -*- from tkinter import * from random import randint class Fenetre(Tk): def __init__(self, width=600, height=400): Tk.__init__(self) self.flag = 0 self.quit= Button(self,text="Quit Game",command=self.destroy) self.quit.grid(column=4,row=0,sticky="NE") self.new= Button(self,text="New Game",command=self.new_game) self.new.grid(column=0,row=0,sticky="NW") self.can = Canvas(self,width=width,height=height,bg="black") self.can.grid(column=0,row=1,sticky="SW",columnspan=5) def new_game(self): if self.flag == 0 : self.flag=1 self.pads = Pad(self.can,self.flag) self.ball = Ball(self.can,self.pads,self.flag) class Pad: def __init__(self,canvas,flag): self.canvas = canvas self.flag = flag self.height = canvas.winfo_height() self.width = canvas.winfo_width() self.x1,self.y1 = 10,self.height/2-30 self.x2,self.y2 = self.width-25,self.height/2-30 self.Pad1 = canvas.create_rectangle(self.x1,self.y1,self.x1+15,self.y1+60,fill="white") self.Pad2 = canvas.create_rectangle(self.x2,self.y2,self.x2+15,self.y2+60,fill="white") canvas.bind_all("<Up>",self.mouv_up) canvas.bind_all("<Down>", self.mouv_down) self.dy2 = 25 self.ia() def mouv_up(self,event): if self.y1>5 : self.y1=self.y1-10 self.canvas.coords(self.Pad1,self.x1,self.y1,self.x1+15,self.y1+60) def mouv_down(self,event): if self.y1+60<(self.height-5): self.y1=self.y1+10 self.canvas.coords(self.Pad1,self.x1,self.y1,self.x1+15,self.y1+60) def ia (self): self.y2=self.y2 + self.dy2 if self.y2+60 > self.height-10 : self.dy2=-50 if self.y2 < 5 : self.dy2=50 self.canvas.coords(self.Pad2,self.x2,self.y2,self.x2+15,self.y2+60) if self.flag > 0: self.canvas.after(70,self.ia) class Ball: def __init__(self,canvas,pad,flag): self.canvas = canvas self.pad = pad self.height = canvas.winfo_height() self.width = canvas.winfo_width() self.flag = flag self.x1,self.y1 = self.width/2,self.height/2 self.dx,self.dy = 30,30 self.Ball = canvas.create_oval(self.x1, self.y1, self.x1+25, self.y1+25, width=2, fill='white') self.pointA, self.pointB = 0,0 self.ready() def ready(self): self.starter=0 self.score= Label(app,text="%d : %d" % (self.pointA,self.pointB), bg="black",fg="white") self.score.grid(column =2,row=0,sticky="S") self.x1,self.y1 = self.height/2,self.width/2 app.titre = Label(app,text="PRESS ANY KEY TO START", bg="black",fg="white") app.titre.grid(column =2,row=2,sticky="S") self.canvas.bind_all("<Key>",self.start) def start(self,event): self.starter=1 self.move() def move(self): if self.starter==1: self.x1, self.y1 = self.x1 +self.dx, self.y1 + self.dy if self.y1 >self.height-26: self.dx, self.dy = self.dx, -20 if self.y1 <2: self.dx, self.dy = self.dx, 20 if self.x1 < self.pad.x1+20: if self.pad.y1 < self.y1 < self.pad.y1+60: self.dx, self.dy = 20, self.dy if self.x1+30 > self.pad.x2-1: if self.pad.y2<self.y1+12.5<self.pad.y2+60: self.dx, self.dy = -20, self.dy if self.x1 < 0: self.starter = 0 self.pointB = self.pointB+1 self.ready() if self.x1+25 > self.width: self.starter=0 self.pointA = self.pointA+1 self.ready() self.canvas.coords(self.Ball,self.x1,self.y1,self.x1+30,self.y1+30) if self.flag > 0: self.canvas.after(70,self.move) if __name__ == "__main__": app = Fenetre() app.mainloop()
Partager