游戏存档读档后回合显示异常求助:加载存档时显示回合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
关键修改说明
- 提取回合数:通过
split()把Turn 11拆分成['Turn', '11'],取第二个元素转成整数赋值给turn,这样返回的就是存档里的正确回合数了。 - 清空棋盘:调用
board.clear()确保每次读档都是全新的棋盘,不会和之前的旧内容混在一起。 - 自动文件管理:用
with语句打开文件,不需要手动调用close(),避免忘记关闭文件导致的异常。
现在你再测试一下:回合11存档后,加载游戏时turn就会被设置为11,输出自然就显示回合11啦。
内容的提问来源于stack exchange,提问作者kitsuwune
相关产品推荐
相关产品推荐

