SwiftUI 生成随机数独内容并空出 20 个格子
以下是使用 SwiftUI 生成随机数独内容并且空出 20 个格子的完整代码:\n\nswift\nimport SwiftUI\n\nstruct ContentView: View {\n @State var sudokuGrid: [[Int]] = []\n \n var body: some View {\n VStack {\n ForEach(0..<9) { row in\n HStack {\n ForEach(0..<9) { col in\n Text("\(sudokuGrid[row][col])")\n .font(.title)\n .frame(width: 30, height: 30)\n .background(Color.white)\n .border(Color.black, width: 1)\n }\n }\n }\n }\n .onAppear {\n generateSudokuGrid()\n removeNumbers()\n }\n }\n \n func generateSudokuGrid() {\n sudokuGrid = Array(repeating: Array(repeating: 0, count: 9), count: 9)\n \n // 生成完整的数独内容\n solveSudoku(&sudokuGrid)\n }\n \n func solveSudoku(_ grid: inout [[Int]]) -> Bool {\n for row in 0..<9 {\n for col in 0..<9 {\n if grid[row][col] == 0 {\n for num in 1...9 {\n if isValid(grid, row, col, num) {\n grid[row][col] = num\n \n if solveSudoku(&grid) {\n return true\n }\n \n grid[row][col] = 0\n }\n }\n \n return false\n }\n }\n }\n \n return true\n }\n \n func isValid(_ grid: [[Int]], _ row: Int, _ col: Int, _ num: Int) -> Bool {\n // 检查行是否有重复数字\n for i in 0..<9 {\n if grid[row][i] == num {\n return false\n }\n }\n \n // 检查列是否有重复数字\n for i in 0..<9 {\n if grid[i][col] == num {\n return false\n }\n }\n \n // 检查3x3方格内是否有重复数字\n let startRow = (row / 3) * 3\n let startCol = (col / 3) * 3\n \n for i in startRow..<startRow+3 {\n for j in startCol..<startCol+3 {\n if grid[i][j] == num {\n return false\n }\n }\n }\n \n return true\n }\n \n func removeNumbers() {\n var count = 0\n \n while count < 20 {\n let row = Int.random(in: 0..<9)\n let col = Int.random(in: 0..<9)\n \n if sudokuGrid[row][col] != 0 {\n sudokuGrid[row][col] = 0\n count += 1\n }\n }\n }\n}\n\nstruct ContentView_Previews: PreviewProvider {\n static var previews: some View {\n ContentView()\n }\n}\n\n\n这段代码定义了一个名为ContentView的视图,其中的sudokuGrid变量用于存储数独内容。视图的正文部分使用了嵌套的ForEach循环来创建数独格子,并通过绑定sudokuGrid中的值来显示数字。\n\n在视图的onAppear回调中,我们调用generateSudokuGrid函数来生成数独内容,并调用removeNumbers函数来随机删除 20 个数字。\n\ngenerateSudokuGrid函数使用递归的方式解决数独问题,将结果保存到sudokuGrid中。\n\nremoveNumbers函数使用随机数生成器来随机选择 20 个位置,并将这些位置对应的数字设置为 0,以实现空出 20 个格子的效果。\n\n最后,我们在ContentView_Previews中预览了ContentView视图。\n\n希望对你有帮助!
原文地址: https://www.cveoy.top/t/topic/pTwx 著作权归作者所有。请勿转载和采集!