Files
vending-machine-game/README.md
T
HamedandClaude Opus 5.5 95a2ae851d Turn the game into a third-person Mashhad city game
Replace the linear forest walk with an open area of real western Mashhad
built from OpenStreetMap data, starting at Park Mellat. A father and child,
guided by the Robot Market robot, find vending machines at a park, school,
universities, a metro station and a mall, on foot or by car.

- Iran province briefing map; only Mashhad is unlocked
- Third-person camera, building collision, arcade car and ambient traffic
- Minimap and full city map with addresses, opening hours and A* routing
- Purchase scoring, missions with cash rewards, ranks and an end screen
- Map data build script (OSM + Natural Earth) and new logic tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:27:48 +03:30

6.7 KiB

عملیات مشهد — روبات مارکت

بازی سه‌بعدی مرورگری (Three.js) با حال‌وهوای بازی‌های اکشن سوم‌شخص، بدون سلاح و خشونت. یک پدر و فرزندش، همراه روبات راهنمای روبات مارکت، در خیابان‌های واقعی مشهد می‌گردند، دستگاه‌های وندینگ روبات مارکت را پیدا می‌کنند و با هر خرید امتیاز می‌گیرند.

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

داستان و هدف

  • شروع: ورودی جنوبی بوستان ملت، بزرگراه وکیل‌آباد
  • نقشهٔ ایران: صفحهٔ توجیه مأموریت نقشهٔ استان‌های ایران را نشان می‌دهد. فعلاً فقط مشهد (خراسان رضوی) باز است و شهرهای دیگر قفل‌اند.
  • محدودهٔ قابل بازی: حدود ۴٫۸ در ۳٫۳ کیلومتر از غرب مشهد، شامل بوستان ملت، دانشگاه فردوسی، دانشگاه علوم پزشکی، ایستگاه‌های مترو و مشهد مال. خیابان‌ها، ساختمان‌ها و پارک‌ها از داده‌های واقعی OpenStreetMap ساخته شده‌اند.
  • دستگاه‌ها: بوستان ملت، مجموعه آموزشی راحیل (فقط ۷:۳۰ تا ۱۳:۳۰)، دانشگاه فردوسی و دانشکدهٔ ادبیات (۲۰٪ تخفیف دانشجویی)، دانشگاه علوم پزشکی، ایستگاه مترو آزادی، مشهد مال (از ساعت ۱۰). همهٔ دستگاه‌ها و محصولاتشان فرضی‌اند.

کنترل

کار صفحه‌کلید موبایل
حرکت / رانندگی W A S D یا جهت‌ها جوی‌استیک
دویدن Shift دکمهٔ «دویدن»
چرخاندن دوربین ماوس (با کلیک قفل می‌شود) یا کشیدن کشیدن روی صفحه
زوم دوربین چرخ ماوس —
سوار و پیاده شدن از ماشین F دکمهٔ F
خرید از دستگاه E دکمهٔ E
کشیدن کارت C دکمهٔ E
ترمز دستی Space —
نقشهٔ شهر M یا کلیک روی نقشهٔ گوشه لمس نقشه

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

نقشه و مسیریابی

با کلیک روی نقشهٔ گرد گوشهٔ صفحه، نقشهٔ کامل شهر باز می‌شود. فهرست دستگاه‌ها با آدرس، ساعت کاری، باز یا بسته بودن، محصولات و فاصله نمایش داده می‌شود. «مسیریابی تا اینجا» مسیر را روی شبکهٔ واقعی خیابان‌ها پیدا می‌کند (پیاده روی همهٔ مسیرها، با ماشین فقط روی خیابان‌های سواره‌رو). مسیر به شکل خط طلایی روی زمین، روی نقشهٔ گوشه و روی قطب‌نمای بالای صفحه نمایش داده می‌شود. بدون انتخاب دستی، هدف مأموریت فعلی مقصد است.

امتیاز

رویداد امتیاز
هر خرید ۱۰۰
اولین خرید در هر مکان (کشف) ۲۵۰
خرید نوشیدنی و خوراکی از یک دستگاه ۱۵۰
خرید از هر پنج نوع مکان ۵۰۰

شش مأموریت امتیاز و پاداش نقدی (هتومان) دارند. درجه‌ها از «تازه‌وارد» تا «افسانهٔ مشهد» بالا می‌روند. بودجهٔ اولیه ۵۰۰ هتومان است (۱۰ هتومان = ۱۰۰٬۰۰۰ ریال). وقتی پول کافی برای هیچ خریدی نماند، یا همهٔ مأموریت‌ها انجام شود، عملیات تمام می‌شود. هر ثانیهٔ واقعی ده ثانیه از ساعت بازی است.

اجرا

npm install
npm run dev
npm run build
node --test tests/*.test.js
  • ?quality=low یا دکمهٔ «گرافیک» سایه‌ها را خاموش می‌کند (پیش‌فرض گوشی‌ها).
  • ?debug وضعیت بازی را در window.game در دسترس می‌گذارد.

ساخت دوبارهٔ دادهٔ نقشه

src/data/mellat.json و src/data/iran.json از خروجی خام OpenStreetMap (Overpass API) و Natural Earth ساخته می‌شوند. کوئری‌ها در ابتدای اسکریپت آمده‌اند:

node scripts/build-map-data.mjs city-osm.json poi-osm.json ne_10m_admin_1_states_provinces.geojson

برای اضافه کردن محدودهٔ جدید، bbox اسکریپت و ORIGIN در src/geo.js را تغییر دهید.

ساختار

  • src/main.js: صحنه، دوربین سوم‌شخص، کنترل‌ها، رابط کاربری (HUD)، نقشه، خرید و حلقهٔ بازی
  • src/city.js: ساخت شهر سه‌بعدی از داده‌ها (خیابان، پیاده‌رو، ساختمان، پارک، درخت، ورودی مترو، کوه‌ها)
  • src/map-render.js: نقشهٔ گوشه، نقشهٔ کامل شهر و نقشهٔ ایران
  • src/routing.js: گراف خیابان‌ها، مسیریابی A* و پیدا کردن نام خیابان
  • src/collision.js: برخورد با ساختمان‌ها برای شخصیت‌ها، ماشین و دوربین
  • src/locations.js: دستگاه‌ها، آدرس‌ها، ساعت کاری و محصولات
  • src/game-state.js، src/payment.js، src/scoring.js: پول، خرید، پرداخت، امتیاز، درجه و مأموریت‌ها
  • src/characters.js: پدر، فرزند و روبات راهنما
  • src/vending.js، src/vehicle.js، src/traffic.js: مدل دستگاه، فیزیک ماشین و ترافیک شهری
  • src/geo.js: تبدیل طول و عرض جغرافیایی به مختصات بازی

محدودیت‌ها و گام‌های بعدی

  • مدل‌ها هندسی و سبک‌اند و کیفیت گرافیکی بازی‌های AAA را ندارند.
  • خیابان‌ها یک‌طرفه و چراغ راهنمایی ندارند، و ترافیک فقط روی بلوارهای اصلی است.
  • پیشنهادهای بعدی: امتیاز ایمنی (خط عابر و چراغ قرمز)، تاکسی و قطار شهری، چرخهٔ روز و شب، ذخیرهٔ پیشرفت، جدول امتیاز آنلاین، و محله‌ها و شهرهای دیگر.

نقشه: © مشارکت‌کنندگان OpenStreetMap (ODbL). مرز استان‌ها: Natural Earth.