-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPartie.py
252 lines (234 loc) · 16.3 KB
/
Partie.py
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
from typing import List
from PIL import ImageTk, Image
from Constants import l, e
from Enumerations import Status, Objectif, ObjectifPac
from labyrinthe.Case import Case
from labyrinthe.Gomme import Gomme
from personnages.Fantome import *
from personnages.PacMan import PacMan
class Partie:
"""
Création d'une partie. Une partie est une instance recréable si PacMan meurt ou gagne.
Elle instancie Pacman, les Fantomes, les cases avec leurs attributs (gomme) ainsi que la "loop" de la
partie pour que cela fonctionne.
"""
def __init__(self, window, background, statusPartie):
self.window = window
self.background = background
self.statusPartie = statusPartie
self.cases = []
self.pacman = None
self.fantomes = []
self.ticks = 1
self.victoryImg = Image.open("images/Victory.jpg")
self.victoryImg = ImageTk.PhotoImage(self.victoryImg)
self.defeatImg = Image.open("images/GameOver.jpg")
self.defeatImg = ImageTk.PhotoImage(self.defeatImg)
self.suicideImg = Image.open("images/Suicide.jpg")
self.suicideImg = ImageTk.PhotoImage(self.suicideImg)
self.endscreen = None
# Labyrinthe
self.cases = []
for x in range(0, 18):
self.cases.append([])
# ligne 1
self.cases[0].append(Case(0, 0, True, False, False, True, Gomme.vide, background))
for x in range(1, 3):
self.cases[x].append(Case(x, 0, True, True, False, False, Gomme.gomme, background))
self.cases[3].append(Case(3, 0, True, False, True, False, Gomme.gomme, background))
self.cases[4].append(Case(4, 0, False, False, True, True, Gomme.vide, background))
self.cases[5].append(Case(5, 0, True, False, False, True, Gomme.gomme, background))
for x in range(6, 12):
self.cases[x].append(Case(x, 0, True, True, False, False, Gomme.gomme, background))
self.cases[12].append(Case(12, 0, True, False, True, False, Gomme.gomme, background))
self.cases[13].append(Case(13, 0, False, False, True, True, Gomme.vide, background))
self.cases[14].append(Case(14, 0, True, False, False, True, Gomme.gomme, background))
for x in range(15, 17):
self.cases[x].append(Case(x, 0, True, True, False, False, Gomme.gomme, background))
self.cases[17].append(Case(17, 0, True, False, True, False, Gomme.gomme, background))
# ligne 2
self.cases[0].append(Case(0, 1, False, False, True, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 1, True, False, False, True, Gomme.vide, background))
self.cases[2].append(Case(2, 1, True, True, True, False, Gomme.vide, background))
self.cases[3].append(Case(3, 1, False, False, True, True, Gomme.gomme, background))
self.cases[4].append(Case(4, 1, False, True, True, True, Gomme.vide, background))
self.cases[5].append(Case(5, 1, False, False, True, True, Gomme.gomme, background))
self.cases[6].append(Case(6, 1, True, True, False, True, Gomme.vide, background))
for x in range(7, 11):
self.cases[x].append(Case(x, 1, True, True, False, False, Gomme.vide, background))
self.cases[11].append(Case(11, 1, True, True, True, False, Gomme.vide, background))
self.cases[12].append(Case(12, 1, False, False, True, True, Gomme.gomme, background))
self.cases[13].append(Case(13, 1, False, True, True, True, Gomme.vide, background))
self.cases[14].append(Case(14, 1, False, False, True, True, Gomme.gomme, background))
self.cases[15].append(Case(15, 1, True, True, False, True, Gomme.vide, background))
self.cases[16].append(Case(16, 1, True, False, True, False, Gomme.vide, background))
self.cases[17].append(Case(17, 1, False, False, True, True, Gomme.gomme, background))
# ligne 3
self.cases[0].append(Case(0, 2, False, False, True, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 2, False, False, True, True, Gomme.vide, background))
self.cases[2].append(Case(2, 2, True, False, False, True, Gomme.gomme, background))
self.cases[3].append(Case(3, 2, False, True, False, False, Gomme.gomme, background))
self.cases[4].append(Case(4, 2, True, True, False, False, Gomme.gomme, background))
self.cases[5].append(Case(5, 2, False, False, False, False, Gomme.gomme, background))
for x in range(6, 12):
self.cases[x].append(Case(x, 2, True, True, False, False, Gomme.gomme, background))
self.cases[12].append(Case(12, 2, False, False, False, False, Gomme.gomme, background))
self.cases[13].append(Case(13, 2, True, True, False, False, Gomme.gomme, background))
self.cases[14].append(Case(14, 2, False, True, False, False, Gomme.gomme, background))
self.cases[15].append(Case(15, 2, True, False, True, False, Gomme.gomme, background))
self.cases[16].append(Case(16, 2, False, False, True, True, Gomme.vide, background))
self.cases[17].append(Case(17, 2, False, False, True, True, Gomme.gomme, background))
# ligne4
self.cases[0].append(Case(0, 3, False, False, True, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 3, False, True, True, True, Gomme.vide, background))
self.cases[2].append(Case(2, 3, False, False, True, True, Gomme.gomme, background))
self.cases[3].append(Case(3, 3, True, True, False, True, Gomme.vide, background))
self.cases[4].append(Case(4, 3, True, True, True, False, Gomme.vide, background))
self.cases[5].append(Case(5, 3, False, False, True, True, Gomme.gomme, background))
self.cases[6].append(Case(6, 3, True, False, False, True, Gomme.vide, background))
self.cases[7].append(Case(7, 3, True, True, True, False, Gomme.vide, background))
self.cases[8].append(Case(8, 3, False, False, False, True, Gomme.vide, background))
self.cases[9].append(Case(9, 3, False, False, True, False, Gomme.vide, background))
self.cases[10].append(Case(10, 3, True, True, False, True, Gomme.vide, background))
self.cases[11].append(Case(11, 3, True, False, True, False, Gomme.vide, background))
self.cases[12].append(Case(12, 3, False, False, True, True, Gomme.gomme, background))
self.cases[13].append(Case(13, 3, True, True, False, True, Gomme.vide, background))
self.cases[14].append(Case(14, 3, True, True, True, False, Gomme.vide, background))
self.cases[15].append(Case(15, 3, False, False, True, True, Gomme.gomme, background))
self.cases[16].append(Case(16, 3, False, True, True, True, Gomme.vide, background))
self.cases[17].append(Case(17, 3, False, False, True, True, Gomme.gomme, background))
# ligne5
self.cases[0].append(Case(0, 4, False, False, False, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 4, True, True, False, False, Gomme.gomme, background))
self.cases[2].append(Case(2, 4, False, False, False, False, Gomme.gomme, background))
for x in range(3, 5):
self.cases[x].append(Case(x, 4, True, True, False, False, Gomme.gomme, background))
self.cases[5].append(Case(5, 4, False, False, True, False, Gomme.gomme, background))
self.cases[6].append(Case(6, 4, False, False, True, True, Gomme.vide, background))
self.cases[7].append(Case(7, 4, True, True, False, True, Gomme.vide, background))
for x in range(8, 10):
self.cases[x].append(Case(x, 4, False, True, False, False, Gomme.vide, background))
self.cases[10].append(Case(10, 4, True, True, True, False, Gomme.vide, background))
self.cases[11].append(Case(11, 4, False, False, True, True, Gomme.vide, background))
self.cases[12].append(Case(12, 4, False, False, False, True, Gomme.gomme, background))
for x in range(13, 15):
self.cases[x].append(Case(x, 4, True, True, False, False, Gomme.gomme, background))
self.cases[15].append(Case(15, 4, False, False, False, False, Gomme.gomme, background))
self.cases[16].append(Case(16, 4, True, True, False, False, Gomme.gomme, background))
self.cases[17].append(Case(17, 4, False, False, True, False, Gomme.gomme, background))
# ligne6
self.cases[0].append(Case(0, 5, False, False, True, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 5, True, False, True, True, Gomme.vide, background))
self.cases[2].append(Case(2, 5, False, False, True, True, Gomme.gomme, background))
self.cases[3].append(Case(3, 5, True, True, False, True, Gomme.vide, background))
self.cases[4].append(Case(4, 5, True, True, True, False, Gomme.vide, background))
self.cases[5].append(Case(5, 5, False, False, True, True, Gomme.gomme, background))
self.cases[6].append(Case(6, 5, False, True, False, True, Gomme.vide, background))
for x in range(7, 11):
self.cases[x].append(Case(x, 5, True, True, False, False, Gomme.vide, background))
self.cases[11].append(Case(11, 5, False, True, True, False, Gomme.vide, background))
self.cases[12].append(Case(12, 5, False, False, True, True, Gomme.gomme, background))
self.cases[13].append(Case(13, 5, True, True, False, True, Gomme.vide, background))
self.cases[14].append(Case(14, 5, True, True, True, False, Gomme.vide, background))
self.cases[15].append(Case(15, 5, False, False, True, True, Gomme.gomme, background))
self.cases[16].append(Case(16, 5, True, False, True, True, Gomme.vide, background))
self.cases[17].append(Case(17, 5, False, False, True, True, Gomme.gomme, background))
# ligne 7
self.cases[0].append(Case(0, 6, False, False, True, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 6, False, False, True, True, Gomme.vide, background))
self.cases[2].append(Case(2, 6, False, True, False, True, Gomme.gomme, background))
self.cases[3].append(Case(3, 6, True, False, False, False, Gomme.gomme, background))
self.cases[4].append(Case(4, 6, True, True, False, False, Gomme.gomme, background))
self.cases[5].append(Case(5, 6, False, False, False, False, Gomme.gomme, background))
for x in range(6, 12):
self.cases[x].append(Case(x, 6, True, True, False, False, Gomme.gomme, background))
self.cases[12].append(Case(12, 6, False, False, False, False, Gomme.gomme, background))
self.cases[13].append(Case(13, 6, True, True, False, False, Gomme.gomme, background))
self.cases[14].append(Case(14, 6, True, False, False, False, Gomme.gomme, background))
self.cases[15].append(Case(15, 6, False, True, True, False, Gomme.gomme, background))
self.cases[16].append(Case(16, 6, False, False, True, True, Gomme.vide, background))
self.cases[17].append(Case(17, 6, False, False, True, True, Gomme.gomme, background))
# ligne 8
self.cases[0].append(Case(0, 7, False, False, True, True, Gomme.gomme, background))
self.cases[1].append(Case(1, 7, False, True, False, True, Gomme.vide, background))
self.cases[2].append(Case(2, 7, True, True, True, False, Gomme.vide, background))
self.cases[3].append(Case(3, 7, False, False, True, True, Gomme.gomme, background))
self.cases[4].append(Case(4, 7, True, False, True, True, Gomme.vide, background))
self.cases[5].append(Case(5, 7, False, False, True, True, Gomme.gomme, background))
self.cases[6].append(Case(6, 7, True, True, False, True, Gomme.vide, background))
for x in range(7, 11):
self.cases[x].append(Case(x, 7, True, True, False, False, Gomme.vide, background))
self.cases[11].append(Case(11, 7, True, True, True, False, Gomme.vide, background))
self.cases[12].append(Case(12, 7, False, False, True, True, Gomme.gomme, background))
self.cases[13].append(Case(13, 7, True, False, True, True, Gomme.vide, background))
self.cases[14].append(Case(14, 7, False, False, True, True, Gomme.gomme, background))
self.cases[15].append(Case(15, 7, True, True, False, True, Gomme.vide, background))
self.cases[16].append(Case(16, 7, False, True, True, False, Gomme.vide, background))
self.cases[17].append(Case(17, 7, False, False, True, True, Gomme.gomme, background))
# ligne 9
self.cases[0].append(Case(0, 8, False, True, False, True, Gomme.gomme, background))
for x in range(1, 3):
self.cases[x].append(Case(x, 8, True, True, False, False, Gomme.gomme, background))
self.cases[3].append(Case(3, 8, False, True, True, False, Gomme.gomme, background))
self.cases[4].append(Case(4, 8, False, False, True, True, Gomme.vide, background))
self.cases[5].append(Case(5, 8, False, True, False, True, Gomme.gomme, background))
for x in range(6, 12):
self.cases[x].append(Case(x, 8, True, True, False, False, Gomme.gomme, background))
self.cases[12].append(Case(12, 8, False, True, True, False, Gomme.gomme, background))
self.cases[13].append(Case(13, 8, False, False, True, True, Gomme.vide, background))
self.cases[14].append(Case(14, 8, False, True, False, True, Gomme.gomme, background))
for x in range(15, 17):
self.cases[x].append(Case(x, 8, True, True, False, False, Gomme.gomme, background))
self.cases[17].append(Case(17, 8, False, True, True, False, Gomme.superGomme, background))
self.ticks = 1
self.fblackboard = FBlackboard()
self.fantomes = [Fantome(self.background, self.cases, self.fblackboard, "images/fantome.jpg", "blinky"), Fantome(self.background, self.cases, self.fblackboard,"images/Inky.jpg", "inky"), Fantome(self.background, self.cases, self.fblackboard, "images/Clyde.jpg", "clyde"), Fantome(self.background, self.cases, self.fblackboard, "images/Pinky.jpg", "pinky")]
self.pacman = PacMan(self.background, self.statusPartie, self.cases, self.fantomes)
for i in range (len(self.fantomes)):
self.fantomes[i].pacman = self.pacman
def clear(self):
self.background.delete("all")
self = self.__init__(self.window, self.background, self.statusPartie)
def motion(self):
self.pacman.bouger()
for f in self.fantomes:
if self.pacman.ticks != 0:
f.objectif = Objectif.fuir
fantomeImg = Image.open("images/voilabis.jpg").resize((int(l / 2), int(l / 2)), resample=0)
fantomeImg = ImageTk.PhotoImage(fantomeImg)
f.image = fantomeImg
f.sprite = f.background.create_image(f.x * l + (3 * e), f.y * l + (3 * e), image=f.image)
if self.pacman.x == f.x and self.pacman.y == f.y:
self.pacman.ticks = 0
f.mourir()
elif f.objectif == Objectif.fuir:
self.pacman.objectif = ObjectifPac.chercher
f.objectif = Objectif.chercher
fantomeImg = Image.open(f.img).resize((int(l / 2), int(l / 2)), resample=0)
fantomeImg = ImageTk.PhotoImage(fantomeImg)
f.image = fantomeImg
f.sprite = f.background.create_image(f.x * l + (3 * e), f.y * l + (3 * e), image=f.image)
f.bouger()
self.ticks += 1
self.pacman.hasMoved = False
if self.pacman.ticks != 0:
self.pacman.ticks -= 1
if self.statusPartie.get() in [Status.pause.value, Status.perdu.value, Status.gagne.value, Status.suicide.value]:
if self.statusPartie.get() == Status.gagne.value:
self.endscreen = self.background.create_image(0, 0, image=self.victoryImg, anchor="nw")
elif self.statusPartie.get() == Status.perdu.value:
self.endscreen = self.background.create_image(0, 0, image=self.defeatImg, anchor="nw")
elif self.statusPartie.get() == Status.suicide.value:
self.endscreen = self.background.create_image(0, 0, image=self.suicideImg, anchor="nw")
return False
self.window.after(500, self.motion)
def start(self, event):
if self.statusPartie.get() == Status.pause.value:
self.statusPartie.set(Status.enCours.value)
self.motion()
elif self.statusPartie.get() == Status.enCours.value:
self.statusPartie.set(Status.pause.value)
else:
self.statusPartie.set(Status.pause.value)
self.clear()
print(self.statusPartie.get())