تتریس بینقص من
این چیست
تتریس یک بازی افسانهای است و یکی از بازیهایی است که من خیلی از آن لذت میبرم. من واقعاً عاشق این بازی هستم و از بازی کردن آن لذت میبرم. این یک آرامبخش عالی برای استرس است. برای یک پروژه سرگرمکنندهٔ آخر هفته، تصمیم گرفتم این بازی را بهصورت یک بازی/اپلیکیشن مرورگری بسازم که هم برای دسکتاپ و هم برای موبایل طراحی شده باشد، با استفاده از اصول کدگذاری وایب. بخش موبایلِ این نسخه از Play-Tetris الهام گرفته شده بود، که یک تنظیمات موبایلی واقعاً خوب با کنترلهای مبتنی بر سوایپ دارد. پیادهسازی من از تتریس را اینجا بررسی و بازی کنید، این همان چیزی است که من فکر میکنم «بینقصترین» نسخهٔ تتریس است.
گیمپلی نسخهٔ من از تتریس، خودتان آن را [اینجا](https://mehmetmhy.github.io/tetris/) بازی کنید
فراتر از کد
هدف من این نبود که یک کلون تتریس را بهعنوان یک پروژهٔ پورتفولیو بسازم یا چیزی جدید یاد بگیرم. من آن را ساختم چون واقعاً به آن نیاز داشتم. وقتی استرس دارم، چه بهخاطر یک هفتهٔ سخت در محل کار باشد یا فقط تلنبار شدن زندگی، تتریس یکی از معدود چیزهای سالمی است که واقعاً به من کمک میکند ریست شوم. وقتی استرس دارم، تمایل دارم زیاد غذا بخورم، که با گذر زمان جمع میشود، بنابراین داشتن چیزی که بدون هیچ عارضهٔ جانبی کار کند برای من موضوع مهمی است. فقط ۱۰ تا ۳۰ دقیقه انداختن بلوکها و احساس میکنم مغزم کمی پاکسازی شده است. این برای من فقط آرام شدنِ معمولی نیست، بلکه راهی است برای داشتن چیزی ساده و متمرکز تا آن استرس را در آن تخلیه کنم. حتی پژوهشهای جالبی وجود دارد که نشان میدهد تتریس میتواند بر نحوهٔ پردازش خاطرات مزاحم و استرس توسط مغز تأثیر بگذارد، برای مثال در آزمایشهای فیلمِ تروما، در افرادی که پس از حوادث واقعی درمان شدهاند، و بهعنوان مکملی برای درمان با تغییرات قابل اندازهگیری در مغز. من نمیخواهم این بازی را به یک درمان پزشکی تبدیل کنم، اما دیدن اینکه شاید علم واقعی پشت چیزی که از قبل احساس میکنم وجود داشته باشد جالب است: اینکه تتریس واقعاً میتواند به مردم کمک کند با استرس کنار بیایند.
پس به دنبال نسخهٔ خوبی از تتریس برای بازی کردن گشتم، و مشکل این بود که هیچچیز موجود واقعاً با نحوهای که من میخواستم بازی کنم جور درنمیآمد. اپلیکیشنهای موبایل در App Store آیاواس پر از تبلیغات و پرداختهای خرد هستند. نسخههای وب کند بودند یا روی گوشی افتضاح به نظر میرسیدند. نسخهٔ کلاسیک NES عالی است اما به یک شبیهساز و سختافزار اضافی نیاز دارد. حتی یک Miyoo Mini خریدم با این فکر که مشکل را حل میکند، و در نهایت فقط یک دستگاه دوم با خودم حمل میکردم تا تتریس بازی کنم. در مقطعی فهمیدم دارم بیشتر وقت صرف پیدا کردن نسخهٔ درست میکنم تا اینکه فقط یکی را خودم بسازم.
با مرورگرهای مدرن، ابزارهای LLM مثل Claude Code، و جریانهای کاریای مثل کدگذاری وایب، بالاخره احساس شد که زمان مناسبی است تا تتریسی را که میخواهم خودم بسازم. سریع، مینیمال، بدون تبلیغات، بدون حساب کاربری، بدون فروشگاه اپ. فقط یک بازی مرورگری که روی گوشی و لپتاپ من کار کند و کاملاً تحت کنترل من باشد. در حدود یک روز یک نسخهٔ کارکردنی داشتم، و بعد از حدود یک هفته کارِ پراکنده برای مقاومسازی و درست درآوردن حس بازی هم روی دسکتاپ و هم روی موبایل، از آن راضی بودم.
آن را به اشتراک میگذارم چون اگر حتی به یک نفر دیگر کمک کند همانطور که به من کمک میکند استرسش را کم کند، واقعاً خوشحال میشوم. چیز کوچکی است، اما گاهی یک چیز کوچک دقیقاً همان چیزی است که به آن نیاز دارید.
ویژگیها
- صفحهٔ کلاسیک ۱۰x۲۰ تتریس
- کنترل کامل با کیبورد روی دسکتاپ و کنترل با ژست لمسی روی موبایل
- تصادفیساز استاندارد هفتتکهٔ کیسهای
- پیشنمایش قطعهٔ نگهداشتهشده و قطعهٔ بعدی
- نمایش قطعهٔ شبح که نشان میدهد قطعهها کجا فرود خواهند آمد
- منحنی سرعت مبتنی بر سطح با تأخیر قفل دینامیک
- پیگیری امتیاز، خطوط، سطح، و رکورد برتر که در فضای ذخیرهسازی محلی پایدار میماند
- امتیازدهی برای سقوط نرم و سقوط سخت
- منوی درونبازی با ادامه، راهاندازی مجدد، خروج، بیصدا کردن موسیقی/افکتهای صوتی، و لینک کد منبع
- انیمیشن چشمکزن پاک شدن خط همراه با افکت صوتی
- پشتیبانی از ناحیهٔ امن iOS (داینامیک آیلند، ناچ، نشانگر خانه)
- پشتیبانی آفلاین از طریق سرویسورکر (پس از نخستین بازدید، بدون اینترنت کار میکند)
- قابل نصب بهعنوان PWA (افزودن به صفحهٔ اصلی در iOS/Android برای تجربهای شبیه اپلیکیشن)
کنترلها
دسکتاپ (کیبورد)
| عمل | کلیدها |
|---|---|
| حرکت | ← → یا A D |
| سقوط نرم | ↓ یا S |
| سقوط سخت | Space |
| چرخش ساعتگرد | ↑ W X |
| چرخش پادساعتگرد | Z |
| نگهداشتن | C یا LShift |
| منو | Esc یا M |
| کد منبع | G (صفحهٔ عنوان) |
موبایل (لمسی)
| عمل | ژست |
|---|---|
| حرکت | سوایپ به چپ / راست |
| سقوط نرم | نگهداشتن و کشیدن به پایین |
| سقوط سخت | تکان سریع به پایین |
| چرخش ساعتگرد | ضربه |
| نگهداشتن | تکان سریع به بالا |
منحنی دشواری
منحنی سرعت و تأخیر قفل در این نسخه با استفاده از پژوهش دربارهٔ اینکه بازیهای کلاسیک و مدرن تتریس چگونه پیشرفت دشواری را مدیریت میکنند، تنظیم شده است. در تتریس NES اصلی، گرانش در سطح ۲۹ به یک ردیف در هر فریم میرسد، که به «صفحهٔ کشتار» مشهور تبدیل شد؛ جایی که بازی برای بیشتر انسانها عملاً غیرقابلبازی میشود. این در واقع یک پایانِ طراحیشده نبود، بلکه بیشتر پیامد جانبیِ سختافزار و این بود که DAS (Delayed Auto Shift) برای همگام شدن با سرعت سقوط بیش از حد کند بود. ویلیس گیبسون این را در سال ۲۰۲۴ ثابت کرد، وقتی از آن فراتر رفت و بازی را در سطح ۱۵۷ کرش کرد.
گیمپلی تتریس کلاسیک ۱۹۸۹ NES (منبع اصلی)
بازیهای مدرن مانند TGM (تتریس: استاد بزرگ) این مسئله را بهگونهای دیگر حل کردند. بهجای اینکه فقط قطعهها را سریعتر و سریعتر بیندازند تا بازی بشکند، TGM گرانش را روی ۲۰G (سقوط فوری) سقف میگذارد و سپس پنجرههای زمانی دیگر مثل تأخیر قفل و DAS را تنگتر میکند تا دشواری افزایش یابد. استاندارد راهنمای تتریس از تأخیر قفل ۵۰۰ میلیثانیه با حداکثر ۱۵ ریست حرکت استفاده میکند، که این نسخه هم از آن پیروی میکند. پژوهش دربارهٔ حالت مرگ TGM2 و TGM3 شیرِس نشان داد که کف عملی برای بازی رقابتی حدود ۲۵۰ میلیثانیه تأخیر قفل با DAS سریع است، در حالی که هر چیزی زیر ۱۳۳ میلیثانیه قلمرو متخصصان بهشمار میرود.
بر پایهٔ همهٔ اینها، منحنی سرعت در اینجا گرانش را به ۳۳ میلیثانیه برای هر ردیف سقف میکند (مشابه سطوح ۱۹ تا ۲۸ NES) بهجای رفتن به سقوط فوری، و DAS از ۱۷۰ میلیثانیه تا ۱۰۰ میلیثانیه در سطوح بالاتر مقیاس میشود تا بتوانید در طول تأخیر قفل از روی صفحه عبور کنید. هدف این بود که سطوح بالاتر بهطرزی وحشیانه سریع حس شوند اما همچنان منصفانه باشند، نزدیکتر به اینکه تتریس ۹۹ و TGM چگونه دشواری پایان بازی را مدیریت میکنند، نه رویکرد اصلی NES که فقط اجازه میدهد سرعت خام از ورودیهای شما پیشی بگیرد.
زیرِ کاپوت
- طراحی واکنشگرا بهینهشده برای هم دسکتاپ و هم موبایل (عمودی)
- اسپرایتهای بلوک از پیش رندر شده و پسزمینهٔ شبکه برای عملکرد بهتر
- استفاده از دیوارهکوبیهای سبک سیستم چرخش استاندارد (SRS) برای چرخش قطعه
- تشخیص ژست لمسی مبتنی بر سرعت برای تمایز قابلاعتماد بین تکان سریع و کشیدن
- سیستم زمانبندی مبتنی بر سطح برای سرعت گرانش و تأخیر قفل
- رکوردهای بالا و تنظیمات صدا با
localStorageپایدار میشوند - منبع موسیقی پسزمینه NmCCQxVBfyM
- منبع افکت صوتی پاک شدن خط UMViM2tHrOk
- این پروژه بهطور کامل متنباز تحت مجوز MIT است
- ساختهشده با ابزارهای هوش مصنوعی زیر:
- Claude Code CLI - کدنویسی/توسعه
- Gemini CLI - کدنویسی/توسعه
- Cha CLI - کدنویسی و نوشتن
- xAI Grok - لوگوها و آیکونها
- Perplexity - پژوهش دربارهٔ باگها
- Google Search - پیدا کردن SVGها و دیگر داراییها
- YouTube + yt-dlp - تهیهٔ کلیپهای صوتی
- FFmpeg - ویرایش فایلهای صوتی
افکار نهایی
این یکی از آن پروژههایی بود که انگیزهاش فنی نبود، شخصی بود. من فقط یک نسخه از تتریس میخواستم که همانطور که خودم میخواستم کار کند، بدون تبلیغات، بدون سختافزار اضافی، و بدون وابستگی به برنامهی شخص دیگری که ممکن بود هر زمان ناپدید شود یا تغییر کند. اینکه توانستم با استفاده از ابزارهای مدرن هوش مصنوعی و کدنویسی حسی، از ایده تا یک بازی صیقلخورده را در حدود یک هفته کار پراکنده برسم، چیزهای زیادی دربارهی جایی که همین حالا در توسعهی نرمافزار هستیم میگوید.
من از زمانی که این نسخه را ساختم، تقریباً هر روز از آن استفاده کردهام، و هنوز هم دقیقاً همان کاری را انجام میدهد که من لازم دارم انجام دهد. این برنامه کمکم میکند از هر چیزی که مرا تحت فشار قرار داده فاصله بگیرم، برای چند دقیقه روی چیزی ساده تمرکز کنم، و با ذهنی روشنتر برگردم. اگر شما هم آن را امتحان کنید و همین کار را برایتان انجام دهد، این بهترین نتیجهای است که میتوانم آرزو کنم. و اگر میخواهید آن را فورک کنید، منحنی سرعت را تنظیم کنید، کنترلها را تغییر دهید، یا روی آن چیزی بسازید، بسمالله. اگر اشکالی پیدا کردید یا پیشنهادی داشتید، آزادید یک issue در مخزن گیتهاب باز کنید. این همان هدفِ متنباز کردن آن است.