DOOMQL
DOOMQL
Peter Gostev 使用 GPT-5.6 Sol 构建了 DOOMQL,这是一个将 SQLite 作为游戏引擎的类 Doom 游戏,通过 SQL 控制移动、碰撞、敌人、战斗、进度及每个 RGB 像素。游戏实现为 Python 终端脚本,核心使用递归 CTE 在 SQLite 中完成完整 ray tracer。运行脚本生成 SQLite 数据库,可通过 Datasette 配合 Datasette Apps 插件创建 HTML+JavaScript 应用,实时显示游戏画面并支持小地图功能。
DOOMQL
Peter Gostev 使用 GPT-5.6 Sol 构建了这个项目。这非常有趣:DOOMQL 从一个刻意不合理的问题开始——如果 SQLite 本身就是游戏引擎,而不仅仅是游戏存储数据的地方,会怎样?结果是一个小巧、原创的类 Doom 游戏,其中 SQL 负责控制移动、碰撞、敌人、战斗、进度以及屏幕上的每一个 RGB 像素。它实现为一个 Python 终端脚本——我这样试玩了一下:
cd /tmp
git clone https://github.com/petergpt/doomql
cd doomql
uv run host/doomql.py
下面这个庞大的 SQL 查询使用递归 CTE(公用表表达式)在 SQLite 中实现了一个完整的 ray tracer(光线追踪器)。运行上述脚本会创建一个 /tmp/doomql/.doomql/doomql.sqlite SQLite 数据库,你可以像这样使用 Datasette 来探索它:
uvx --prerelease=allow --with datasette-apps datasette \
/tmp/doomql/.doomql/doomql.sqlite \
-p 4444 --root --secret 1 --internal internal.db
--with datasette-apps 选项会安装新的 Datasette Apps 插件,该插件支持创建自定义的 HTML+JavaScript 应用,这些应用可以直接在 Datasette 界面中运行 SQL 查询。我创建了一个新应用,将复制粘贴的提示词输入到 Claude 聊天(Fable 5)中,并告诉它:
构建一个应用,使用
frame_pixels视图(包含 x、y、r、g、b 列)显示屏幕的当前状态,并让它每秒刷新一次。
这让我在 Datasette 中获得了一个可用的 HTML+JavaScript 应用,当我在终端中玩游戏时,它能反映当前状态。然后我补充道:
添加一个小地图
现在我的 Datasette 应用看起来像这样:
[此处应有图片]
以下是 HTML 应用代码——将其粘贴到你自己的 Datasette 实例中(使用上面提到的 uvx --with datasette-apps 配方),即可自行尝试。
来源:@petergostev
标签:games, sql, sqlite, ai, datasette, generative-ai, llms, ai-assisted-programming, gpt, datasette-apps