70 lines
8.6 KiB
Markdown
70 lines
8.6 KiB
Markdown
# تپهٔ آرزوها — روبات مارکت
|
|
|
|
بازی سهبعدی JavaScript با Three.js: پدر و بچه در جنگل راه میروند، از دستگاه خرید میکنند و به پیکنیک میرسند. مدلها با کد ساخته شدهاند.
|
|
|
|
🎮 [اجرای آنلاین بازی](https://hamedabdollahzade.github.io/vending-machine-game/)
|
|
|
|
## انتشار در 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 مسیر فایلهای خروجی را با زیرمسیر مخزن سازگار نگه میدارد.
|
|
|
|
## اجرا
|
|
|
|
```sh
|
|
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 ندارد.
|
|
|
|
گفتوگوی هر رویداد هنگام رسیدن به همان نقطه نمایش داده میشود و تا پایان آن حرکت متوقف میماند. دوربین نزدیک دستگاه خودکار روی آن تمرکز میکند. خانواده پس از رسیدن به قله روی فرش مینشینند.
|