首页 > 编程问答 >如何使用 pygbag 和 pygame 使用 pickle 保存数据

如何使用 pygbag 和 pygame 使用 pickle 保存数据

时间:2024-07-27 12:43:08浏览次数:16  
标签:python pygame pickle saving-data pygbag

我有一个游戏,我已经使用 pygbag 移植到浏览器,并且在使用 pickle 加载数据时工作正常,但它不保存数据,但是当在本地运行(不在浏览器上)时它工作正常,我应该如何使用 pickle 保存数据或任何其他带有 pygbag 的保存库?

游戏的其余部分工作正常,并且它也加载所有资源。

保存代码是 -

# saving data
file = open("Civ Data/main.pkl", "wb")
pickle.dump(kingdoms, file)
file.close()

如果无法保存数据,那么有没有办法给玩家一个可以下载并稍后用于加载保存的文件?

完整代码是 - https://github.com/IGR2020/PaperCiv/tree/browser


当然,我可以帮你。在使用 Pygbag 在基于浏览器的游戏中遇到 pickle 保存问题的原因是浏览器环境通常对文件系统的直接访问有限。

让我们探讨一下解决这个问题的方法以及如何实现它们:

1. 基于浏览器的存储

  • 本地存储: 适用于小型数据片段(最多几 MB),这些数据需要在用户的浏览器中保持持久性。

    ```javascript // 在 JavaScript 中保存 localStorage.setItem('kingdomsData', JSON.stringify(kingdoms));

    // 在 JavaScript 中加载 let kingdoms = JSON.parse(localStorage.getItem('kingdomsData')); ```

    在的 Python 代码中,需要使用 pygbag.js 模块在 JavaScript 和 Python 之间进行交互:

    ```python import pygbag import json

    def save_data(kingdoms): kingdoms_str = json.dumps(kingdoms) pygbag.js.eval(f"localStorage.setItem('kingdomsData', '{kingdoms_str}');")

    def load_data(): kingdoms_str = pygbag.js.eval("localStorage.getItem('kingdomsData');") return json.loads(kingdoms_str) if kingdoms_str else None ```

  • 索引数据库 (IndexedDB): 用于更结构化且可能更大的数据集。它是一个更像数据库的选项,内置在现代网络浏览器中。

    javascript // 用于保存的简化 IndexedDB 示例(需要实现更完整的 IndexedDB 交互) function saveToIndexedDB(kingdoms) { // 打开数据库 // 创建(如果需要)一个对象存储 // 将数据存储在对象存储中 }

    还需要像上面使用 localStorage 所做的那样使用 pygbag.js 来桥接 Python 和 IndexedDB。

2. 基于服务器的存储

  • 如果需要持久存储或需要处理大量数据,那么在远程服务器上保存游戏数据是更强大的解决方案。

    • 设置服务器: 可以使用 Flask 或 Django(用于 Python)或任何其他后端技术创建一个服务器来处理数据存储。
    • API: 为的游戏创建一个 API 端点,以通过 fetch XMLHttpRequest 从 JavaScript 发送(保存)和接收(加载)游戏数据。

    ```python # Python 服务器端示例(使用 Flask) from flask import Flask, request, jsonify import pickle

    app = Flask( name )

    @app.route('/save', methods=['POST']) def save_game(): kingdoms = request.get_json() # 使用 pickle 或其他方法将 kingdoms 保存到服务器 return jsonify({'status': 'saved'})

    if name == ' main ': app.run(debug=True) ```

3. 下载文件(变通方法)

可以生成一个包含游戏数据的文件,并让用户将其下载到他们的计算机上。这不会自动保存,但为用户提供了一种存储进度的途径。

```python
import json
from pygbag import download

def allow_download_data(kingdoms):
    kingdoms_str = json.dumps(kingdoms)
    download(kingdoms_str, "kingdoms_save.json")     
```

选择正确的方法

  • 小型数据集: localStorage
  • 中等大小、结构化数据集: IndexedDB
  • 大型数据集、持久性、在线功能: 基于服务器的存储
  • 简单变通方法: 下载文件选项

重要提示: 在基于浏览器的游戏中处理保存数据时,请务必考虑游戏数据的安全性和完整性。评估是否需要服务器端验证或加密等措施来防止作弊或数据丢失。

如果能提供有关游戏规模和是否愿意使用服务器端组件的更多上下文,我可以帮助确定最合适的解决方案。如果还有其他问题,请告诉我!

标签:python,pygame,pickle,saving-data,pygbag
From: 78800496

相关文章

  • crontab 运行 .sh 文件调用 python 脚本
    我有一个pythonselenium脚本,可以打开chrome并为我运行一些自动化任务。在crontab中直接调用python可以使用下面的行。:10.0是我运行echo$DISPLAY时得到的值。我使用的是Ubuntu22.04.4LTS5823**2DISPLAY=:10.0/usr/bin/python3/home/user/Script......
  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......
  • python+flask计算机毕业设计外卖食品安全监管微信小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,外卖行业作为“互联网+餐饮”的典范,近年来呈现出井喷式增长态势,极大地便利了人们的日常生活。然而,外卖食品......
  • python+flask计算机毕业设计楼盘销售系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着房地产市场的蓬勃发展,楼盘销售作为房地产行业的重要环节,其管理效率与服务质量直接影响到企业的市场竞争力和客户满意度。传统的楼盘销......
  • python+flask计算机毕业设计基于web的小区疫情防控信息管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,特别是新冠疫情的持续影响,小区作为城市管理的基础单元,其疫情防控工作显得尤为重要。传统的小区管理方式在面对......
  • Python 3 使用 super() 函数时出现“类型错误:__init__() 获得多个参数值”
    我正在使用继承的Python3编写一个OOP程序,当我尝试像这样初始化子类时遇到标题错误:classParent:def__init__(self,var1,var2):self.var1=var1self.var2=var2#moremethodsthattosomestuffclassChild(Parent):a=1#aan......
  • 为什么我会收到 Python IOError: [Errno 13] 写入文件时权限被拒绝?
    我不明白我做错了什么。我正在运行一些测试并将结果写入文件。写入文件的代码部分如下(在名为Tester的类中):@staticmethoddefprintHeader(resultsFileName):ifnotos.path.isfile(resultsFileName):#Thefiledoesnotexist,thus#......