@@ -172,14 +172,24 @@ class Board:
172
172
def rightclick (self , pos ):
173
173
realx , realy = _floor_pos (pos )
174
174
if self ._inside_board (realx , realy ):
175
- if self .grid :
176
- self .grid [realx ][realy ].toggle_flag ()
177
- self .flags .add ((realx , realy ))
175
+ if self ._grid_constructed :
176
+ tile = self .grid [realx ][realy ]
177
+ if not tile .visible :
178
+ tile .toggle_flag ()
179
+
180
+ # Tiles don't ever start as flagged
181
+ # thus .remove will only ever be
182
+ # called after .add
183
+ if tile .flagged :
184
+ self .flags .add ((realx , realy ))
185
+ else :
186
+ self .flags .remove ((realx , realy ))
178
187
179
188
def leftclick (self , pos ) -> bool :
180
189
"""The return value determines if the player survived."""
181
190
realx , realy = _floor_pos (pos )
182
- if not self .grid :
191
+ if not self ._grid_constructed :
192
+ self ._grid_constructed = True
183
193
self .grid = self ._construct_grid (self .x , self .y , (realx , realy ))
184
194
185
195
if self ._inside_board (realx , realy ):
@@ -236,6 +246,7 @@ def __init__(self, x, y, mines: int):
236
246
self .n_mines = mines
237
247
self .flags = set ()
238
248
self .grid = None
249
+ self ._grid_constructed = False
239
250
self ._revealed = False
240
251
241
252
x_blocks = x * BLOCK_SIZE
0 commit comments