Stop timer when game is finished

master
En Yi 2018-07-20 11:50:32 +08:00
parent d97a643627
commit e878f29a7a
5 changed files with 30 additions and 10 deletions

View File

@ -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 = []

View File

@ -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()

View File

@ -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__":

View File

@ -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)

View File

@ -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)