add keys 'a' and 's' for showing board options
This commit is contained in:
		
							parent
							
								
									98c245fb9e
								
							
						
					
					
						commit
						775398f456
					
				| @ -78,6 +78,43 @@ function sudoku.checkBoard(board) | |||||||
|     return ok, isComplete, conflictList |     return ok, isComplete, conflictList | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  | function sudoku.calCellValidOptions(board, x, y) | ||||||
|  |     if board[x][y] ~= 0 then return {} end | ||||||
|  |     local u = {} | ||||||
|  |     local v = {} | ||||||
|  |     for i = 1, 9 do | ||||||
|  |         if board[x][i] ~= 0 then table.insert(u, board[x][i]) end | ||||||
|  |         if board[i][y] ~= 0 then table.insert(u, board[i][y]) end | ||||||
|  |     end | ||||||
|  |     local dx = math.floor((x - 1) / 3) * 3 | ||||||
|  |     local dy = math.floor((y - 1) / 3) * 3 | ||||||
|  |     for i = 1, 3 do | ||||||
|  |         for j = 1, 3 do | ||||||
|  |             local a = board[i+dx][j+dy] | ||||||
|  |             if a ~= 0 then table.insert(u, a) end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     for i = 1, 9 do | ||||||
|  |         local found = false | ||||||
|  |         for _, elm in ipairs(u) do | ||||||
|  |             if elm == i then found = true; break end | ||||||
|  |         end | ||||||
|  |         if not found then table.insert(v, i) end | ||||||
|  |     end | ||||||
|  |     return v | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function sudoku.buildSearchSpave(board) | ||||||
|  |     local s = {} | ||||||
|  |     for i = 1, 9 do | ||||||
|  |         s[i] = {} | ||||||
|  |         for j = 1, 9 do | ||||||
|  |             s[i][j] = sudoku.calCellValidOptions(board, i, j) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  |     return s | ||||||
|  | end | ||||||
|  | 
 | ||||||
| sudoku.cloneBoard = utils.cloneBoard | sudoku.cloneBoard = utils.cloneBoard | ||||||
| sudoku.createEmptyBoard = utils.createEmptyBoard | sudoku.createEmptyBoard = utils.createEmptyBoard | ||||||
| sudoku.loadBoard = utils.loadBoard | sudoku.loadBoard = utils.loadBoard | ||||||
|  | |||||||
| @ -1,6 +1,24 @@ | |||||||
| SudokuCanvas = {} | SudokuCanvas = {} | ||||||
| SudokuCanvas.__index = SudokuCanvas | SudokuCanvas.__index = SudokuCanvas | ||||||
| 
 | 
 | ||||||
|  | function showValidOptionsForCurrentCell(self, x, y) | ||||||
|  |     local s = sudoku.calCellValidOptions(self.board[2], y, x) | ||||||
|  |     for num = 1, 9 do | ||||||
|  |         self.smallNumbers[x][y][num].enabled = false | ||||||
|  |     end | ||||||
|  |     for _, num in ipairs(s) do | ||||||
|  |         self.smallNumbers[x][y][num].enabled = true | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function showValidOptionsForAllCells(self) | ||||||
|  |     for x = 1, 9 do | ||||||
|  |         for y = 1, 9 do | ||||||
|  |             showValidOptionsForCurrentCell(self, x, y) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | 
 | ||||||
| local function selectSmallNumbersFont(cellSize) | local function selectSmallNumbersFont(cellSize) | ||||||
|     local fntSize = 65 |     local fntSize = 65 | ||||||
|     local margin = 0 |     local margin = 0 | ||||||
| @ -363,6 +381,10 @@ function SudokuCanvas:keypressed(key) | |||||||
|             self.board[2][y][x] = self.board[3][y][x] |             self.board[2][y][x] = self.board[3][y][x] | ||||||
|             mode = "big" |             mode = "big" | ||||||
|         end |         end | ||||||
|  |     elseif key == "s" then | ||||||
|  |         showValidOptionsForCurrentCell(self, x, y) | ||||||
|  |     elseif key == "a" then | ||||||
|  |         showValidOptionsForAllCells(self) | ||||||
|     end |     end | ||||||
|     self.cursor.x = x |     self.cursor.x = x | ||||||
|     self.cursor.y = y |     self.cursor.y = y | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user