generated from mwc/project_game
added sudoku logic, trying to get board to print
This commit is contained in:
89
board.py
Normal file
89
board.py
Normal file
@@ -0,0 +1,89 @@
|
||||
import random
|
||||
|
||||
from cell import Cell
|
||||
|
||||
|
||||
class Board:
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.grid = [[0 for _ in range(9)] for _ in range(9)]
|
||||
self.cells = []
|
||||
|
||||
def generate(self):
|
||||
|
||||
self._fill_board()
|
||||
|
||||
self.create_cells()
|
||||
|
||||
def create_cells(self):
|
||||
|
||||
self.cells = []
|
||||
|
||||
for row in range(9):
|
||||
|
||||
for col in range(9):
|
||||
|
||||
self.cells.append(
|
||||
Cell(
|
||||
row=row,
|
||||
col=col,
|
||||
value=self.grid[row][col]
|
||||
)
|
||||
)
|
||||
|
||||
def _find_empty(self):
|
||||
|
||||
for row in range(9):
|
||||
|
||||
for col in range(9):
|
||||
|
||||
if self.grid[row][col] == 0:
|
||||
return row, col
|
||||
|
||||
return None
|
||||
|
||||
def _valid(self, row, col, num):
|
||||
|
||||
if num in self.grid[row]:
|
||||
return False
|
||||
|
||||
for r in range(9):
|
||||
if self.grid[r][col] == num:
|
||||
return False
|
||||
|
||||
box_row = (row // 3) * 3
|
||||
box_col = (col // 3) * 3
|
||||
|
||||
for r in range(box_row, box_row + 3):
|
||||
for c in range(box_col, box_col + 3):
|
||||
|
||||
if self.grid[r][c] == num:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def _fill_board(self):
|
||||
|
||||
empty = self._find_empty()
|
||||
|
||||
if empty is None:
|
||||
return True
|
||||
|
||||
row, col = empty
|
||||
|
||||
nums = list(range(1, 10))
|
||||
random.shuffle(nums)
|
||||
|
||||
for num in nums:
|
||||
|
||||
if self._valid(row, col, num):
|
||||
|
||||
self.grid[row][col] = num
|
||||
|
||||
if self._fill_board():
|
||||
return True
|
||||
|
||||
self.grid[row][col] = 0
|
||||
|
||||
return False
|
||||
Reference in New Issue
Block a user