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
|
ADJACENTS = ((0, -1), (-1, -1), (-1, 0), (-1, 1),
(0, 1), (1, 1), (1, 0), (1, -1))
...
def on_user_click(self, cell):
# cell est la cellule que nous examinons, cet objet possède, divers
# attributs
self.check_current(cell)
self.check_stack()
self.update_infos()
def check_current(self, curr):
# On examine la cellule courante et son attribut value
if curr.value == 10:
# La cellule est minée
curr.show_value()
self.main.game_over()
else:
self.set_visible(curr)
def check_stack(self):
# On examine la pile
while self.stack:
# Tant que la pile n'est pas vide, on en extrait le premier objet
btn = self.stack.pop(0)
self.get_neighbourhood(btn)
def get_neighbourhood(self, square):
# On vérifie le voisinnage d'une cellule, ici l'argument square,
# les cellules ont les arguments posx et posy qui sont simplement
# les coordonnées horizontale et verticale
pos = (square.posx, square.posy)
for adj in ADJACENTS:
# La constante ADJACENTS représente les huit décalage x et y des
# huit voisines d'une cellule
cell = self.get_neighbour(pos, adj)
if not cell or cell.value > 8 or cell.state in ['show', 'flag']:
# Out of gameboard (False), mined (10) or is already open
continue
self.set_visible(cell)
def get_neighbour(self, pos, offset):
# On examine chaque voisine, pos est la position (x, y) de la cellule
# examinée et offset le décalage de la voisine
x, y = pos[0] + offset[0], pos[1] + offset[1]
# self.limits est un tuple contenant les limites exterieures de la
# grille, donc ((-1, maximum x +1), (-1, maximum y +1))
if x in self.limits[0] or y in self.limits[1]:
# Nous sommes hors limites
return False
# on retourne la cellule
return self.squares[y][x]
def set_visible(self, cell):
# cell est la cellule examinée
if cell.value == 0:
# La cellule est vide, elle est ajoutée à la pile, en fait tout le
# mécanise repose sur cette pile
self.stack.append(cell)
cell.show_value() |
Partager