diff --git a/.gitignore b/.gitignore index b6bd61b..d309cbc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ venv/ demos/ .idea/ */__pycache__/* +*.pyc diff --git a/gameplay/Sudoku_Generator.py b/gameplay/Sudoku_Generator.py index 9452cbf..f52eb4a 100644 --- a/gameplay/Sudoku_Generator.py +++ b/gameplay/Sudoku_Generator.py @@ -6,9 +6,10 @@ Credits for Generator: http://zhangroup.aporc.org/images/files/Paper_3485.pdf """ import random import re +import numpy as np -#from . import Sudoku_Solver as solver -import Sudoku_Solver as solver +from . import Sudoku_Solver as solver +#import Sudoku_Solver as solver filledcell = re.compile('(?!0)') @@ -47,12 +48,13 @@ def generate_dig_sequence(difficulty): yield random_number.pop(random.randint(0, len(random_number)-1)) elif difficulty == 2: current = 0 - while current < 81: - row = int(current / 9) + while current < 162: + actual = current % 81 + row = int(actual / 9) if not row % 2: - yield current + yield actual else: - yield (row+1) * 9 - 1 - (current % 9) + yield (row+1) * 9 - 1 - (actual % 9) % 81 current += 2 elif difficulty == 3: current = 0 @@ -69,6 +71,7 @@ def generate_dig_sequence(difficulty): yield current current += 1 + def specify_grid_properties(difficulty): if difficulty == 0: n_givens = random.randint(50, 60) @@ -89,9 +92,19 @@ def specify_grid_properties(difficulty): return n_givens, lower_bound +def grid_to_array(grid): + assert len(grid) == 81 + sudoku_array = np.zeros((9,9)) + for i in range(81): + r = int(i / 9) + c = i % 9 + sudoku_array[r, c] = int(grid[i]) + + return sudoku_array + def generate_sudoku_puzzle(difficulty): grid = generate_completed_grid(11) - n_givens, lower_bound = specify_grid_properties() + n_givens, lower_bound = specify_grid_properties(difficulty) dig_sequence = generate_dig_sequence(difficulty) holes = 0 @@ -119,7 +132,7 @@ def generate_sudoku_puzzle(difficulty): if __name__ == "__main__": - puzzle = generate_sudoku_puzzle(4) + puzzle = generate_sudoku_puzzle(2) print(check_for_nonzeros(puzzle)) solver.display_grid(puzzle) diff --git a/gameplay/sudoku_gameplay.py b/gameplay/sudoku_gameplay.py index 40426d4..f2f2dbd 100644 --- a/gameplay/sudoku_gameplay.py +++ b/gameplay/sudoku_gameplay.py @@ -1,4 +1,5 @@ import numpy as np +from . import Sudoku_Generator as sdk_gen EMPTY = 0 VALID = 1 @@ -28,7 +29,7 @@ class SudokuSystem: self.generate_test_board() def clear_grid(self): - self.number_grid = 0 + self.number_grid[:] = 0 self.cell_status = EMPTY for i in range(9): for j in range(9): @@ -121,7 +122,9 @@ class SudokuSystem: def generate_random_board(self): # TODO: Write function to generate a random board - pass + self.clear_grid() + self.number_grid[:] = sdk_gen.grid_to_array(sdk_gen.generate_sudoku_puzzle(2)) + self.cell_status = self.number_grid > 0 * FIXED def check_valid_moves(self): # TODO: Write function to return a possible valid numbers for a cell diff --git a/graphic_components/board.py b/graphic_components/board.py index d3d89f5..aa2ee6e 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -145,6 +145,10 @@ class GameBoard(BoxBoard): def show_playmenu(self, state): self.playmenu.setVisible(state) + def new_game(self): + print('new game selected') + self.gamegrid.generate_new_grid() + class MenuBoard(BoxBoard): """ diff --git a/graphic_components/menu_graphics.py b/graphic_components/menu_graphics.py index 50e903b..ca7fbc3 100644 --- a/graphic_components/menu_graphics.py +++ b/graphic_components/menu_graphics.py @@ -87,15 +87,13 @@ class DifficultyDisplayer(QGraphicsWidget): def mousePressEvent(self, event): #if not self.focus_changed: print('Click') - self.selected = not self.selected - for btn in self.diff_buttons: - btn.setVisible(self.selected) - self.update() - if self.selected: + if not self.selected: + self.selected = True + for btn in self.diff_buttons: + btn.setVisible(self.selected) + self.update() self.setFocus() - else: - print('Out of focus') - # self.focus_changed = False + # self.focus_changed = False def boundingRect(self): if self.selected: @@ -106,8 +104,13 @@ class DifficultyDisplayer(QGraphicsWidget): def focusOutEvent(self, event): print("diff focus out") self.selected = False - self.focus_changed = True - for btn in self.diff_buttons: - btn.setVisible(False) + #self.focus_changed = True + #for btn in self.diff_buttons: + # btn.setVisible(False) self.notFocus.emit() + + def connect_buttons_signal(self, func): + print('Diff buttons connected') + for btn in self.diff_buttons: + btn.buttonClicked.connect(func) diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py index c6d2076..404b5df 100644 --- a/graphic_components/sudoku_graphics.py +++ b/graphic_components/sudoku_graphics.py @@ -133,6 +133,10 @@ class SudokuGrid(BaseSudokuItem): self.anim.start() + def generate_new_grid(self): + self.sudoku_grid.generate_random_board() + self.update() + def replace_cell_number(self, val): self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val) self.grid_painter.update() diff --git a/main.py b/main.py index 895261e..b5d7dc1 100644 --- a/main.py +++ b/main.py @@ -46,7 +46,7 @@ class SudokuWindow(QGraphicsView): # Cross-Board signal connections self.menuboard.diff_display.notFocus.connect(self.gameboard.game_refocus) - + self.menuboard.diff_display.connect_buttons_signal(self.gameboard.new_game) if __name__ == "__main__": app = 0