Files
project_game/board.py

89 lines
1.6 KiB
Python

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