Skip to content

Commit 01152ea

Browse files
authored
ENH: Create victory display (#10)
1 parent 81f30d7 commit 01152ea

File tree

5 files changed

+49
-9
lines changed

5 files changed

+49
-9
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,9 @@ python minesweeper.py
2121
<p align="center">
2222
<img src="https://raw.githubusercontent.com/foxyblue/minesweeper/master/static/losing_game.png"/>
2323
</p>
24+
25+
### Additional Tools
26+
27+
- [**Image Editing:**](https://viliusle.github.io/miniPaint/) viliusle.github.io/miniPaint
28+
- [**Sprite Sheet Packer:**](https://www.codeandweb.com/free-sprite-sheet-packer) codeandweb.com/free-sprite-sheet-packer
29+
- [**Make PNG Transparent:**](https://onlinepngtools.com/create-transparent-png) onlinepngtools.com/create-transparent-png

board.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from sprites import (
1414
mine, detonation,
15-
flag, greenflag,
15+
flag, greenflag, yellowflag,
1616
zero,
1717
one,
1818
two,
@@ -97,6 +97,7 @@ class Flag:
9797

9898
Red = "red"
9999
Green = "green"
100+
Yellow = "yellow"
100101

101102

102103
class Tile:
@@ -117,8 +118,10 @@ def render(self, win):
117118
if self.flagged:
118119
if self._flag_colour == Flag.Red:
119120
win.blit(flag, pos)
120-
else:
121+
elif self._flag_colour == Flag.Green:
121122
win.blit(greenflag, pos)
123+
else:
124+
win.blit(yellowflag, pos)
122125

123126
if not self.visible:
124127
return
@@ -136,7 +139,7 @@ def toggle_visible(self):
136139
if self.visible:
137140
return
138141

139-
self.visible= True
142+
self.visible = True
140143

141144
def toggle_flag(self):
142145
if self.flagged:
@@ -150,6 +153,9 @@ def set_type(self, type):
150153
def set_green(self):
151154
self._flag_colour = Flag.Green
152155

156+
def set_yellow(self):
157+
self._flag_colour = Flag.Yellow
158+
153159
def increment(self):
154160
if self.type == TileType.Mine:
155161
raise ValueError("Can't increment a mine")
@@ -206,6 +212,7 @@ def leftclick(self, pos) -> bool:
206212

207213
searched = set()
208214
tile.toggle_visible()
215+
self.n_visible -= 1
209216
self._zero_search(tile, searched)
210217
return True
211218

@@ -224,10 +231,27 @@ def _zero_search(self, tile, searched):
224231
searched.add(tile)
225232
searched = self._zero_search(tile, searched)
226233

227-
tile.toggle_visible()
234+
if not tile.visible:
235+
tile.toggle_visible()
236+
self.n_visible -= 1
228237

229238
return searched
230239

240+
def check_win(self) -> bool:
241+
return self.n_visible == self.n_mines
242+
243+
def display_win(self):
244+
if not self._revealed:
245+
self._revealed = True
246+
247+
for pos in self.mines:
248+
px, py = pos
249+
tile = self.grid[px][py]
250+
tile.set_yellow()
251+
if not tile.flagged:
252+
tile.toggle_flag()
253+
self.flags.add(tile)
254+
231255
def show_mines(self):
232256
if not self._revealed:
233257
self._revealed = True
@@ -243,6 +267,7 @@ def show_mines(self):
243267
def __init__(self, x, y, mines: int):
244268
self.x = x
245269
self.y = y
270+
self.n_visible = x * y
246271
self.n_mines = mines
247272
self.flags = set()
248273
self.grid = None

minesweeper.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,24 @@ def render():
6767
leftclick, _, rightclick = pygame.mouse.get_pressed()
6868
pos = pygame.mouse.get_pos()
6969

70-
if rightclick:
70+
if rightclick and safe:
7171
board.rightclick(pos)
7272
flag_count = _render_flg_count(
7373
board.n_mines, len(board.flags)
7474
)
7575

76-
elif leftclick and not safe:
77-
playing = False
76+
elif leftclick and safe:
77+
safe = board.leftclick(pos)
7878

7979
elif leftclick:
80-
safe = board.leftclick(pos)
80+
playing = False
81+
82+
if board.check_win():
83+
board.display_win()
84+
flag_count = _render_flg_count(
85+
board.n_mines, len(board.flags)
86+
)
87+
safe = False
8188

8289
if event.type == pygame.QUIT:
8390
playing = False

sprites-t.png

82 Bytes
Loading

sprites.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ def __init__(self, px, py):
2727
eight = Sprite(32, 32).sprite
2828

2929
detonation = Sprite(48, 0).sprite
30+
mine = Sprite(0, 48).sprite
31+
3032
flag = Sprite(48, 16).sprite
3133
greenflag = Sprite(48, 32).sprite
32-
mine = Sprite(0, 48).sprite
34+
yellowflag = Sprite(16, 48).sprite

0 commit comments

Comments
 (0)