自己设计一道数独:LibreSudoku自定义出题功能完整流程演示
自己设计一道数独:LibreSudoku自定义出题功能完整流程演示
【免费下载链接】Libre-SudokuLibreSudoku - Sudoku app for android built with Kotlin + Jetpack Compose + Material3项目地址: https://gitcode.com/gh_mirrors/li/Libre-Sudoku
LibreSudoku 是一款用 Kotlin + Jetpack Compose + Material3 打造的安卓数独 App。本篇完整演示它的自定义出题功能:从新建棋盘、填入数字到一键保存,几分钟就能设计出属于你自己的数独题目,并自动校验"唯一解"。
功能入口:如何进入自定义出题界面 📱
自定义出题功能藏在"文件夹"管理页里,适合想给自己建题库的玩家:
- 打开 App,点击底部的Folders(文件夹),进入题集管理页;
- 点击页面上的"新建数独"入口,即可进入出题界面。
出题界面的主逻辑位于 CreateSudokuScreen.kt,状态与保存逻辑在 CreateSudokuViewModel.kt。
第一步:选择棋盘规格与难度 ✏️
进入界面后,顶部一排下拉菜单就是出题的"骨架":
- 棋盘规格:支持 9x9、6x6、12x12 三种尺寸(见 GameType.kt)。注意:规格只能在"新建"时切换,编辑已有题目时该菜单会隐藏,避免误操作。
- 难度标签:Easy、Moderate、Hard、Challenge、Custom 五档(定义在 GameDifficulty.kt)。自定义出题时选Custom最合适——难度标签不影响游戏性,只影响统计页的分类展示。
第二步:在棋盘上填入数字 🎯
出题界面与游玩界面共用同一套输入体验,上手零成本:
| 操作 | 说明 |
|---|---|
| 点格子 + 点数字 | 逐格填数,再点同一数字可取消 |
| 先选数字再点格子 | 开启"数字优先"输入法后,长按数字键进入批量填数模式 |
| 撤销 / 重做 | 底部工具栏一键回退、恢复(CreateSudokuViewModel.kt 中的 undo/redo 管理) |
| 橡皮擦 | 直接清空当前选中格子 |
每填一个数字,App 都会实时检查行、列、宫是否冲突,冲突格子会立即标红——出题时的"自我排错"完全不用担心。
进阶玩法:用字符串一键导入题目 ⚡
如果你有现成的题面文本,不必手敲 81 个格子。点击右上角⋮菜单,选择Set from a string(用字符串导入):
- 粘贴一行数字,空格用
0或.表示,例如530070000600195000...; - 长度自动识别棋盘:36 位 → 6x6,81 位 → 9x9,144 位 → 12x12(解析逻辑见 SudokuParser.kt)。
格式不合法时输入框会标红提示,确认无误后棋盘瞬间铺满,非常适合把收藏的题面搬进自己的题库。
第三步:保存题目,自动通过唯一解校验 💾
填好后点击顶部Save。此时 App 会先做一道"守门"检查:内置 QQWing 求解器会解一遍你的题面(checkGame 校验流程):
- ✅唯一解:保存成功,题目进入数据库——同时存下题面和完整答案(saveToDb 入库逻辑),随后即可在对应文件夹中开局;
- ❌无解:弹窗提示 "Invalid puzzle",说明题面本身矛盾,回去检查红色冲突格;
- ❌多解:弹窗提示题目不唯一——标准数独必须有唯一解,建议再挖掉或补上几个提示数字。
保存后的题目会显示在文件夹列表的"最近游玩"中,支持继续编辑微调,形成"出题 → 校验 → 入库 → 再优化"的完整闭环。
常见问题 ❓
Q:为什么编辑旧题时看不到规格切换菜单?防止误改棋盘尺寸,规格仅在新建时可选,这是刻意设计的限制。
Q:题目保存失败一般是什么原因?几乎都是多解或无解。用橡皮擦多擦几个格(降低提示数)通常能收敛到唯一解。
Q:自定义题目会影响统计数据吗?会。完成游戏后,题目会按你设置的难度标签计入 Statistics 统计页(如 Custom 分类)。
从一块空白棋盘到入库可用的题目,LibreSudoku 的自定义出题功能只需三步:选规格 → 填数字 → 保存校验。整套流程源码集中在 ui/create_edit_sudoku 模块,如果你也想给 App 贡献功能,可以从这里读起。
【免费下载链接】Libre-SudokuLibreSudoku - Sudoku app for android built with Kotlin + Jetpack Compose + Material3项目地址: https://gitcode.com/gh_mirrors/li/Libre-Sudoku
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
