تپهٔ آرزوها — روبات مارکت

بازی سه‌بعدی JavaScript با Three.js: پدر و بچه در جنگل راه می‌روند، از دستگاه خرید می‌کنند و به پیک‌نیک می‌رسند. مدل‌ها با کد ساخته شده‌اند. شخصیت کودک با روبات فیروزه‌ای و سفید Robot Market، الهام‌گرفته از تصویر مرجع، جایگزین شده است؛ پدر همراه او باقی می‌ماند. روبات دارای صورت نورانی، آنتن و انیمیشن راه‌رفتن، دریافت محصول و نشستن است.

🎮 اجرای آنلاین بازی

انتشار در GitHub Pages

در تنظیمات مخزن، بخش Settings → Pages → Build and deployment، گزینهٔ Source را روی GitHub Actions قرار دهید. انتشار مستقیم از main / (root) مناسب این پروژه نیست: فایل‌های سورس باید ابتدا با Vite ساخته شوند تا JavaScript، استایل‌ها و وابستگی‌ها برای مرورگر آماده شوند.

گردش‌کار .github/workflows/pages.yml با هر push به main تست‌ها و build را اجرا می‌کند و فقط خروجی dist را منتشر می‌کند. پس از تغییر Source، تغییرات را به main بفرستید یا از بخش Actions گردش‌کار Deploy game to GitHub Pages را دستی اجرا کنید. تنظیم base: './' در Vite مسیر فایل‌های خروجی را با زیرمسیر مخزن سازگار نگه می‌دارد.

اجرا

npm install
npm run dev
npm run build
node --test tests/*.test.js

کنترل

  • چپ / راست یا A / D: حرکت
  • بالا / پایین: زوم دوربین، بدون حرکت شخصیت
  • دکمه‌های چهارجهته: نگه داشتن برای حرکت یا زوم در موبایل
  • E یا دکمهٔ محصولات: باز کردن دستگاه در نزدیکی آن
  • شروع دوباره: بازنشانی داستان، موجودی و زوم

گفت‌وگوها کوتاه‌اند و در کادر سفید پایین صفحه خودکار عوض می‌شوند. هنگام گفت‌وگوها، خرید، تحویل محصول یا باز بودن دفترچه حرکت موقتاً متوقف می‌شود.

دستگاه ۶۰ کانال و خرید با هتومان

واحد بازی «هتومان» است: ۱۰ هتومان = ۱۰۰٬۰۰۰ ریال، یعنی هر هتومان ۱۰٬۰۰۰ ریال. موجودی اولیه ۵۰۰ هتومان است. همهٔ اعداد و قیمت‌ها نمایشی‌اند و پرداخت واقعی ندارند.

دستگاه شش ردیف ده‌تایی با شماره‌های ۱ تا ۶۰ دارد. فقط کانال‌های ۲۱ تا ۶۰ قابل خریدند. با نزدیک شدن به دستگاه، نشان E / تعامل روی کارت‌خوان نمایش داده می‌شود. با E یا لمس نشان، پنجرهٔ خرید باز می‌شود: فقط شماره‌های ۲۱ تا ۶۰ سمت راست و کد، محصول فرضی و قیمت کانال‌های قابل خرید سمت چپ قرار دارند. کلیک روی شماره یا محصول، کد را پر می‌کند؛ «پرداخت» یا Enter مرحلهٔ کارت‌خوان را باز می‌کند. دوربین به کارت‌خوان نزدیک می‌شود؛ سپس با دکمهٔ «کشیدن کارت» یا کلید C مبلغ کسر می‌شود، پیام خرید موفق نمایش داده می‌شود و محصول تحویل داده می‌شود. پیش از کارت کشیدن امکان انصراف بدون کسر موجودی وجود دارد. کدهای فارسی، عربی و انگلیسی پشتیبانی می‌شوند. کانال نامعتبر پول کم نمی‌کند. توضیح تبدیل واحد هم کنار دستگاه و هم داخل پنجره نمایش داده می‌شود.

محصولات فرضی بین کانال‌ها تکرار می‌شوند: آب‌میوه ۳۵، آب ۱۵، بیسکویت ۲۵، شیرکاکائو ۴۰، چای سرد ۴۵، لیموناد ۴۰، شکلات ۳۰، آجیل ۶۵ و کیک ۳۵ هتومان. مسیر تحویل از کانال انتخاب‌شده شروع می‌شود. برای تکمیل مأموریت، هزینهٔ حداقل یک نوشیدنی و یک خوراکی کنار گذاشته می‌شود.

ساختار

  • src/main.js: صحنه، دوربین، دستگاه، رابط و حلقهٔ بازی
  • src/controls.js: جهت حرکت و شرایط مجاز بودن حرکت؛ دیالوگ حرکت را موقتاً متوقف می‌کند
  • src/characters.js: شخصیت‌های مفصلی، تناسب بدن، لباس، چشم‌ها، قدم زدن و تماس دست‌ها
  • src/payment.js: مراحل پرداخت، انصراف و جلوگیری از برداشت تکراری
  • src/game-state.js: قیمت‌های هتومان، موجودی، اعتبارسنجی کد و خرید
  • src/story.js: متن‌های کوتاه، فصل‌ها، انتخاب مسیر و کشف‌ها
  • src/style.css: چیدمان واکنش‌گرا و کادر سفید متن
  • tests/: آزمون مسیر داستان، حرکت، پول و تبدیل‌های شخصیت‌ها

قیمت‌ها و موجودی فقط در ماژول game-state تعریف شده‌اند. محاسبات با هتومان صحیح انجام می‌شود؛ رابط با ارقام فارسی نمایش می‌دهد.

محدودیت‌ها

مدل‌ها هنوز هندسی و سبک هستند؛ تناسب بدن و حرکت طبیعی‌تر شده اما مدل انسانی واقع‌گرایانه یا موشن‌کپچر اضافه نشده است. پرداخت واقعی، ذخیرهٔ پیشرفت و برخورد آزاد با درخت‌ها وجود ندارد. بازیکن در مسیر تعیین‌شده حرکت می‌کند. زمان کامل تجربه هنوز با بازیکن اندازه‌گیری نشده است.

پنجره‌های خرید، دفترچه، پایان و پرداخت پس‌زمینهٔ شیشه‌ای نیمه‌شفاف دارند. نشان تعامل به موقعیت سه‌بعدی دستگاه متصل است و با حرکت دوربین جابه‌جا می‌شود.

تعامل تک‌دکمه‌ای

گزینه‌های چندانتخابی داستان حذف شده‌اند. هر رویداد یک کار مشخص دارد: تماشای خرگوش، برداشتن نقاشی، ادامه در مسیر آفتابی و کامل کردن نقاشی با آسمان طلایی. برای انجام آن، کلید F یا همان دکمهٔ روی صفحه را بزنید. متن‌های معمولی خودکار عوض می‌شوند و پس از پایان گفت‌وگو حرکت دوباره آزاد می‌شود. E تعامل با دستگاه و C کشیدن کارت است. انتخاب شمارهٔ محصول و دکمهٔ پرداخت در پنجرهٔ دستگاه باقی است.

سفر از خانه به کوه

بازی با خروج خانواده از خانه شروع می‌شود. با F یا دکمهٔ روی صفحه سوار ماشین شوید؛ با W یا ↑ گاز بدهید، با S یا ↓ ترمز کنید و با A/D فرمان بدهید؛ پس از رسیدن به ورودی جنگل، در ورودی جنگل دوباره F را بزنید تا پیاده شوید. در مسیر جنگل، جمعی از دخترها و پسرها کنار آتش می‌رقصند و خانواده آدرس دستگاه وندینگ را از آن‌ها می‌پرسد. پس از خرید نوشیدنی و خوراکی، مسیر را تا پیک‌نیک بالای کوه ادامه دهید.

دوربین پیش‌فرض سوم‌شخص است؛ با V یا دکمهٔ تغییر دوربین بین نمای اول‌شخص و سوم‌شخص جابه‌جا شوید. برای نگاه به اطراف در نمای اول‌شخص یا چرخاندن دوربین در نمای سوم‌شخص روی صحنه بکشید؛ هنگام تمرکز خودکار روی رویدادها و دستگاه، نمای دوربین ثابت است. W/S یا چپ/راست حرکت در مسیر و Shift دویدن است. این نسخه از مدل‌های هندسی استفاده می‌کند و کیفیت گرافیکی یک بازی AAA ندارد.

گفت‌وگوی هر رویداد هنگام رسیدن به همان نقطه نمایش داده می‌شود و تا پایان آن حرکت متوقف می‌ماند. دوربین نزدیک دستگاه خودکار روی آن تمرکز می‌کند. خانواده پس از رسیدن به قله روی فرش می‌نشینند.

S
Description
A Persian third-person 3D city game: find Robot Market vending machines across real Mashhad streets
Readme
17 MiB
Languages
JavaScript 99.7%
HTML 0.2%
Dockerfile 0.1%