Integrate Generator

master
En Yi 2018-07-12 11:35:58 +08:00
parent 1e2c2dcc25
commit 598721115e
7 changed files with 50 additions and 22 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ venv/
demos/
.idea/
*/__pycache__/*
*.pyc

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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