Python 数独小游戏拓展:自定义谜题导入与导出功能

实现思路
  1. 数据结构:使用二维列表存储数独谜题,$0$ 表示空格
  2. 文件格式:采用纯文本格式,每行9个字符(数字或点号)
  3. 功能模块
    • 导入:解析文本文件 → 验证格式 → 加载到游戏
    • 导出:转换当前谜题 → 生成标准格式 → 保存文件
核心代码实现
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. 每行代表数独的一行
  2. 使用数字 1-9 表示已知数字
  3. 使用点号 .0 表示空格
  4. 示例文件内容:
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)
    
    # 其他游戏逻辑...

功能特点
  1. 格式验证:自动检测无效字符和行列错误
  2. 错误处理:提供明确的错误提示信息
  3. 兼容性强
    • 支持空格、制表符等空白字符
    • 兼容 .0 两种空格表示法
  4. 轻量化设计:纯文本格式,无依赖项
使用场景
  1. 分享谜题:玩家间交换挑战
  2. 谜题存档:保存未完成的游戏
  3. 批量处理:教学或测试场景
  4. 谜题创作:自定义设计新谜题

实现提示:在GUI版本中,可通过"文件"菜单添加"导入"和"导出"选项,调用上述功能模块。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐