Integrate Generator
parent
1e2c2dcc25
commit
598721115e
|
@ -2,3 +2,4 @@ venv/
|
|||
demos/
|
||||
.idea/
|
||||
*/__pycache__/*
|
||||
*.pyc
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue