返回 2026-07-15
⚙️ 工程

DOOMQLDOOMQL

simonwillison.net·2026-07-13 节选正文

Peter Gostev 使用 GPT-5.6 Sol 构建了 DOOMQL,这是一个基于 SQLite 作为游戏引擎的 Doom 风格游戏。游戏中的移动、碰撞、敌人、战斗、进度和屏幕上的每个 RGB 像素都由 SQL 逻辑控制。这个项目源于一个故意不切实际的问题:如果 SQLite 不仅仅是存储数据的地方,而是游戏引擎本身会怎样。结果证明,用 SQL 实现完整游戏逻辑是可行且极具趣味性的。

Simon Willison

13th July 2026 - Link Blog

DOOMQL (via) Peter Gostev built this using GPT-5.6 Sol. This is a lot of fun:

DOOMQL started with a deliberately unreasonable question: what if SQLite were the game engine, not merely the place where a game stores data? The result is a small, original Doom-like game in which SQL owns movement, collision, enemies, combat, progression and every RGB pixel on screen.

It's implemented as a Python terminal script - I tried it out like this:

cd /tmp
git clone https://github.com/petergpt/doomql
cd doomql
uv run host/doomql.py

Here's the huge SQL query that implements a full ray tracer in SQLite using a recursive CTE.

Running the above script creates a /tmp/doomql/.doomql/doomql.sqlite SQLite database, which you can explore using Datasette like this:

uvx --prerelease=allow  --with datasette-apps datasette \
  /tmp/doomql/.doomql/doomql.sqlite \
  -p 4444 --root --secret 1 --internal internal.db

The --with datasette-apps option installs the new Datasette Apps plugin, which supports creating custom HTML+JavaScript apps that can run SQL queries directly within the Datasette interface.

I created a new app, pasted the copy-paste prompt into Claude chat (Fable 5) and told it:

Build an app that displays the current state of the screen using the frame_pixels view with its x, y, r, g, b columns. have it refresh once a second.

This got me a working HTML+JavaScript app inside Datasette that could reflect the current state while I played the game in my terminal. Then I added:

add a minimap

And now my Datasette App looks like this:

Here's the HTML app code - paste that into your own Datasette instance (using the uvx --with datasette-apps recipe from above) to try it yourself.

需要完整排版与评论请前往来源站点阅读。