Show HN: 我做了一个可以塞进 QR 码的类 Doom 游戏
Kuberwastaken/backdooms
一个灵感来源于 DOOM 1993 和 The Backrooms 的,可以塞进 QR 码的独立游戏。
kuberwastaken.github.io/backdooms/
License
The Backdooms: 在 QR 码上运行 DOOM
是的,这字面上就是整个游戏。你可以扫描它来玩。
🚀 项目概览
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 码:
前提条件
- Python 3.7+
qrcode
库(用于生成 QR 码)pillow
(用于 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 版本,我会非常高兴,因为与此相关的资源非常少。
🙌 鸣谢
- id Software 开发 DOOM
- matttkc 在 5 年前将这个想法放在我脑海里
- Toby Fox 为 Undertale 创作了美妙的音乐,此游戏的 GitHub 托管版本使用了 Bonetrousle 的 8 位版本
由 Kuber Mehta :) 开发
关于
一个灵感来源于 DOOM 1993 和 The Backrooms 的,可以塞进 QR 码的独立游戏。
kuberwastaken.github.io/backdooms/
Topics
game qrcode doom minification thebackrooms