ظاهر برنامه

با trend شدن زمین‌های متاورس و خرید آن‌ها توسط مردم، شمس‌الله تصمیم گرفته که به فروش زمین‌های متاورسی روی بیاورد. او که جدیداً با وب‌سوکت آشنا شده است، می‌خواهد این پروژه را با وب‌سوکت پیاده‌سازی کند. برای این کار، او سرور این پروژه را ساخته و از شما می‌خواهد که در قسمت فرانت‌اند پروژه به او کمک کنید.

جزئیات پروژه

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌های پروژه

metaverse-lands
├── public
│   ├── favicon.ico
│   └── index.html
├── src
│   ├── components
│   │   └── Block.jsx
│   ├── data
│   │   └── index.js
│   ├── server
│   │   ├── data
│   │   │   ├── MapData.js
│   │   │   └── OwnerData.js
│   │   └── index.js
│   ├── styles
│   │   └── styles.css
│   ├── App.jsx
│   ├── index.js
│   └── setupTests.js
└── package.json
Plain text

راه‌اندازی پروژه

برای اجرای پروژه، باید Node.js و npm را از قبل نصب کرده باشید.

  • پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • در پوشه‌ی metaverse-lands، دستور npm install را برای نصب نیازمندی‌ها اجرا کنید.
  • در همین پوشه، دستور npm start را برای راه‌اندازی پروژه اجرا کنید.

راه‌اندازی سرور

  • ابتدا پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • در پوشه‌ی metaverse-lands، دستور npm install را برای نصب نیازمندی‌ها اجرا کنید.
  • در همین پوشه، دستور npm run server را برای راه‌اندازی سرور پروژه اجرا کنید.

در این پروژه، ارتباط شما با سرور بر بستر وب‌سوکت است و شما تمام داده‌ها را از این طریق سرور دریافت می‌کنید و از همین طریق برای سرور می‌فرستید. در همان لحظه که به وب‌سوکت وصل شوید، شما دیتای مپ یا نقشه و همچنین دیتای دارندگان هر نقطه از نقشه را دریافت می‌کنید.

ساختار داده‌‌ی ارسالی سرور به‌شکل زیر است:

{
  "type": "MAP" | "OWNER",
  "result": "Array",
}
JSON

که type می‌تواند یکی از دو مقدار MAP و OWNER را داشته باشد.

  • تایپ MAP مشخص‌کننده‌ی داده‌های نقشه اصلی است.
  • تایپ OWNER مشخص‌کننده‌ی داده‌های دارندگان هر نقطه از نقشه است.

داده‌های MAP به‌شکل زیر هستند:

{
  "id": "string",
  "type": "LAND" | "WALL",
  "x": "number",
  "y": "number",
}
JSON

بدین ترتیب مختصات تمام نقاط نقشه را سرور برای شما می‌فرستد. دقت کنید داده‌های نقشه مرتب نیست و تمام مختصات در یک آرایه قرار دارد. همچنین اگر ‍type یک نقطه برابر LAND بود، بدین معنا است که آن نقطه زمین است و اگر برابر WALL بود، بدین معنا است که آن نقطه دیوار است. در صورتی که یک نقطه LAND بود، شما باید آن نقطه را به رنگ ‍‍DEFAULT_COLORS.LAND و اگر WALL بود، باید به رنگ DEFAULT_COLORS.WALL در بیاورید.

داده‌های OWNER به‌شکل زیر است:

{
  "compony": "string",
  "color": "string",
  "startCord": {
    "x": "number",
    "y": "number"
  },
  "endCord": {
    "x": "number",
    "y": "number"
  }
}
JSON

در داده‌های بالا، ‍startCord‍ نشان‌دهنده‌ی شروع مختصات نقاطی است که تحت مالکیت فردی با رنگ اتخصاصی color است. همچنین endCord نشان‌دهنده‌ی پایان مختصات است. تمام نقاط بین startCord‍ و endCord تحت مالکیت این فرد یا شرکت است و رنگ این نقط باید به رنگ ‍‍color باشد. با این فرض این نقاط همیشه به شکل مربع یا مستطیل هستند. شما باید بر اساس این داده‌ها، نقشه را ترسیم کنید. پس از آن، در هر لحظه ممکن است سرور داده‌های دارندگان جدید را برای شما بفرستد. شما باید بر اساس داده‌های جدید، نقشه را به‌روزرسانی کنید.

هم‌چنین کاربر فعلی می‌تواند با انتخاب هر نقطه از نقشه، آن نقطه را برای خود خریداری کند.

برای این کار، شما باید ساختار داده‌ای مانند ساختار داده‌ی زیر را برای سرور تحت سوکت بفرستید:

{
  "x": "number",
  "y": "number"
}
JSON

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

نکات

  • در ابتدا باید شما به سوکت سرور وصل شوید. در صورتی که به سوکت وصل نباشید، دیتایی دریافت نمی‌کنید.
  • پس دریافت داده‌های نقشه و دارندگان هر نقطه باید نقشه را بسازید. برای این منظور به کامنت داخل فایل App.jsx توجه کنید.
  • شما باید برای نقطه از نقشه از کامپوننت Block استفاده کنید.
  • رنگ هر نقطه از نقشه باید متناسب با نوع آن نقطه باشد؛ یعنی در صورتی که زمین و دیوار بود، باید از رنگ‌های داده‌شده و در صورتی که تحت مالکیت بود، از رنگ ارسالی سرور استفاده کنید.
  • نقطات زمین ممکن است به مالکیت فرد دیگری در بیاید.
  • هر فرد می‌توانند چندین نقطه داشته باشد، اما داده‌های داخل هر ابجکت دیتای OWNER پیوسته است.
  • دیتای مربوط به نقشه فقط در لحظه اتصال به سوکت ارسال می‌شود.
  • برای مشاهده‌ی بهتر دیتا، می‌توانید پوشه server را بررسی کنید.
  • سوکت در پورت 3001 لوکال هاست اجرا می‌شود. (‍‍‍‍"ws://localhost:3001")
  • برای اطلاعات بیشتر در مورد وب‌سوکت می‌‌توانید از لینک استفاده کنید.
  • تمام داده‌های ثابت در فایل data/index.js قرار داده شده است.
  • شما تنها مجاز به اعمال تغییرات در فایل App.jsx هستید.

آن‌چه باید آپلود کنید

پس از پیاده‌سازی موارد خواسته‌شده، فایل App.jsx را آپلود کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.