You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏存档读档后回合显示异常求助:加载存档时显示回合1而非回合11

问题排查与修复方案

嘿,我一眼就看到问题出在哪了——你的读档函数根本没把存档里的回合数读出来并更新!咱们一步步理清楚:

问题根源

你写的save_game确实把当前回合数(比如11)写到了文件第一行:Turn 11,但load_game里只是用f.readline()跳过了这一行,完全没提取里面的数字,最后返回的还是你一开始传进去的初始turn值(也就是1),那加载后显示回合1就不奇怪了。

另外还有个隐藏小bug:每次读档时,你是直接往board里追加新内容,而不是先清空旧内容,这会导致棋盘越变越乱,咱们一起修好。

修复后的代码

存档函数(优化后更安全高效)

我帮你调整了写法,用with语句自动管理文件关闭,比手动close()更稳妥,同时用join拼接字符串比循环拼接更高效:

def save_game(buildings, building_count, turn):
    with open('data.txt', 'w') as f:
        # 写入当前回合数
        f.write('Turn {}\n'.format(turn))
        # 遍历棋盘每一行,用逗号拼接后写入文件
        for row in board:
            f.write(','.join(row) + '\n')
    return buildings, building_count, turn

读档函数(重点修改核心逻辑)

这里要补上读取回合数、清空旧棋盘的关键逻辑:

def load_game(buildings, building_count, turn):
    with open('data.txt','r') as f:
        # 读取第一行的回合信息,提取数字部分
        turn_info = f.readline().strip()
        # 拆分字符串拿到数字:比如"Turn 11"拆分后取第二个元素,转成整数
        turn = int(turn_info.split()[1])
        
        # 清空原有棋盘内容,避免重复加载导致内容叠加
        board.clear()
        # 逐行读取棋盘数据并添加到board中
        for line in f:
            data = line.strip('\n').split(',')
            board.append(data)
    # 返回更新后的回合数
    return buildings, building_count, turn

关键修改说明

  1. 提取回合数:通过split()把Turn 11拆分成['Turn', '11'],取第二个元素转成整数赋值给turn,这样返回的就是存档里的正确回合数了。
  2. 清空棋盘:调用board.clear()确保每次读档都是全新的棋盘,不会和之前的旧内容混在一起。
  3. 自动文件管理:用with语句打开文件,不需要手动调用close(),避免忘记关闭文件导致的异常。

现在你再测试一下:回合11存档后,加载游戏时turn就会被设置为11,输出自然就显示回合11啦。

内容的提问来源于stack exchange,提问作者kitsuwune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:37:36