
Представлен открытый проект под названием DOOMQL (SELECT * FROM HELL). Это играбельный шутер от первого лица, буфер кадров которого представляет собой SQL-запрос в SQLite. Исходный код решения написан на Python и опубликован под лицензией MIT.

«DOOMQL начался с намеренно неразумного вопроса: что, если бы SQLite был игровым движком, а не просто местом хранения данных в игре? В результате получилась небольшая оригинальная игра в стиле Doom, в которой SQL управляет движением, столкновениями, врагами, боем, прогрессом и каждым пикселем RGB на экране. Здесь нет SVG, браузера, Canvas или игрового движка, а играбельная среда выполнения не содержит графического кода на Python», — пояснил автор проекта.
Как SQL превращается в изображение? Для каждого кадра SQL считывает таблицы игрока и карты и выдаёт одну строку на пиксель:

Второе представление SQL преобразует эти строки RGB в цветные блоки терминала ▀. Хост Python не выполняет отрисовку: он передает в SQLite необработанные ключи, время и размер терминала, а затем выводит результат выполненного запроса без изменений.

Полный видимый кадр возвращается одним запросом:
SELECT scanline FROM render_frame ORDER BY y;

DOOMQL — это оригинальный рейкастер, похожий на Doom, а не порт Doom. Он не содержит кода Doom, данных WAD, карт, графики, аудио или логотипов и не связан с id Software или её издателями и не поддерживается ими.
Финальное физическое отображение выполняется терминалом. SQL вычисляет каждое значение RGB и выдаёт каждую инструкцию цвета терминала; Python записывает эти байты без изменений. Рассматривайте пользовательские базы данных как доверенные входные данные.
Модифицированная база данных может заменить сохранённый SQL-код во время выполнения и внедрить текст в терминал, поэтому не открывайте недоверенные файлы с параметром —db.
Тригонометрия с плавающей запятой может немного отличаться в сборках SQLite и math-library, поэтому детерминированное воспроизведение гарантируется только в одной и той же среде.
Источник: habr.com