【问题标题】:What's needed to let player create and access its account in Pygame?让玩家在 Pygame 中创建和访问其帐户需要什么?
【发布时间】:2021-08-29 05:10:09
【问题描述】:

我已经安静地学习 Pygame 很长时间了。现在,我正在设法让玩家为游戏创建帐户并在他们在线玩时连接到他们。

我见过一些游戏开发者将玩家数据存储在文本文件中,但这是一种非常经典的方式,而且不安全!所以我想到了数据库......

但是,我认为我误解了数据库的一般工作方式。事实上,我认为它们只是服务器,但在做了一些谷歌研究之后,我意识到它们不是。让我们以 SQLite 为例。 (因为我刚刚学习了SQLite3 python module 的基础知识)。

我以为它将数据存储在服务器或“云”(如 Apple iCloud)中,但后来我意识到它只是将数据存储在计算机磁盘上,如果玩家是例如,从与他们注册时使用的计算机不同的计算机上使用游戏,这是一种可能的情况,我想介绍连接到游戏时可能发生的最大情况,以确保玩家获得良好的游戏体验。

那么,有什么方法可以确保与任何设备的游戏连接良好? 你认为我必须使用套接字模块吗?

注意:

请记住,游戏本身不是多人游戏,也不需要互联网连接。但是,我希望玩家能够从任何设备连接到他们的帐户,以便能够保存他们在游戏中的进度。

【问题讨论】:

  • 您将需要某种服务器,例如可通过 Internet 访问的计算机。在那里,将存储数据库(例如文件),并为不同的玩家提供访问权限。
  • 请注意,您可以使用云作为这种服务器:但请注意,这可能违反相应的 ToS。更好的是像 AWS。
  • 你的意思是你想要支持Play Offline的东西,用户可以在没有互联网连接的情况下玩,但在他们上网后仍然在远程数据库上更新他们的进度?
  • @bdbd 是这样的
  • 如果您想要一个非常简单的解决方案,请将进度保存在一个文件中,让他/她选择保存该文件的位置。他们可能会将其保存在 DropBox 等中,并在设备之间同步。

标签: python database sqlite sockets


【解决方案1】:

您需要为您的游戏创建一个后端。您可以使用 Flask 或 Django 框架来执行此操作。您可以将玩家数据发送到服务器,以便服务器将其存储在数据库中。当用户登录他们的帐户时,服务器会将数据发送到游戏,以便它可以加载用户的进度。

【讨论】:

    【解决方案2】:

    对此有很多不同的方法。作为 Rahul Hindocha pointed,您需要某种后端。

    让我列出我能想到的那些。请注意,我的回答将略带谷歌风格,因为我在那里拥有最丰富的经验。

    1. 在云端运行的 Flask/Django/Falcon 应用程序。该后端可以使用本地存储或 SQL 实现来存储数据。但是,在使用云服务时,您需要注意数据的持久性,例如 fe。 Google App Engine 和 Heroku Dyno 都有临时文件系统,这意味着本地实例上存储的所有数据都会在实例重置时定期删除。不过,Google Compute Engine (GCE) 实例也可以工作,因为其上的文件系统是持久的。
    2. 使用 Google CloudSQL 或运行 SQL 的 GCE 实例,并从您的应用程序连接到该实例。
    3. 使用另一个云存储选项。有很多公司提供在线存储和 python 库来连接它们。还有免费等级。想想亚马逊 AWS (S3)、谷歌云 (GCS/Firestore)、MS Azure、Heroku 等......
    4. Google Drive 来存储登录信息。在我切换到使用 GCS 存储桶之前,我过去曾这样做过。不过,您需要加密/解密应用程序中的数据,因为存储纯文本简直是愚蠢的。我通过将数据放入 JSON 字符串中来做到这一点,然后使用 PyCrypto 加密完整的 JSON 字符串并上传。需要时下载和解密。请参阅this SO answer 了解简短说明。 Google 为此提供了一个库。
    5. Google 表格存储登录信息。将相关信息放入列中,每个用户占一行。您还可以在此处使用加密/解密来确保 SPI/PII 在传输和静止时被加密。谷歌为此提供了一个库,还有gspread,这让它更容易一些。
    6. Raspberry PI 运行上面第 1 项中提到的应用程序。请注意,您需要将其公开到互联网上,并保持其正常运行。这不是我会轻易做的事情(暴露部分)。

    至于离线播放,您可以将其设置为每 x 分钟重试一次的后台线程,并让主线程运行您的游戏逻辑,将需要上传的任何内容存储在本地文件系统上缓存上传:

    1. 主游戏线程将数据保存到 fe。 JSON文件to_be_uploaded.json
    2. 后台上传过程检查互联网连接
    3. 然后检查to_be_uploaded.json是否有内容
    4. 如果 2&3 == True,则从 to_be_uploaded.json 中删除内容并存储在 pending_upload.json
    5. 尝试上传。
    6. 如果成功,删除pending_upload.json 并转到#2。如果没有转到#5

    上面#4 的原因是数据争用,其中主游戏线程尝试添加到to_be_uploaded.json,而后台线程已经加载了对象然后上传它。如果它删除文件to_be_uploaded.json 的内容,它将错过主线程的写入。将数据放入二级缓存文件pending_upload.json 可以解决这个问题,除非我们谈论的是对to_be_uploaded.json 的非常频繁的写入。在这种情况下,您需要研究文件锁定方法。

    还有其他方法可以解决这个问题,但这是思考了几分钟后想到的......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 2014-11-07
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2022-11-13
      相关资源
      最近更新 更多