如何使用Python的import json实现游戏存档与读档功能?
用Python的json模块实现游戏保存与加载功能
嘿,作为编程新手能想到给游戏加保存加载功能真的很赞!我来一步步带你实现这个需求,完全基于你提供的代码片段来修改~
第一步:导入json模块
首先,你需要在代码最顶部导入json模块,这是Python自带的工具,不需要额外安装:
import json
第二步:实现保存功能
我们可以在用户触发保存操作时(比如用户输入save指令),把当前的turn和table打包成一个字典,然后写入到一个JSON文件里。把这段逻辑整合到你的游戏循环中:
import json # 初始游戏数据 table = [ ['4','4','4','0'], [' ','9','9','0'], ['5', '0',' ','2'], [' ',' ','4','4']] turn = 0 # 假设初始回合为0,可根据你的实际逻辑调整 while turn < 16: print('\nTurn',turn+1,'\n') # 加入用户操作选择:输入位置或保存游戏 user_input = input("请输入位置(如1,2),或输入'save'保存游戏:") # 处理保存操作 if user_input.lower() == 'save': # 将需要保存的数据打包成字典 save_data = { "turn": turn, "table": table } # 写入JSON文件(自动处理文件打开/关闭) with open('game_save.json', 'w') as f: json.dump(save_data, f, indent=4) # indent=4让文件格式更易读 print("游戏已保存!") continue # 保存完成后回到循环开头,继续游戏 # 下面是你原来的用户输入处理、数字填入表格的代码 # ... # 用户输入处理代码 # ... # 数字填入表格的代码 print(table) turn += 1 # 别忘了回合数递增
保存逻辑小解释:
- 用字典
save_data把turn和table打包,JSON格式天然支持字典、列表这类常用数据结构,完美匹配你的需求。 with open(...)是Python安全操作文件的标准方式,会自动帮你关闭文件,避免资源浪费。json.dump()负责把Python数据转换成JSON格式写入文件,indent=4是可选设置,能让生成的JSON文件排版更整齐,方便你手动查看存档内容。
第三步:实现加载功能
接下来是读取存档的逻辑,我们可以在游戏启动时自动加载存档,也可以加一个load指令让用户随时触发。这里给你整合两种场景的代码:
import json # 定义初始游戏数据(没有存档时用这个) default_table = [ ['4','4','4','0'], [' ','9','9','0'], ['5', '0',' ','2'], [' ',' ','4','4']] default_turn = 0 # 游戏启动时尝试加载存档 try: with open('game_save.json', 'r') as f: save_data = json.load(f) table = save_data["table"] turn = save_data["turn"] print("成功加载存档!") except FileNotFoundError: # 没有找到存档就用初始数据 table = default_table turn = default_turn print("未找到存档,使用初始游戏数据。") # 游戏循环 while turn < 16: print('\nTurn',turn+1,'\n') user_input = input("请输入位置(如1,2),或输入'save'保存、'load'加载游戏:") if user_input.lower() == 'save': save_data = { "turn": turn, "table": table } with open('game_save.json', 'w') as f: json.dump(save_data, f, indent=4) print("游戏已保存!") continue elif user_input.lower() == 'load': try: with open('game_save.json', 'r') as f: save_data = json.load(f) table = save_data["table"] turn = save_data["turn"] print("成功加载存档!") except FileNotFoundError: print("没有可加载的存档哦!") continue # 你的输入处理、填数字代码 # ... print(table) turn += 1
加载逻辑小解释:
try-except用来处理“存档文件不存在”的情况,避免程序直接崩溃,第一次玩的用户也能正常启动游戏。json.load()负责把JSON文件里的内容转换成Python字典,我们从中取出turn和table赋值给变量,游戏就能回到上次保存的状态啦。
小提醒
- 你的
table里的元素(字符串、空格)都是JSON支持的类型,完全不用担心兼容性问题。 - 存档文件
game_save.json会保存在你运行Python脚本的同一个文件夹里,如果需要自定义存档路径(比如./saves/my_game.json),要确保路径对应的文件夹已经存在,否则会报错。 - 如果想支持多个存档,可以让用户输入存档名称,比如
save my_game1,然后用用户输入的名称作为文件名。
内容的提问来源于stack exchange,提问作者Harukaze




