Python 数独小游戏拓展:添加自定义谜题导入与导出功能
·
Python 数独小游戏拓展:自定义谜题导入与导出功能
实现思路
- 数据结构:使用二维列表存储数独谜题,$0$ 表示空格
- 文件格式:采用纯文本格式,每行9个字符(数字或点号)
- 功能模块:
- 导入:解析文本文件 → 验证格式 → 加载到游戏
- 导出:转换当前谜题 → 生成标准格式 → 保存文件
核心代码实现
def import_puzzle(filename):
"""导入自定义数独谜题"""
puzzle = []
try:
with open(filename, 'r') as f:
for line in f.readlines():
line = line.strip()
# 验证行格式:9个字符且仅含数字和点
if len(line) != 9 or not all(c in '123456789.' for c in line):
raise ValueError("无效文件格式")
puzzle.append([int(c) if c != '.' else 0 for c in line])
# 验证是否为9×9网格
if len(puzzle) != 9:
raise ValueError("需要9行数据")
return puzzle
except Exception as e:
print(f"导入失败: {str(e)}")
return None
def export_puzzle(puzzle, filename):
"""导出当前数独谜题"""
try:
with open(filename, 'w') as f:
for row in puzzle:
# 转换为文本格式:数字和点号
line = ''.join(str(n) if n != 0 else '.' for n in row)
f.write(line + '\n')
return True
except Exception as e:
print(f"导出失败: {str(e)}")
return False
# 使用示例
if __name__ == "__main__":
# 导入示例
sudoku_board = import_puzzle("puzzle.txt")
# 导出示例
if sudoku_board:
export_puzzle(sudoku_board, "my_puzzle.txt")
文件格式规范
- 每行代表数独的一行
- 使用数字
1-9表示已知数字 - 使用点号
.或0表示空格 - 示例文件内容:
53..7....
6..195...
.98....6.
8...6...3
4..8.3..1
7...2...6
.6....28.
...419..5
....8..79
集成到数独游戏
class SudokuGame:
def __init__(self):
self.board = [[0]*9 for _ in range(9)]
def load_custom(self, filename):
"""加载自定义谜题"""
if puzzle := import_puzzle(filename):
self.board = puzzle
def save_custom(self, filename):
"""保存当前谜题"""
export_puzzle(self.board, filename)
# 其他游戏逻辑...
功能特点
- 格式验证:自动检测无效字符和行列错误
- 错误处理:提供明确的错误提示信息
- 兼容性强:
- 支持空格、制表符等空白字符
- 兼容
.和0两种空格表示法
- 轻量化设计:纯文本格式,无依赖项
使用场景
- 分享谜题:玩家间交换挑战
- 谜题存档:保存未完成的游戏
- 批量处理:教学或测试场景
- 谜题创作:自定义设计新谜题
实现提示:在GUI版本中,可通过"文件"菜单添加"导入"和"导出"选项,调用上述功能模块。
更多推荐
所有评论(0)