From 5530186d28ad1bb4bd6c51c6daf8ae729727e961 Mon Sep 17 00:00:00 2001 From: En Yi Date: Sat, 21 Jul 2018 14:52:50 +0800 Subject: [PATCH] Integrate scribbling mode --- gameplay/sudoku_gameplay.py | 6 ++++++ graphic_components/board.py | 14 +++++++++----- graphic_components/sudoku_graphics.py | 19 +++++++++++++------ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/gameplay/sudoku_gameplay.py b/gameplay/sudoku_gameplay.py index d6b7868..60fee22 100644 --- a/gameplay/sudoku_gameplay.py +++ b/gameplay/sudoku_gameplay.py @@ -45,6 +45,12 @@ class SudokuSystem: if val == 0: self.change_cell_status(row, col, EMPTY) + def toggle_scribble(self, row, col, val): + if val in self.scribbles[row, col]: + self.scribbles[row, col] = self.scribbles[row, col].replace(val, '') + else: + self.scribbles[row, col] += val + def get_cell_number(self, row, col): return self.number_grid[row, col] diff --git a/graphic_components/board.py b/graphic_components/board.py index 6395328..3d3ce2f 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -109,7 +109,7 @@ class GameBoard(BoxBoard): self.show_playmenu(False) self.gamegrid.buttonClicked.connect(self.show_number_ring) - self.numring.connect_button_signals(self.select_ring_number) + #self.numring.connect_button_signals(self.select_ring_number) self.numring.keyPressed.connect(self.select_ring_number) self.gamegrid.setFocus(Qt.MouseFocusReason) @@ -129,10 +129,14 @@ class GameBoard(BoxBoard): self.numring.toggle_anim(True) self.numring.scribbling = scribbling - def select_ring_number(self, val): - if val == 'X': - val = 0 - self.gamegrid.replace_cell_number(int(val)) + def select_ring_number(self, val, scribbling): + if scribbling: + if not val == 'X': + self.gamegrid.change_cell_scribbles(val) + else: + if val == 'X': + val = 0 + self.gamegrid.replace_cell_number(int(val)) def game_refocus(self): self.gamegrid.set_disabled(False) diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py index bfc2aa9..57c1911 100644 --- a/graphic_components/sudoku_graphics.py +++ b/graphic_components/sudoku_graphics.py @@ -173,6 +173,10 @@ class SudokuGrid(BaseSudokuItem): #self.sudoku_grid.generate_test_board(difficulty) # Uncomment for testing self.update() + def change_cell_scribbles(self, val): + self.sudoku_grid.toggle_scribble(self.mouse_h, self.mouse_w, val) + self.grid_painter.update() + def replace_cell_number(self, val): self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val) self.grid_painter.update() @@ -262,7 +266,7 @@ class NumberRing(BaseSudokuItem): # TODO: Adjust the positioning of each element # TODO: Make it transparent when mouse is out of range loseFocus = pyqtSignal() - keyPressed = pyqtSignal(str) + keyPressed = pyqtSignal(str, bool) def __init__(self, parent=None): super().__init__(parent=parent) @@ -272,6 +276,8 @@ class NumberRing(BaseSudokuItem): self.cell_height = 24 self.cell_buttons = [] + for btn in self.cell_buttons: + btn.buttonClicked.connect(func) for i in range(10): if i == 0: cell_string = 'X' @@ -279,6 +285,8 @@ class NumberRing(BaseSudokuItem): cell_string = str(i) btn = buttons.AnimBox(0, 0, self.cell_width, self.cell_height, cell_string, parent=self) + btn.buttonClicked.connect(self.send_button_press) + #btn.buttonClicked.connect(self.close_menu) self.cell_buttons.append(btn) self.radius = 54 @@ -322,10 +330,9 @@ class NumberRing(BaseSudokuItem): def paint(self, painter, style, widget=None): pass - def connect_button_signals(self, func): - for btn in self.cell_buttons: - btn.buttonClicked.connect(func) - btn.buttonClicked.connect(self.close_menu) + def send_button_press(self, val): + self.keyPressed.emit(val, self.scribbling) + self.close_menu() def freeze_buttons(self, freeze): for btn in self.cell_buttons: @@ -356,7 +363,7 @@ class NumberRing(BaseSudokuItem): if txt: print('keypress:', txt) - self.keyPressed.emit(txt) + self.keyPressed.emit(txt, self.scribbling) if not self.scribbling: self.clearFocus()