Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ DOOM-подобная ΠΈΠ³Ρ€Π°, написанная Π½Π° SQL

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 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-запросы.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ