You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python的import json实现游戏存档与读档功能?

用Python的json模块实现游戏保存与加载功能

嘿,作为编程新手能想到给游戏加保存加载功能真的很赞!我来一步步带你实现这个需求,完全基于你提供的代码片段来修改~

第一步:导入json模块

首先,你需要在代码最顶部导入json模块,这是Python自带的工具,不需要额外安装:

import json

第二步:实现保存功能

我们可以在用户触发保存操作时(比如用户输入save指令),把当前的turntable打包成一个字典,然后写入到一个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_dataturntable打包,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字典,我们从中取出turntable赋值给变量,游戏就能回到上次保存的状态啦。

小提醒

  • 你的table里的元素(字符串、空格)都是JSON支持的类型,完全不用担心兼容性问题。
  • 存档文件game_save.json会保存在你运行Python脚本的同一个文件夹里,如果需要自定义存档路径(比如./saves/my_game.json),要确保路径对应的文件夹已经存在,否则会报错。
  • 如果想支持多个存档,可以让用户输入存档名称,比如save my_game1,然后用用户输入的名称作为文件名。

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

火山引擎 最新活动