यह कठिन क्यों था
- Bash की परफॉर्मेंस समस्या: Bash बहुत धीमी है, इसलिए प्रत्येक पिक्सेल पर कमांड रन करने से सही फ्रेम रेट हासिल नहीं किया जा सकता। स्क्रीन की स्थिति को मेमोरी में रखना संभव नहीं है, और array या string से एक्सेस करने में भी काफी समय लगता है।
- गणितीय सीमा: Bash में floating-point support नहीं है और न ही कोई गणितीय function library उपलब्ध है। सभी गणितीय ऑपरेशन पूर्णांक में किए जाते हैं और 100000 से scale किए जाते हैं।
- टर्मिनल ग्राफिक्स समस्या: पिक्सेल दिखाने के लिए Unicode half block का उपयोग करके vertical resolution को दो गुना किया गया है। आसपास के पिक्सेल के रंग पता करने की जरूरत पड़ती है, जबकि Bash में state को store नहीं किया जा सकता।
- अन्य मुद्दे:
- टर्मिनल को पूरी तरह से एक साथ अपडेट करना कठिन है।
- अधिकांश टर्मिनल वीडियो गेम्स के लिए डिज़ाइन नहीं किए गए होते, इसलिए real-time key input संभालना कठिन होता है।
- टर्मिनल को रंगों से भरने के लिए बहुत सारा data चाहिए।
- Bash कई लाइन की strings को एक ही बार print नहीं करता है।
- ECMA48, VT100, VT200, Xterm आदि standards काफी complex और समझने में मुश्किल हैं।
- गणना करने में कठिनाई थी।
FAQ
- Q: विंडो को resize करने पर समस्या आती है
- Q: CPU ओवरहीट हो जाए या पुराना कंप्यूटर धीमा हो जाए
- A:
FPS environment variable को 30 से कम सेट करके देखें।
- Q: Bash 5 से नीचे के संस्करण पर काम नहीं करता
- Q: क्या यह pure Bash code है?
- A: नहीं। शुरू में
stty को call करके echo disable किया जाता है और exit पर फिर से enable किया जाता है।
1 टिप्पणियां
Hacker News टिप्पणी
यह गेम असल में 3D नहीं है, इसलिए हर कॉलम के लिए केवल एक बार ray tracing रन करके pixel ड्रॉ करना काफ़ी चालाक तरीका है
"यह pixel बनाओ और नीचे जाओ"जैसे स्ट्रिंग को दोहरा कर terminal में print किया गयाअगर आप MS Batch में कोई raycaster ढूँढ रहे हैं, तो GitHub लिंक देख सकते हैं
मुझे लगता है कि Bash बहुत धीमा है, इसलिए scripting या interactive उपयोग के लिए यह ठीक नहीं है
sttyका fork माँगना खटकता हैioctlscall करने का तरीका मिल सकता हैअभी भी समझ नहीं आता कि इतनी slow shell क्यों use की जाए
मुझे नहीं पता था कि Bash में ऐसा संभव है
9 साल पहले वाला
awkraycaster भी mention करने लायक हैइस project को रन नहीं कर पाने का अफ़सोस है
bufferedनाम की फ़ाइल में सेव होकर तुरंत बंद हो जाती हैकेवल 300 लाइन के कोड में यह बना देना प्रभावित करने वाला है
यह challenge सच में शानदार है