From e878f29a7afe241a5d52f17bff6e9272f1a07f59 Mon Sep 17 00:00:00 2001 From: En Yi Date: Fri, 20 Jul 2018 11:50:32 +0800 Subject: [PATCH] Stop timer when game is finished --- gameplay/sudoku_gameplay.py | 2 +- graphic_components/board.py | 5 +++++ graphic_components/menu_graphics.py | 29 ++++++++++++++++++--------- graphic_components/sudoku_graphics.py | 3 +++ main.py | 1 + 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/gameplay/sudoku_gameplay.py b/gameplay/sudoku_gameplay.py index 6397ece..adee963 100644 --- a/gameplay/sudoku_gameplay.py +++ b/gameplay/sudoku_gameplay.py @@ -55,6 +55,7 @@ class SudokuSystem: def completion_check(self): if np.all(np.logical_or(self.cell_status == VALID, self.cell_status == FIXED)): + self.cell_status[:] = FIXED return True else: return False @@ -83,7 +84,6 @@ class SudokuSystem: if len(row_check) == 1 and len(col_check) == 1 and len(local_grid_check_row) == 1: self.cell_status[row, col] = VALID - print('Completion?', self.completion_check()) else: self.cell_status[row, col] = INVALID bad_cells = [] diff --git a/graphic_components/board.py b/graphic_components/board.py index 70c46aa..59b8622 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -100,6 +100,7 @@ class GameBoard(BoxBoard): boxClicked = pyqtSignal(bool) newGameSelected = pyqtSignal(str) gridDrawn = pyqtSignal() + sudokuDone = pyqtSignal() def __init__(self, width, height, parent=None): super().__init__(width, height, parent) @@ -119,6 +120,7 @@ class GameBoard(BoxBoard): self.anim.finished.connect(lambda: self.show_playmenu(True)) self.playmenu.buttonClicked.connect(self.new_game) self.gamegrid.finishDrawing.connect(self.gridDrawn.emit) + self.gamegrid.puzzleFinished.connect(self.sudokuDone.emit) self.toggle_anim(True) def show_number_ring(self, x=0, y=0): @@ -195,3 +197,6 @@ class MenuBoard(BoxBoard): def set_difficulty_text(self, string): self.diff_display.set_text(string) self.timer_display.reset_time() + + def stop_timer(self): + self.timer_display.timer.stop() diff --git a/graphic_components/menu_graphics.py b/graphic_components/menu_graphics.py index d4df90f..0a046bb 100644 --- a/graphic_components/menu_graphics.py +++ b/graphic_components/menu_graphics.py @@ -104,6 +104,12 @@ class DifficultyDisplayer(QGraphicsWidget): self.diff_menu.menuClicked.connect(self.difficultySelected.emit) self.diff_menu.loseFocus.connect(self.notFocus.emit) + def set_disabled(self, state): + if state: + self.setAcceptedMouseButtons(Qt.NoButton) + else: + self.setAcceptedMouseButtons(Qt.LeftButton) + def paint(self, painter, style, widget=None): painter.setPen(self.box_pen) painter.drawRect(self.diff_box) @@ -191,6 +197,18 @@ class HighScoreDisplayer(QGraphicsObject): self.selected = False + def set_disabled(self, state): + self.setAcceptHoverEvents(state) + + def show_board(self, state): + self.scoreboard_widget.setVisible(state) + self.scoreboard_widget.show_scores(state) + self.prepareGeometryChange() + if state: + self.size = self.board_size + else: + self.size = self.icon_size + def boundingRect(self): return QRectF(-self.size, -self.size, self.size, self.size) @@ -202,17 +220,10 @@ class HighScoreDisplayer(QGraphicsObject): -self.icon_size/2, -self.icon_size/2, Qt.white) def hoverEnterEvent(self, ev): - if not self.selected: - self.scoreboard_widget.setVisible(True) - self.scoreboard_widget.show_scores(True) - self.prepareGeometryChange() - self.size = self.board_size + self.show_board(True) def hoverLeaveEvent(self, ev): - self.scoreboard_widget.setVisible(False) - self.scoreboard_widget.show_scores(False) - self.prepareGeometryChange() - self.size = self.icon_size + self.show_board(False) if __name__ == "__main__": diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py index 97dd83c..1edd825 100644 --- a/graphic_components/sudoku_graphics.py +++ b/graphic_components/sudoku_graphics.py @@ -76,6 +76,7 @@ class SudokuGrid(BaseSudokuItem): # TODO: Add functions to animated the grid lines buttonClicked = pyqtSignal(float, float) finishDrawing = pyqtSignal() + puzzleFinished = pyqtSignal() def __init__(self, width, height, parent=None): super().__init__(parent) @@ -153,6 +154,8 @@ class SudokuGrid(BaseSudokuItem): def replace_cell_number(self, val): self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val) self.grid_painter.update() + if self.sudoku_grid.completion_check(): + self.puzzleFinished.emit() def boundingRect(self): return QRectF(-5, -5, self.width+10, self.height+10) diff --git a/main.py b/main.py index 6ec58a6..dac0373 100644 --- a/main.py +++ b/main.py @@ -45,6 +45,7 @@ class SudokuWindow(QGraphicsView): # Cross-Board signal connections self.gameboard.gridDrawn.connect(lambda: self.menuboard.show_children(True)) self.gameboard.newGameSelected.connect(self.menuboard.set_difficulty_text) + self.gameboard.sudokuDone.connect(self.menuboard.stop_timer) self.menuboard.diff_display.notFocus.connect(self.gameboard.game_refocus) self.menuboard.diff_display.difficultySelected.connect(self.gameboard.new_game)