Integrate Generator
parent
1e2c2dcc25
commit
598721115e
|
@ -2,3 +2,4 @@ venv/
|
||||||
demos/
|
demos/
|
||||||
.idea/
|
.idea/
|
||||||
*/__pycache__/*
|
*/__pycache__/*
|
||||||
|
*.pyc
|
||||||
|
|
|
@ -6,9 +6,10 @@ Credits for Generator: http://zhangroup.aporc.org/images/files/Paper_3485.pdf
|
||||||
"""
|
"""
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
#from . import Sudoku_Solver as solver
|
from . import Sudoku_Solver as solver
|
||||||
import Sudoku_Solver as solver
|
#import Sudoku_Solver as solver
|
||||||
|
|
||||||
filledcell = re.compile('(?!0)')
|
filledcell = re.compile('(?!0)')
|
||||||
|
|
||||||
|
@ -47,12 +48,13 @@ def generate_dig_sequence(difficulty):
|
||||||
yield random_number.pop(random.randint(0, len(random_number)-1))
|
yield random_number.pop(random.randint(0, len(random_number)-1))
|
||||||
elif difficulty == 2:
|
elif difficulty == 2:
|
||||||
current = 0
|
current = 0
|
||||||
while current < 81:
|
while current < 162:
|
||||||
row = int(current / 9)
|
actual = current % 81
|
||||||
|
row = int(actual / 9)
|
||||||
if not row % 2:
|
if not row % 2:
|
||||||
yield current
|
yield actual
|
||||||
else:
|
else:
|
||||||
yield (row+1) * 9 - 1 - (current % 9)
|
yield (row+1) * 9 - 1 - (actual % 9) % 81
|
||||||
current += 2
|
current += 2
|
||||||
elif difficulty == 3:
|
elif difficulty == 3:
|
||||||
current = 0
|
current = 0
|
||||||
|
@ -69,6 +71,7 @@ def generate_dig_sequence(difficulty):
|
||||||
yield current
|
yield current
|
||||||
current += 1
|
current += 1
|
||||||
|
|
||||||
|
|
||||||
def specify_grid_properties(difficulty):
|
def specify_grid_properties(difficulty):
|
||||||
if difficulty == 0:
|
if difficulty == 0:
|
||||||
n_givens = random.randint(50, 60)
|
n_givens = random.randint(50, 60)
|
||||||
|
@ -89,9 +92,19 @@ def specify_grid_properties(difficulty):
|
||||||
return n_givens, lower_bound
|
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):
|
def generate_sudoku_puzzle(difficulty):
|
||||||
grid = generate_completed_grid(11)
|
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)
|
dig_sequence = generate_dig_sequence(difficulty)
|
||||||
holes = 0
|
holes = 0
|
||||||
|
|
||||||
|
@ -119,7 +132,7 @@ def generate_sudoku_puzzle(difficulty):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
puzzle = generate_sudoku_puzzle(4)
|
puzzle = generate_sudoku_puzzle(2)
|
||||||
print(check_for_nonzeros(puzzle))
|
print(check_for_nonzeros(puzzle))
|
||||||
|
|
||||||
solver.display_grid(puzzle)
|
solver.display_grid(puzzle)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
from . import Sudoku_Generator as sdk_gen
|
||||||
|
|
||||||
EMPTY = 0
|
EMPTY = 0
|
||||||
VALID = 1
|
VALID = 1
|
||||||
|
@ -28,7 +29,7 @@ class SudokuSystem:
|
||||||
self.generate_test_board()
|
self.generate_test_board()
|
||||||
|
|
||||||
def clear_grid(self):
|
def clear_grid(self):
|
||||||
self.number_grid = 0
|
self.number_grid[:] = 0
|
||||||
self.cell_status = EMPTY
|
self.cell_status = EMPTY
|
||||||
for i in range(9):
|
for i in range(9):
|
||||||
for j in range(9):
|
for j in range(9):
|
||||||
|
@ -121,7 +122,9 @@ class SudokuSystem:
|
||||||
|
|
||||||
def generate_random_board(self):
|
def generate_random_board(self):
|
||||||
# TODO: Write function to generate a random board
|
# 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):
|
def check_valid_moves(self):
|
||||||
# TODO: Write function to return a possible valid numbers for a cell
|
# TODO: Write function to return a possible valid numbers for a cell
|
||||||
|
|
|
@ -145,6 +145,10 @@ class GameBoard(BoxBoard):
|
||||||
def show_playmenu(self, state):
|
def show_playmenu(self, state):
|
||||||
self.playmenu.setVisible(state)
|
self.playmenu.setVisible(state)
|
||||||
|
|
||||||
|
def new_game(self):
|
||||||
|
print('new game selected')
|
||||||
|
self.gamegrid.generate_new_grid()
|
||||||
|
|
||||||
|
|
||||||
class MenuBoard(BoxBoard):
|
class MenuBoard(BoxBoard):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -87,15 +87,13 @@ class DifficultyDisplayer(QGraphicsWidget):
|
||||||
def mousePressEvent(self, event):
|
def mousePressEvent(self, event):
|
||||||
#if not self.focus_changed:
|
#if not self.focus_changed:
|
||||||
print('Click')
|
print('Click')
|
||||||
self.selected = not self.selected
|
if not self.selected:
|
||||||
for btn in self.diff_buttons:
|
self.selected = True
|
||||||
btn.setVisible(self.selected)
|
for btn in self.diff_buttons:
|
||||||
self.update()
|
btn.setVisible(self.selected)
|
||||||
if self.selected:
|
self.update()
|
||||||
self.setFocus()
|
self.setFocus()
|
||||||
else:
|
# self.focus_changed = False
|
||||||
print('Out of focus')
|
|
||||||
# self.focus_changed = False
|
|
||||||
|
|
||||||
def boundingRect(self):
|
def boundingRect(self):
|
||||||
if self.selected:
|
if self.selected:
|
||||||
|
@ -106,8 +104,13 @@ class DifficultyDisplayer(QGraphicsWidget):
|
||||||
def focusOutEvent(self, event):
|
def focusOutEvent(self, event):
|
||||||
print("diff focus out")
|
print("diff focus out")
|
||||||
self.selected = False
|
self.selected = False
|
||||||
self.focus_changed = True
|
#self.focus_changed = True
|
||||||
for btn in self.diff_buttons:
|
#for btn in self.diff_buttons:
|
||||||
btn.setVisible(False)
|
# btn.setVisible(False)
|
||||||
|
|
||||||
self.notFocus.emit()
|
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()
|
self.anim.start()
|
||||||
|
|
||||||
|
def generate_new_grid(self):
|
||||||
|
self.sudoku_grid.generate_random_board()
|
||||||
|
self.update()
|
||||||
|
|
||||||
def replace_cell_number(self, val):
|
def replace_cell_number(self, val):
|
||||||
self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val)
|
self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val)
|
||||||
self.grid_painter.update()
|
self.grid_painter.update()
|
||||||
|
|
2
main.py
2
main.py
|
@ -46,7 +46,7 @@ class SudokuWindow(QGraphicsView):
|
||||||
|
|
||||||
# Cross-Board signal connections
|
# Cross-Board signal connections
|
||||||
self.menuboard.diff_display.notFocus.connect(self.gameboard.game_refocus)
|
self.menuboard.diff_display.notFocus.connect(self.gameboard.game_refocus)
|
||||||
|
self.menuboard.diff_display.connect_buttons_signal(self.gameboard.new_game)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app = 0
|
app = 0
|
||||||
|
|
Loading…
Reference in New Issue