Kuberwastaken/backdooms

一个灵感来源于 DOOM 1993 和 The Backrooms 的,可以塞进 QR 码的独立游戏。

kuberwastaken.github.io/backdooms/

License

MIT license

132 stars 6 forks

The Backdooms: 在 QR 码上运行 DOOM

QR Code for The Backdooms

是的,这字面上就是整个游戏。你可以扫描它来玩。

Kuberwastaken - Backdooms Version 13.0 License MIT

🚀 项目概览

The Backdooms 是一个压缩的、自解压的、无限生成 HTML 游戏,灵感来源于 DOOM 1993 和 The Backrooms,可以直接从 QR 码在 Web 浏览器中启动和游玩。

这个项目是我进行了一个星期(现在稍微长一点)的研究,旨在突破 QR 码存储和压缩的限制,以展示一种完全在 QR 码中托管轻量级 Web 应用程序的创新方法。

在这里玩一个压缩稍微少一点的版本 是的,这里是 8bit Undertale 音乐。

📜 特点

完全离线: 扫描 QR 码后,无需网络连接即可玩游戏。该 URL 基本上包含游戏的整个代码。

极致压缩: 采用 Zlib 压缩与 Gzip 解压缩流相结合,以及 base64 编码,使最终结果高度压缩。

自解压网页: 使用 DecompressionStream API 来动态解压缩并在浏览器中执行游戏。

移动设备兼容: 适用于支持 Decompressionstream API 的现代移动浏览器 (Edge, Yandex, Opera)。新特性。

📦 安装与依赖

严格来说,只需要一个现代 Web 浏览器。

但如果我们要深入了解生成一个 ≈ 2.5kb 游戏的 QR 码:

前提条件

安装依赖

pip install qrcode[pil]

🛠️ 使用方法

1️⃣ 将你的游戏转换为 QR 码

运行以下命令:

python3 QRGEN.py <your-game.html> <output-qrcode.png>

例如:

python3 QRGEN.py EVEN-SMALLER-SLAMMER-BACKROOMS.html qrcode.png

2️⃣ 扫描 QR 码

使用智能手机或 QR 扫描仪直接在 Web 浏览器中打开游戏。

3️⃣ 立即畅玩 🎮

享受 The Backdooms,无需下载或安装任何东西!

🔍 技术分解

压缩工作流

flowchart TD
  A[读取输入 HTML] --> B[使用 Zlib 压缩]
  B -->|wbits=15| C[Base64 编码]
  C --> D[嵌入 HTML 包装器]
  
  subgraph browser[浏览器处理]
    D --> E[DecompressionStream 'gzip']
    E --> F{格式不匹配}
  end
  
  F --> G[转换为 Data URI]
  G --> H{适合 QR 码?}
  H -->|是| I[生成 QR 码]
  H -->|否| J[减少 HTML 大小]
  J --> A

读取输入 HTML: 该过程首先从文件或输入源读取给定的 HTML 内容。

Zlib 压缩 + GZip 解压缩: 使用 Zlib 压缩 HTML,并使用 GZip 的 Decompressionstream 以获得最佳压缩效果。

Base64 编码: 压缩后的数据以 Base64 编码,确保其保持基于文本的格式,并且可以安全地嵌入到 HTML 文件中。

嵌入 HTML 包装器: 创建一个基于 JavaScript 的自解压 HTML 包装器。此包装器包含一个 DecompressionStream API 函数,该函数在浏览器中打开时会自动解压缩内容。

Data URI 转换: 整个 HTML 被转换为 data:text/html;base64,... 格式,允许它被轻松存储和共享,而无需物理文件。

QR 码生成逻辑

该系统首先尝试使用 qr.make(fit=True) 生成尽可能小的 QR 版本,该版本会根据内容长度动态调整 QR 码的大小。

如果所需的版本超过 40(QR 码标准限制),它将强制使用版本 40,并将 fit=False

使用最低的纠错级别 L(允许最大的数据容量)以尽可能多地放入数据。

如果数据对于具有级别 L 的 QR v40 仍然太大,则该过程将失败,并返回错误。

结果

如果成功,则生成并显示 QR 码。

如果不是,则该过程终止,并显示一条错误消息,指示数据太大而无法在 QR 码中编码。

了解挫折和反复试验

在我的博客 MindDump 上阅读有关开发历程。

📜 License

该项目以 MIT License 发布 - 可以自由使用、修改和共享。如果看到其他 QR 游戏,甚至看到 QR 码中更好的 DOOM 版本,我会非常高兴,因为与此相关的资源非常少。

🙌 鸣谢

Kuber Mehta :) 开发

关于

一个灵感来源于 DOOM 1993 和 The Backrooms 的,可以塞进 QR 码的独立游戏。

kuberwastaken.github.io/backdooms/

Topics

game qrcode doom minification thebackrooms

Resources

Readme

License

MIT license