Реализована монгопользовательская DOOM-подобная игра, написанная на SQL
Представлен проект DOOMQL, развивающий вариант игры DOOM, написанный целиком на SQL и способный выполняться внутри СУБД CedarDB, частично совместимой с PostgreSQL. Игра поддерживает многопользовательский режим и выполняет отрисовку при помощи ASCII-графики. Код проекта распространяется под лицензий MIT.
В DOOMQL вся игра реализована только на SQL, включая код рендеринга, синхронизации состояния игроков при многопользовательской игре и основной игровой цикл. Игровая логика реализована при помощи таблиц, представлений и хранимых процедур на чистом SQL, что отличает DOOMQL от похожих проектов DuckDB-DOOM (использует хранимые процедуры на WebAssembly) и pg_doom (реализован как расширение к PostgreSQL на языке Си).
При разработке DOOMQL использована концепция «всё является данными», при которой для хранения состояния карт, игроков, перемещающихся по уровню объектов, событий ввода, настроек и спрайтов применяются таблицы. Цикл Игровой цикл, отвечающий за обработку и обновление игрового состояния, реализован при помощи 20-строчного shell-скрипта, который 30 раз в секунду запускает SQL-файл gameloop.sql, содержащем логику для расчёта траектории выстрелов, анализа столкновений, обработки ввода и возрождение игроков.
Написанный на SQL рендер поддерживает трассировку лучей, проецирования спрайтов на 3D-сцену, обработку перекрытия объектов и HUD-интерфейс (Heads-Up Display). Вся логика рендеринга реализована при помощи представлений (VIEW). Одновременно к игре могут подключаться несколько игроков, синхронизация состояния который осуществляется при помощи таблиц и представлений.

На стороне пользователя запускается клиент, включающий около 150 строк кода на языке Python. Работа клиента сводится к передаче информации о нажатиях клавиш и выводу кадров в терминал. Вывод организован путём периодически выполняемых SELECT-запросов к представлению «screen» в СУБД, динамически формирующему изображение построчно (каждая выводимая в ответ на запрос SELECT строка соответствует строке на экране). Информация о событиях ввода и добавление новых игроков осуществляется через INSERT-запросы.
Источник: http://www.opennet.ru/opennews/art.shtml? num=63853
© OpenNet
