Skip to content

Commit

Permalink
ENH: Create victory display (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
s3bw authored Aug 27, 2020
1 parent 81f30d7 commit 01152ea
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 9 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,9 @@ python minesweeper.py
<p align="center">
<img src="https://raw.githubusercontent.com/foxyblue/minesweeper/master/static/losing_game.png"/>
</p>

### Additional Tools

- [**Image Editing:**](https://viliusle.github.io/miniPaint/) viliusle.github.io/miniPaint
- [**Sprite Sheet Packer:**](https://www.codeandweb.com/free-sprite-sheet-packer) codeandweb.com/free-sprite-sheet-packer
- [**Make PNG Transparent:**](https://onlinepngtools.com/create-transparent-png) onlinepngtools.com/create-transparent-png
33 changes: 29 additions & 4 deletions board.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from sprites import (
mine, detonation,
flag, greenflag,
flag, greenflag, yellowflag,
zero,
one,
two,
Expand Down Expand Up @@ -97,6 +97,7 @@ class Flag:

Red = "red"
Green = "green"
Yellow = "yellow"


class Tile:
Expand All @@ -117,8 +118,10 @@ def render(self, win):
if self.flagged:
if self._flag_colour == Flag.Red:
win.blit(flag, pos)
else:
elif self._flag_colour == Flag.Green:
win.blit(greenflag, pos)
else:
win.blit(yellowflag, pos)

if not self.visible:
return
Expand All @@ -136,7 +139,7 @@ def toggle_visible(self):
if self.visible:
return

self.visible= True
self.visible = True

def toggle_flag(self):
if self.flagged:
Expand All @@ -150,6 +153,9 @@ def set_type(self, type):
def set_green(self):
self._flag_colour = Flag.Green

def set_yellow(self):
self._flag_colour = Flag.Yellow

def increment(self):
if self.type == TileType.Mine:
raise ValueError("Can't increment a mine")
Expand Down Expand Up @@ -206,6 +212,7 @@ def leftclick(self, pos) -> bool:

searched = set()
tile.toggle_visible()
self.n_visible -= 1
self._zero_search(tile, searched)
return True

Expand All @@ -224,10 +231,27 @@ def _zero_search(self, tile, searched):
searched.add(tile)
searched = self._zero_search(tile, searched)

tile.toggle_visible()
if not tile.visible:
tile.toggle_visible()
self.n_visible -= 1

return searched

def check_win(self) -> bool:
return self.n_visible == self.n_mines

def display_win(self):
if not self._revealed:
self._revealed = True

for pos in self.mines:
px, py = pos
tile = self.grid[px][py]
tile.set_yellow()
if not tile.flagged:
tile.toggle_flag()
self.flags.add(tile)

def show_mines(self):
if not self._revealed:
self._revealed = True
Expand All @@ -243,6 +267,7 @@ def show_mines(self):
def __init__(self, x, y, mines: int):
self.x = x
self.y = y
self.n_visible = x * y
self.n_mines = mines
self.flags = set()
self.grid = None
Expand Down
15 changes: 11 additions & 4 deletions minesweeper.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,24 @@ def render():
leftclick, _, rightclick = pygame.mouse.get_pressed()
pos = pygame.mouse.get_pos()

if rightclick:
if rightclick and safe:
board.rightclick(pos)
flag_count = _render_flg_count(
board.n_mines, len(board.flags)
)

elif leftclick and not safe:
playing = False
elif leftclick and safe:
safe = board.leftclick(pos)

elif leftclick:
safe = board.leftclick(pos)
playing = False

if board.check_win():
board.display_win()
flag_count = _render_flg_count(
board.n_mines, len(board.flags)
)
safe = False

if event.type == pygame.QUIT:
playing = False
Expand Down
Binary file modified sprites-t.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 3 additions & 1 deletion sprites.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ def __init__(self, px, py):
eight = Sprite(32, 32).sprite

detonation = Sprite(48, 0).sprite
mine = Sprite(0, 48).sprite

flag = Sprite(48, 16).sprite
greenflag = Sprite(48, 32).sprite
mine = Sprite(0, 48).sprite
yellowflag = Sprite(16, 48).sprite

0 comments on commit 01152ea

Please sign in to comment.