1

我正在使用(非常)旧的 Python 库 PyGame 制作游戏。但这不是我要问的。

如何编写代码来检查具有最新版本的服务器中的存储库,检查版本是否更新或相同,如果更新提示用户下载(或拒绝)游戏更新,因为它将将在多个版本中开发,并允许玩家随着我们进行更改而逐步更新。

就像 Minecraft 一样,一旦更新出来,它就会提示你更新……但在 Python 中

4

1 回答 1

1

为此,您需要做 3 件事:

  1. 一个服务器,您将在其中存储有关更新和版本的所有信息。

    • 它可以是一个只有一个页面的 Web 服务器(对于 Python,请参见flaskweb.pydjangopylons等,或 PHP 或其他)。
    • 它将当前版本作为输入(GET/POST请求)并输出可用的更新(以可以解析的格式,JSON最好是 XML 或纯文本)。
    • 这些可以从数据库中获取(请参阅MySQLpostgresql或任何适用于您选择的 Web 服务器的 ORM,sqlalchemy
    • 或者通过检查服务器上可用文件的名称(如果文件将托管在同一 Web 服务器上)(名称将具有模式XXX-r24-20121224.tar.gz,您将检查文件列表glob或其他内容)。
  2. 每次启动游戏时都会查询服务器的一段代码,以检查网络服务器是否有更新。例如,您可以使用requestsurllib2

  3. 一段将下载和更新您的实际游戏的代码。

    • Web 服务器应为您提供更新文件所在位置的链接
    • 从那里您必须下载它(使用requestsor urllib2
    • 解压缩它(使用zipfileor tarfile)并用它替换您的实际文件。
    • 现在这一切都取决于您的文件的布局方式:
      • 如果您要分发源代码,您可以将其全部构建在一个包中,然后您只需替换整个包。
      • 包和 Python 实际上说明了这zipfile一点,它们为您提供了仅将 Python 文件放入 zip 文件中的选项,而 Python 为您提供了将所述 zip 文件添加到PYTHONPATH并直接从那里导入的选项。
      • 如果您使用py2exe或其他任何东西编译它,这将是一个不同的问题:您可能只能更新一个 zip 文件,或者替换实际的 DLL 和其他东西,这可能是一团糟。
      • 如果它是一个 deb 包或类似的包,您可能希望使用它来更新,并要求用户执行此操作或其他操作。

我希望这会有所帮助,即使它非常抽象。必须这样做:)

现在我将给出我自己的(有偏见的)意见:如果您已经有一个网站正在运行,请使用它来为这样的事情添加一个页面。否则我会推荐一个免费的主机,它允许你使用烧瓶建立一个网站。我建议这样做,因为它很容易立即运行,而且它允许您使用出色的 ORM sqlAlchemy。此外,我只会告诉用户有一个新版本并让他们弄清楚从哪里获得它。除非您只以一种标准方式分发它。

于 2012-12-27T17:48:04.017 回答