Start at the factory, add PWA install and GPS real-world mode
The game now begins inside the Negin Sazan Pishgam Radmehr Atousa vending-machine factory on the Mashhad–Chenaran road, and the world extends ~20 km along the real driving route to Park Mellat and Ferdowsi University. - Factory compound: production hall with assembly line, office, yard, gate and company signs; first mission at its half-price demo machine - Map data merged from four OSM extracts (factory zone, route corridor, region main roads, city zone), clipped to a 15 x 18 km region - City meshes chunked and culled by distance; traffic recycled around the player; minimap and city map drawn from cached tiles + overview - The Robot Market robot no longer walks with the family: it comes out of a machine when they arrive, greets them with expression portraits and goes back inside when they leave - PWA: manifest, icons from the robot avatar, offline service worker generated at build time, install button / iOS steps, update prompt; Vazirmatn font bundled instead of Google Fonts - Real-world mode: safety notice, GPS + compass tracking with accuracy smoothing, 20-40 m arrival radius, speed lock and in-person bonus Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,15 +1,21 @@
|
||||
# عملیات مشهد — روبات مارکت
|
||||
|
||||
بازی سهبعدی مرورگری (Three.js) با حالوهوای بازیهای اکشن سومشخص، بدون سلاح و خشونت. یک پدر و فرزندش، همراه روبات راهنمای روبات مارکت، در خیابانهای واقعی مشهد میگردند، دستگاههای وندینگ روبات مارکت را پیدا میکنند و با هر خرید امتیاز میگیرند.
|
||||
بازی سهبعدی مرورگری (Three.js) با حالوهوای بازیهای اکشن سومشخص، بدون سلاح و خشونت. یک پدر و فرزندش از کارخانهٔ سازندهٔ دستگاهها راه میافتند، در خیابانهای واقعی مشهد میگردند، دستگاههای وندینگ روبات مارکت را پیدا میکنند و با هر خرید امتیاز میگیرند. روبات راهنمای روبات مارکت داخل دستگاهها زندگی میکند: وقتی خانواده به یک دستگاه میرسند، از آن بیرون میآید، خوشآمد میگوید و راهنماییشان میکند.
|
||||
|
||||
بازی یک PWA است: روی گوشی نصب میشود و آفلاین هم اجرا میشود.
|
||||
|
||||
🎮 [اجرای آنلاین بازی](https://hamedabdollahzade.github.io/vending-machine-game/)
|
||||
|
||||
## داستان و هدف
|
||||
|
||||
- **شروع:** ورودی جنوبی بوستان ملت، بزرگراه وکیلآباد
|
||||
- **شروع:** سالن تولید کارخانهٔ **شرکت نگین سازان پیشگام رادمهر آتوسا** (بزرگراه مشهد–چناران، خیابان کاله، کنار پارک علم و فناوری خراسان). کارخانه سالن تولید با خط مونتاژ، دفتر، حیاط، دروازه و تابلوی شرکت دارد. ماشین خانواده در حیاط پارک است.
|
||||
- **مسیر:** از کارخانه تا بوستان ملت حدود ۲۰ کیلومتر رانندگی است، از بزرگراه مشهد–چناران، بزرگراه پیامبر اعظم، بزرگراه آزادی و وکیلآباد.
|
||||
- **نقشهٔ ایران:** صفحهٔ توجیه مأموریت نقشهٔ استانهای ایران را نشان میدهد. فعلاً فقط مشهد (خراسان رضوی) باز است و شهرهای دیگر قفلاند.
|
||||
- **محدودهٔ قابل بازی:** حدود ۴٫۸ در ۳٫۳ کیلومتر از غرب مشهد، شامل بوستان ملت، دانشگاه فردوسی، دانشگاه علوم پزشکی، ایستگاههای مترو و مشهد مال. خیابانها، ساختمانها و پارکها از دادههای واقعی OpenStreetMap ساخته شدهاند.
|
||||
- **دستگاهها:** بوستان ملت، مجموعه آموزشی راحیل (فقط ۷:۳۰ تا ۱۳:۳۰)، دانشگاه فردوسی و دانشکدهٔ ادبیات (۲۰٪ تخفیف دانشجویی)، دانشگاه علوم پزشکی، ایستگاه مترو آزادی، مشهد مال (از ساعت ۱۰). همهٔ دستگاهها و محصولاتشان فرضیاند.
|
||||
- **محدودهٔ قابل بازی:** حدود ۱۵ در ۱۸ کیلومتر از شمالغرب تا غرب مشهد، همه از دادههای واقعی OpenStreetMap:
|
||||
- جزئیات کامل اطراف کارخانه و محدودهٔ بوستان ملت و دانشگاه فردوسی
|
||||
- همهٔ خیابانها و ساختمانها در فاصلهٔ ۲۵۰ متری مسیر رانندگی
|
||||
- شبکهٔ خیابانهای اصلی در کل منطقه
|
||||
- **دستگاهها:** دستگاه نمونهٔ کارخانه (نصف قیمت)، بوستان ملت، مجموعه آموزشی راحیل (فقط ۷:۳۰ تا ۱۳:۳۰)، دانشگاه فردوسی و دانشکدهٔ ادبیات (۲۰٪ تخفیف دانشجویی)، دانشگاه علوم پزشکی، ایستگاه مترو آزادی، مشهد مال (از ساعت ۱۰). همهٔ دستگاهها و محصولاتشان فرضیاند.
|
||||
|
||||
## کنترل
|
||||
|
||||
@@ -38,9 +44,29 @@
|
||||
| هر خرید | ۱۰۰ |
|
||||
| اولین خرید در هر مکان (کشف) | ۲۵۰ |
|
||||
| خرید نوشیدنی و خوراکی از یک دستگاه | ۱۵۰ |
|
||||
| خرید از هر پنج نوع مکان | ۵۰۰ |
|
||||
| خرید از هر پنج نوع مکان شهری | ۵۰۰ |
|
||||
| خرید در حالت دنیای واقعی | ۲۰۰ |
|
||||
|
||||
شش مأموریت امتیاز و پاداش نقدی (هتومان) دارند. درجهها از «تازهوارد» تا «افسانهٔ مشهد» بالا میروند. بودجهٔ اولیه ۵۰۰ هتومان است (۱۰ هتومان = ۱۰۰٬۰۰۰ ریال). وقتی پول کافی برای هیچ خریدی نماند، یا همهٔ مأموریتها انجام شود، عملیات تمام میشود. هر ثانیهٔ واقعی ده ثانیه از ساعت بازی است.
|
||||
هفت مأموریت امتیاز و پاداش نقدی (هتومان) دارند. درجهها از «تازهوارد» تا «افسانهٔ مشهد» بالا میروند. بودجهٔ اولیه ۵۰۰ هتومان است (۱۰ هتومان = ۱۰۰٬۰۰۰ ریال). وقتی پول کافی برای هیچ خریدی نماند، یا همهٔ مأموریتها انجام شود، عملیات تمام میشود. هر ثانیهٔ واقعی ده ثانیه از ساعت بازی است.
|
||||
|
||||
## نصب روی گوشی (PWA)
|
||||
|
||||
- **اندروید و Chrome کامپیوتر:** دکمهٔ «نصب بازی روی گوشی» در صفحهٔ شروع، یا گزینهٔ Install در منوی مرورگر
|
||||
- **آیفون:** در Safari، دکمهٔ Share و بعد Add to Home Screen. دکمهٔ نصب در بازی همین راهنما را نشان میدهد.
|
||||
|
||||
آیکون از آواتار روبات روبات مارکت ساخته شده (`public/icons`). بعد از اولین اجرا همهٔ فایلها، از جمله نقشه و فونت Vazirmatn (داخل پروژه، بدون Google Fonts)، کش میشوند و بازی آفلاین اجرا میشود. با انتشار نسخهٔ جدید، پیام «نسخهٔ جدید بازی آماده است» نمایش داده میشود. Service Worker را `vite.config.js` در زمان build میسازد.
|
||||
|
||||
## حالت دنیای واقعی (GPS)
|
||||
|
||||
دکمهٔ «📍 بازی در دنیای واقعی» در صفحهٔ شروع یا «📍 دنیای واقعی» در نوار پایین این حالت را روشن میکند. اول نکتههای ایمنی نمایش داده میشود و بعد اجازهٔ موقعیت و قطبنما گرفته میشود.
|
||||
|
||||
- خانواده روی نقشهٔ بازی همانجایی است که گوشی هست و با راه رفتن واقعی جابهجا میشود. جهتشان از قطبنمای گوشی یا جهت حرکت گرفته میشود.
|
||||
- موقعیتهای GPS بر اساس دقتشان نرم و ترکیب میشوند. «رسیدن» به دستگاه با شعاع ۲۰ تا ۴۰ متر (بسته به دقت GPS) سنجیده میشود. وقتی رسیدید، روبات از دستگاه بیرون میآید و خرید ۲۰۰ امتیاز اضافه دارد.
|
||||
- در سرعت بیش از حدود ۲۲ کیلومتر بر ساعت خرید غیرفعال است. ماشین مجازی هم در این حالت استفاده نمیشود.
|
||||
- بیرون از محدودهٔ بازی، فاصله تا نزدیکترین دستگاه نمایش داده میشود.
|
||||
- موقعیت فقط روی خود گوشی پردازش میشود. دوربین و قطبنما به HTTPS نیاز دارند.
|
||||
|
||||
فاز بعد، حالت دوربین (AR)، روی همین پایه ساخته میشود: تصویر زندهٔ دوربین بهعنوان پسزمینه، و دستگاه و روبات در جهت و فاصلهٔ واقعی روی آن.
|
||||
|
||||
## اجرا
|
||||
|
||||
@@ -59,21 +85,24 @@ node --test tests/*.test.js
|
||||
`src/data/mellat.json` و `src/data/iran.json` از خروجی خام OpenStreetMap (Overpass API) و Natural Earth ساخته میشوند. کوئریها در ابتدای اسکریپت آمدهاند:
|
||||
|
||||
```sh
|
||||
node scripts/build-map-data.mjs city-osm.json poi-osm.json ne_10m_admin_1_states_provinces.geojson
|
||||
node scripts/build-map-data.mjs --osm city.json zone-factory.json corridor.json major.json --poi poi.json --provinces ne_10m_admin_1_states_provinces.geojson
|
||||
```
|
||||
|
||||
برای اضافه کردن محدودهٔ جدید، bbox اسکریپت و `ORIGIN` در `src/geo.js` را تغییر دهید.
|
||||
چهار خروجی OSM (محدودهٔ شهر، محدودهٔ کارخانه، کریدور مسیر و خیابانهای اصلی) با هم ادغام میشوند و عنصرهای تکراری حذف میشوند. خیابانها هم در مرز منطقه بریده میشوند. برای افزودن محدودهٔ جدید، یک خروجی دیگر به `--osm` اضافه کنید و در صورت نیاز `REGION` را در اسکریپت بزرگتر کنید.
|
||||
|
||||
## ساختار
|
||||
|
||||
- `src/main.js`: صحنه، دوربین سومشخص، کنترلها، رابط کاربری (HUD)، نقشه، خرید و حلقهٔ بازی
|
||||
- `src/city.js`: ساخت شهر سهبعدی از دادهها (خیابان، پیادهرو، ساختمان، پارک، درخت، ورودی مترو، کوهها)
|
||||
- `src/map-render.js`: نقشهٔ گوشه، نقشهٔ کامل شهر و نقشهٔ ایران
|
||||
- `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/characters.js`: پدر و فرزند، و روبات راهنما که از دستگاهها بیرون میآید
|
||||
- `src/factory.js`: محوطهٔ کارخانه، شامل سالن تولید، خط مونتاژ، دفتر، حیاط و تابلوها
|
||||
- `src/pwa.js` و `public/manifest.webmanifest`: نصب، کار آفلاین و پیام بهروزرسانی
|
||||
- `src/realworld.js`: GPS، قطبنما، نرمسازی موقعیت و شعاع رسیدن
|
||||
- `src/vending.js`، `src/vehicle.js`، `src/traffic.js`: مدل دستگاه، فیزیک ماشین و ترافیک شهری
|
||||
- `src/geo.js`: تبدیل طول و عرض جغرافیایی به مختصات بازی
|
||||
|
||||
|
||||
Reference in New Issue
Block a user