The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Реализована многопользовательская DOOM-подобная игра, написанная на SQL

10.09.2025 08:28

Представлен проект DOOMQL, развивающий вариант игры DOOM, написанный на SQL и способный выполняться внутри СУБД CedarDB, частично совместимой с PostgreSQL. Игра поддерживает многопользовательский режим и выполняет отрисовку при помощи ASCII-графики. Код проекта распространяется под лицензий MIT.

Все компоненты игры, включая код рендеринга, синхронизации состояния игроков при многопользовательской игре и игрового цикла, написаны на SQL. Игровая логика реализована при помощи таблиц, представлений (VIEW) и хранимых процедур, что отличает DOOMQL от похожих проектов DuckDB-DOOM (использует хранимые процедуры на WebAssembly) и pg_doom (реализован как расширение к PostgreSQL на языке Си).

При разработке DOOMQL использована концепция "всё является данными", при которой для хранения состояния карт, игроков, перемещающихся по уровню объектов, событий ввода, настроек и спрайтов применяются таблицы. Игровой цикл, отвечающий за обработку и обновление игрового состояния, запускается при помощи 20-строчного shell-скрипта, который 30 раз в секунду выполняет SQL-код для расчёта траектории выстрелов, анализа столкновений, обработки ввода и возрождения игроков.

Написанный на SQL 3D-рендер поддерживает трассировку лучей, проецирования спрайтов на 3D-сцену, обработку перекрытия объектов и HUD-интерфейс (Heads-Up Display). Вся логика рендеринга реализована при помощи представлений. Одновременно к игре могут подключаться несколько игроков, синхронизация состояния которых осуществляется при помощи таблиц и представлений.

На стороне пользователя запускается клиент, включающий около 150 строк кода на языке Python. Работа клиента сводится к передаче информации о нажатиях клавиш и выводу кадров в терминал. Вывод организован путём периодически выполняемых SELECT-запросов к представлению "screen" в СУБД, динамически формирующему изображение построчно (каждая выводимая в ответ на запрос SELECT строка соответствует строке на экране). Информация о нажатии клавиш и добавление новых игроков осуществляется через INSERT-запросы.

  1. Главная ссылка к новости (https://cedardb.com/blog/doomq...)
  2. OpenNews: Выпуск проекта FPDoom 1.20250728, развивающего порты Doom и других игр для кнопочных телефонов
  3. OpenNews: Объявлены победители 28 конкурса по написанию запутанного кода на языке Си
  4. OpenNews: Драйвер для ввода цифр при помощи дискового номеронабирателя от старых телефонов
  5. OpenNews: Доступен ELKS 0.8, вариант ядра Linux для старых 16-разрядных процессоров Intel
  6. OpenNews: Эмулятор RISC-V в форме пиксельного шейдера, позволивший запустить Linux в VRChat
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63853-doom
Ключевые слова: doom, game, sql
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (27) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, EuPhobos (ok), 09:39, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    > Все компоненты игры написаны на SQL

    Однако

    > Main loop реализован при помощи 20-строчного shell-скрипта

    Ну уж давайте тогда не говорить: "Полностью на SQL! С блэкджеком и .."

     
     
  • 2.7, Аноним (7), 09:53, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Выдрали из контекста и рады. Цитируйте полностью "shell-скрипта, который 30 раз в секунду выполняет SQL-код для расчёта траектории выстрелов, анализа столкновений, обработки ввода и возрождения игроков."
     
  • 2.25, Аноним (25), 13:22, 10/09/2025 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 2.32, Аноним (32), 16:38, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Когда sql научится вызывать шел команды случится апокалипсис.
     

  • 1.3, Аноним (3), 09:40, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Сисадмину было очень скучно.
     
     
  • 2.22, аролп5 (?), 12:25, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Похоже начался новый учебный код и студенты бросились создавать проекты для своего портфолио на ххру
     
     
  • 3.28, 12yoexpert (ok), 15:30, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    ты хотел сказать "хрю"?
     
     
  • 4.31, Аноним (32), 16:37, 10/09/2025 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     

  • 1.4, Смузихлеб забывший пароль (?), 09:42, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Но зачем и, главное, есть подозрение на недосказанность в заголовке
     
     
  • 2.19, Подстилка Линуса (?), 11:35, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Just for fun
     

  • 1.9, 45633 (?), 09:56, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    чё тока не придумают, чтобы привлечь внимание. Тогда уж стрип-покер нужно было писать.
     
  • 1.10, Аноним (10), 09:57, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Дум в экселе больше впечатлял. А зачем там постгрес, sqlite на много порядков быстрее?
     
     
  • 2.33, Аноним (33), 16:43, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    игра многопользовательская, а sqlite - нет
     
     
  • 3.35, Аноним (10), 17:46, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > игра многопользовательская, а sqlite - нет

    У sqlite сколько угодно может быть пользователей. Писать 1 может в единицу времени. Сколько пользователей планируется? Можно оптимизировать время блокировок, тормозят записи на диск и не сами операции.

     

  • 1.15, Аноним (15), 10:39, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Уже можно писать на вики "SQL - язык общего назначения?"
     
     
  • 2.36, Аноним (36), 19:23, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Её модификации только. Оригинал нет.
     

  • 1.16, Ганс Грубер (?), 10:50, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Но это ни разу не doom, wolf3d с натяжкой
     
     
  • 2.17, eugener (ok), 11:17, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже как посмотрел видео — сразу подумал про wolf3d.
     

  • 1.20, лох (?), 11:58, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Думал, что очередная поделка на SDL
     
  • 1.21, Shura (??), 12:18, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ждём порт на монгу
     
     
  • 2.37, Диды (ok), 19:31, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Срочно переписать на rust!
     

  • 1.23, Аноним (23), 12:47, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >20-строчного shell-скрипта, который 30 раз в секунду выполняет SQL-код для расчёта траектории выстрелов, анализа столкновений, обработки ввода и возрождения игроков

    пошаговый doom

     
  • 1.26, Аноним (26), 13:26, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    После дума внутри дума, всё остальное не удивляет.
     
     
  • 2.30, Аноним (32), 16:36, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    После докера внутри докера, всё остальное не удивляет.
     

  • 1.27, Аноним (27), 14:08, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я студентом на практике начинал так, писал плоскую стрелялку на dBASE портированный на советский ЭВМ.
     
     
  • 2.29, Аноним (32), 16:35, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И всё ради того чтобы написать об этом на сайте написаном на коленке на перле.
     

  • 1.34, Аноним (34), 17:08, 10/09/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру