- The Backdooms एक HTML गेम है जो सीधे QR code से चल सकता है, और इसे DOOM 1993 तथा The Backrooms से प्रेरित होकर बनाया गया है
- यह प्रोजेक्ट QR code स्टोरेज और compression की सीमाओं को परखने तथा QR code के भीतर lightweight web application होस्ट करने का एक नया तरीका दिखाने के लिए डिज़ाइन किया गया है
- इस गेम को QR code स्कैन करके बिना इंटरनेट कनेक्शन के खेला जा सकता है, और यह बेहद compressed रूप में उपलब्ध है
- DecompressionStream API का उपयोग करके ब्राउज़र के भीतर गेम को dynamic तरीके से चलाया जा सकता है
- यह आधुनिक मोबाइल ब्राउज़रों के साथ compatible है, और Python तथा QR code लाइब्रेरी का उपयोग करके QR code बनाया जा सकता है
प्रोजेक्ट अवलोकन
- The Backdooms एक HTML गेम है जो सीधे QR code से चल सकता है, और इसे DOOM 1993 तथा The Backrooms से प्रेरित होकर बनाया गया है
- इसे QR code स्टोरेज और compression की सीमाओं को परखने तथा QR code के भीतर lightweight web application होस्ट करने का एक नया तरीका दिखाने के लिए डिज़ाइन किया गया है
फीचर्स
- पूरी तरह offline: QR code स्कैन करने के बाद इंटरनेट कनेक्शन के बिना गेम खेला जा सकता है
- अत्यधिक compression: Zlib compression, Gzip decompression stream, और base64 encoding का उपयोग करके अंतिम परिणाम को बेहद compressed बनाया गया है
- Self-extracting web page:
DecompressionStream API का उपयोग करके ब्राउज़र के भीतर गेम को dynamic तरीके से चलाया जाता है
- मोबाइल compatible:
DecompressionStream API को सपोर्ट करने वाले आधुनिक मोबाइल ब्राउज़रों में काम करता है (Edge, Yandex, Opera)
इंस्टॉलेशन और dependencies
- तकनीकी रूप से केवल एक आधुनिक web browser की आवश्यकता है, लेकिन लगभग 2.5kb गेम के लिए QR code बनाने हेतु Python 3.7+,
qrcode लाइब्रेरी, और pillow की आवश्यकता होती है
उपयोग का तरीका
1️⃣ गेम को QR code में बदलें
- स्क्रिप्ट को इस कमांड से चलाएँ:
python3 QRGEN.py <your-game.html> <output-qrcode.png>
2️⃣ QR code स्कैन करें
- स्मार्टफोन या QR scanner का उपयोग करके गेम को सीधे web browser में खोल सकते हैं
3️⃣ तुरंत खेलें 🎮
- बिना download या installation के The Backdooms का आनंद लिया जा सकता है
तकनीकी विश्लेषण
Compression workflow
- इनपुट HTML पढ़ना: फ़ाइल या input source से दिए गए HTML content को पढ़ा जाता है
- Zlib compression + GZip decompression: HTML को Zlib से compress किया जाता है और GZip के DecompressionStream का उपयोग करके सर्वोत्तम compression हासिल किया जाता है
- Base64 encoding: compressed data को Base64 में encode किया जाता है ताकि वह text-based बना रहे और HTML फ़ाइल में सुरक्षित रूप से शामिल किया जा सके
- HTML wrapper में शामिल करना: JavaScript-आधारित self-extracting HTML wrapper बनाया जाता है। यह wrapper ब्राउज़र में खुलने पर content को अपने-आप decompress करने वाले DecompressionStream API function को शामिल करता है
- Data URI में बदलना: पूरे HTML को
data:text/html;base64,... फ़ॉर्मेट में बदला जाता है ताकि physical file के बिना उसे आसानी से सेव और share किया जा सके
QR code generation logic
- सिस्टम पहले
qr.make(fit=True) का उपयोग करके content की लंबाई के अनुसार QR आकार को dynamically समायोजित करता है, ताकि संभव हो तो सबसे छोटा QR version बनाया जा सके
- यदि आवश्यक version 40 से अधिक हो जाता है (QR code standard की सीमा), तो
fit=False के साथ version 40 को force किया जाता है
- अधिकतम data capacity की अनुमति देने वाले सबसे निम्न error correction level L का उपयोग करके यथासंभव अधिक data फिट करने की कोशिश की जाती है
- यदि data फिर भी QR v40 level L में फिट नहीं होता, तो process विफल हो जाती है और यह error message लौटाया जाता है कि data QR code में encode करने के लिए बहुत बड़ा है
परिणाम
- सफल होने पर QR code बनाया और दिखाया जाता है
- विफल होने पर process यह error message दिखाकर समाप्त हो जाती है कि data QR code में encode करने के लिए बहुत बड़ा है
लाइसेंस
- यह प्रोजेक्ट MIT लाइसेंस के तहत जारी किया गया है, और इसे स्वतंत्र रूप से उपयोग, संशोधित और साझा किया जा सकता है
क्रेडिट
- DOOM बनाने वाली id Software
- 5 साल पहले यह आइडिया सुझाने वाले matttkc
- Undertale का शानदार संगीत बनाने वाले Toby Fox; इस गेम के GitHub-hosted version में Bonetrousle का 8-bit version उपयोग किया गया है
- Kuber Mehta द्वारा विकसित
1 टिप्पणियां
Hacker News टिप्पणी
मैं कभी-कभी रैंडम प्रोजेक्ट्स शुरू कर देता हूँ, और यह भी वैसा ही एक मामला था। यह इस साल की शुरुआत में एक हफ्ते के दौरान बनाया गया प्रोजेक्ट था, लेकिन मैंने इसे शेयर नहीं किया था, और अब इसे शेयर करने का फैसला किया
अगला प्रोजेक्ट: LLM को QR code में बनाना
यह वाकई शानदार प्रोजेक्ट है। मुझे 'data:' URL के बारे में पता चला। मैं 'data:' URI scheme को जानता था, लेकिन यह नहीं जानता था कि इसे पूरे URL की तरह इस्तेमाल किया जा सकता है। मैंने भी सोचा था कि क्या पूरे गेम को QR code में डाला जा सकता है, लेकिन मैंने गलतफहमी में मान लिया था कि HTTP(s) link ज़रूरी होगा, इसलिए उसे टाल दिया था। इससे मुझे बहुत प्रेरणा मिली: क्या पूरे गेम को QR code में डाला जा सकता है? [YouTube लिंक]
कृपया repository में कुछ screenshots जोड़ें। मैं इसे फोन पर देख रहा हूँ, लेकिन किसी कारण से मुझे सिर्फ 3 बटन और काली स्क्रीन ही दिखाई दी
मैंने iPhone के default QR code scanner से scan किया, लेकिन उसमें "उपयोग करने योग्य data नहीं है" दिखाया
canvas के CSS को
image-rendering: pixelatedसे अपडेट करना चाहिए ताकि image धुंधली न दिखे और crisp दिखाई देkuberwastaken, कृपया ऐसी शानदार चीज़ें बनाते रहें
कमाल का प्रोजेक्ट है। मैं इंतज़ार कर रहा हूँ कि "self-contained QR code" canitrundoom में जोड़ा जाए (हालाँकि तकनीकी रूप से इसे मंज़ूरी मिल पाएगी या नहीं, पता नहीं)
इस प्रोजेक्ट को देखकर लगता है कि हम Snow Crash के और करीब पहुँच रहे हैं। मैं सोच रहा था कि कहीं QR code को देखकर मेरा दिमाग बदल तो नहीं रहा :-D अद्भुत काम है
बहुत बढ़िया। बस एक छोटी-सी बात: DOOM ने raycasting का उपयोग नहीं किया था। यह प्रोजेक्ट Wolfenstein 3D के ज़्यादा समान है, और Wolf3D ने raycasting का उपयोग किया था