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 обязательно


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

    Однако

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

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

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

  • 1.3, Аноним (3), 09:40, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Сисадмину было очень скучно.
     
     
  • 2.22, аролп5 (?), 12:25, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Похоже начался новый учебный код и студенты бросились создавать проекты для своего портфолио на ххру
     

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

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

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

     
     
  • 4.38, Аноним (38), 20:13, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Осталось сделать так, чтобы у всех был доступ к файлу с базой и блокировкам. Сразу скажу, что PG поднять проще.
     
     
  • 5.41, Аноним (10), 21:31, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Можно через p2p в браузере? Кто-то 1 хостит.
     

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

  • 1.16, Ганс Грубер (?), 10:50, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Но это ни разу не doom, wolf3d с натяжкой
     
     
  • 2.17, eugener (ok), 11:17, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже как посмотрел видео — сразу подумал про wolf3d.
     
  • 2.40, Аноним (40), 20:54, 10/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Всё ради хайпа жи. Дум портировали на 10050 разных устройств и переписывали в том числе и на расте. Вольф3Д таким похвастаться не может (хотя его тоже в своё время на некоторые ОС, отличные от  DOS, переносили).
     

  • 1.20, лох (?), 11:58, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Думал, что очередная поделка на SDL
     
  • 1.21, Shura (??), 12:18, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ждём порт на монгу
     
  • 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 +/
    После докера внутри докера, всё остальное не удивляет.
     

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

  • 1.34, Аноним (34), 17:08, 10/09/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.39, Анон1110м (?), 20:50, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот на это и похож мир web'ного программирования. Гордость за костыльные костыли, восхваление вшивенького JavaScript, не сайты и HTML–страницы а web–приложения, божествення асинхронность священного JavaScript и т.д.
     
  • 1.43, Ценитель GPL рогаликов (?), 22:13, 10/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Даже немного криповатенько. Наверное в детстве от такого action-horror-а в ночное время было бы немножко ссыкотно. ASCII и 2-х цветная палитра только добавляют атмосферности. 10 из 10. Не забудьте приобрести ультимативное издание с ранним доступом.
     
  • 1.46, Аноним (46), 00:49, 11/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > На стороне пользователя запускается клиент, включающий около 150 строк кода на языке Python. Работа клиента сводится к передаче информации о нажатиях клавиш и выводу кадров в терминал.

    Вся идея на смарку пошла

     
     
  • 2.53, Аноним9444935593 (?), 15:23, 11/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А как надо было?
     

  • 1.47, Ivan7 (ok), 03:51, 11/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Жуть какая! Сколько же у людей энергии пропадает впустую...
     
  • 1.49, принцесса закорючка (?), 10:54, 11/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Дух линукс-игр жив!
     
     
  • 2.50, Аноним (50), 11:38, 11/09/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Хотите Tux Racer на SQL? :)
     

  • 1.51, Аноним (50), 11:47, 11/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Игра DOOM на SQL, способная выполняться в СУБД... Minecraft-сервер на COBOL отдыхает.
    Ждём игори на Bash, 1C, Brainfuck.
     
  • 1.52, Аноним (52), 12:58, 11/09/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Написанный на SQL 3D-рендер поддерживает трассировку лучей, проецирования спрайтов

    Скорее всего, имелось в виду:
    Написанный на SQL псевдо-3D рендер использует raycasting (https://en.wikipedia.org/wiki/Ray_casting#Ray_casting_in_early_computer_games) для отрисовки, поддерживает проецирование спрайтов...

     

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



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

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