2 पॉइंट द्वारा GN⁺ 2024-12-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें

यह कठिन क्यों था

  • 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 करने पर समस्या आती है
    • A: issue खोलें।
  • Q: CPU ओवरहीट हो जाए या पुराना कंप्यूटर धीमा हो जाए
    • A: FPS environment variable को 30 से कम सेट करके देखें।
  • Q: Bash 5 से नीचे के संस्करण पर काम नहीं करता
    • A: हाँ।
  • Q: क्या यह pure Bash code है?
    • A: नहीं। शुरू में stty को call करके echo disable किया जाता है और exit पर फिर से enable किया जाता है।

1 टिप्पणियां

 
GN⁺ 2024-12-22
Hacker News टिप्पणी
  • यह गेम असल में 3D नहीं है, इसलिए हर कॉलम के लिए केवल एक बार ray tracing रन करके pixel ड्रॉ करना काफ़ी चालाक तरीका है

    • आसमान, घास और वास्तविक objects को render करने के लिए जितनी बार जरूरत हो उतनी बार "यह pixel बनाओ और नीचे जाओ" जैसे स्ट्रिंग को दोहरा कर terminal में print किया गया
    • मैं अन्य सीमित वातावरणों के लिए voxel rendering engine पर काम करने पर भी विचार कर रहा हूँ, और लगता है कि इस project में कुछ उपयोगी चीज़ें मिल सकती हैं
  • अगर आप MS Batch में कोई raycaster ढूँढ रहे हैं, तो GitHub लिंक देख सकते हैं

  • मुझे लगता है कि Bash बहुत धीमा है, इसलिए scripting या interactive उपयोग के लिए यह ठीक नहीं है

    • कुछ popular Linux distributions भी Bash को scripting shell के रूप में इस्तेमाल नहीं करते
  • stty का fork माँगना खटकता है

    • अगले project में शायद Bash और rowhammer के साथ बिना fork के ज़रूरी ioctls call करने का तरीका मिल सकता है
  • अभी भी समझ नहीं आता कि इतनी slow shell क्यों use की जाए

    • ज़्यादातर apps को सिर्फ stdout और stderr में लिखना होता है, इसलिए टेक्स्ट को स्क्रीन पर तेज़ी से print किया जा सकता है
  • मुझे नहीं पता था कि Bash में ऐसा संभव है

    • मुझे लगता था कि मैं Bash में अच्छी पकड़ रखता हूँ, लेकिन यह implementation देखकर आश्चर्य हुआ
    • गणितीय समझ कम है, लेकिन सिर्फ देखने में मज़ा आता है
  • 9 साल पहले वाला awk raycaster भी mention करने लायक है

    • इसे GitHub लिंक से देखा जा सकता है
  • इस project को रन नहीं कर पाने का अफ़सोस है

    • कारण नहीं समझ आया, लेकिन view buffered नाम की फ़ाइल में सेव होकर तुरंत बंद हो जाती है
  • केवल 300 लाइन के कोड में यह बना देना प्रभावित करने वाला है

    • यह project मुझे पसंद है
  • यह challenge सच में शानदार है

    • यह मानना मुश्किल है कि यह संभव है