You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/fa/6-space-game/6-end-condition/assignment.md

164 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# ساخت یک بازی نمونه
## مروری بر تمرین
اکنون که تسلط کاملی بر شرایط پایان بازی و قابلیت ری‌استارت در بازی فضایی خود پیدا کرده‌اید، زمان آن رسیده است که این مفاهیم را در یک تجربه بازی کاملاً جدید به‌کار برید. شما یک بازی خود را طراحی و می‌سازید که الگوهای مختلف شرایط پایان و مکانیک‌های ری‌استارت را نشان دهد.
این تمرین شما را به تفکر خلاقانه در مورد طراحی بازی ترغیب می‌کند و همزمان مهارت‌های فنی‌ای را که آموخته‌اید تمرین می‌کنید. شما سناریوهای مختلف پیروزی و شکست را بررسی خواهید کرد، پیشرفت بازیکن را پیاده‌سازی می‌کنید، و تجربه‌های جذاب ری‌استارت ایجاد خواهید کرد.
## الزامات پروژه
### ویژگی‌های اصلی بازی
بازی شما باید شامل عناصر ضروری زیر باشد:
**تنوع شرایط پایان**: حداقل دو روش مختلف پایان بازی را پیاده‌سازی کنید:
- **پیروزی مبتنی بر امتیاز**: بازیکن به امتیاز هدف می‌رسد یا آیتم‌های خاصی را جمع‌آوری می‌کند
- **شکست مبتنی بر جان**: بازیکن تمام جان‌ها یا نقاط سلامت خود را از دست می‌دهد
- **تکمیل هدف**: همه دشمنان شکست خورده‌اند، آیتم‌های خاص جمع‌آوری شده‌اند، یا اهداف مشخصی محقق شده‌اند
- **مبتنی بر زمان**: بازی پس از مدت زمان مشخص یا رسیدن شمارش معکوس به صفر به پایان می‌رسد
**قابلیت ری‌استارت**:
- **پاکسازی حالت بازی**: حذف تمام اشیاء بازی قبلی و بازنشانی متغیرها
- **بازراه‌اندازی سیستم‌ها**: شروع تازه با آمار جدید بازیکن، دشمنان و اهداف
- **کنترل‌های کاربرپسند**: ارائه دستورالعمل‌های واضح برای ری‌استارت بازی
**بازخورد به بازیکن**:
- **پیام‌های پیروزی**: جشن گرفتن دستاوردهای بازیکن با بازخورد مثبت
- **پیام‌های شکست**: ارائه پیام‌های تشویق‌کننده که بازیکن را به تکرار بازی ترغیب می‌کند
- **نمایشگر پیشرفت**: نمایش امتیاز فعلی، جان‌ها، یا وضعیت اهداف
### ایده‌ها و الهام‌بخشی بازی
یکی از این مفاهیم بازی را انتخاب کنید یا بازی خود را بسازید:
#### ۱. بازی ماجرایی کنسول
یک ماجراجویی متنی با مکانیک‌های مبارزه بسازید:
```
Hero> Strikes with broadsword - orc takes 3p damage
Orc> Hits with club - hero takes 2p damage
Hero> Kicks - orc takes 1p damage
Game> Orc is defeated - Hero collects 2 coins
Game> ****No more monsters, you have conquered the evil fortress****
```
**ویژگی‌های کلیدی برای پیاده‌سازی:**
- **مبارزه نوبتی** با گزینه‌های حمله متفاوت
- **نقاط سلامت** برای بازیکن و دشمنان
- **سیستم موجودی** برای جمع‌آوری سکه یا آیتم‌ها
- **انواع مختلف دشمن** با سختی‌های متغیر
- **شرط پیروزی** وقتی که همه دشمنان شکست خورده‌اند
#### ۲. بازی جمع‌آوری
- **هدف**: جمع‌آوری آیتم‌های خاص در حالی که از موانع اجتناب می‌کنید
- **شرایط پایان**: رسیدن به تعداد هدف جمع‌آوری شده یا از دست دادن تمام جان‌ها
- **پیشرفت بازی**: دسترسی به آیتم‌ها به مرور سخت‌تر می‌شود
#### ۳. بازی پازل
- **هدف**: حل پازل‌هایی که به‌تدریج دشوارتر می‌شوند
- **شرایط پایان**: تمام مراحل تکمیل شده یا تمام حرکات/زمان تمام شده است
- **ری‌استارت**: بازنشانی به مرحله اول با پاک‌کردن پیشرفت
#### ۴. بازی دفاعی
- **هدف**: محافظت از پایگاه خود در برابر موج‌های دشمنان
- **شرایط پایان**: زنده ماندن در همه موج‌ها (پیروزی) یا تخریب پایگاه (شکست)
- **پیشرفت بازی**: موج‌های دشمن سخت‌تر و بیشتر می‌شوند
## راهنمای پیاده‌سازی
### شروع کار
۱. **طراحی بازی خود را برنامه‌ریزی کنید**:
- حلقه بازی پایه را ترسیم کنید
- شرایط پایان را به‌وضوح تعریف کنید
- شناسایی کنید کدام داده‌ها باید در ری‌استارت بازنشانی شوند
۲. **ساختار پروژه خود را راه‌اندازی کنید**:
```
my-game/
├── index.html
├── style.css
├── game.js
└── README.md
```
۳. **حلقه بازی اصلی خود را ایجاد کنید**:
- مقداردهی اولیه حالت بازی
- مدیریت ورودی کاربر
- به‌روزرسانی منطق بازی
- بررسی شرایط پایان
- رندر کردن حالت فعلی
### الزامات فنی
**از جاوااسکریپت مدرن استفاده کنید**:
- برای اعلام متغیرها از `const` و `let` استفاده کنید
- از توابع فلش (arrow functions) در مواقع مناسب بهره ببرید
- ویژگی‌های ES6+ مانند قالب‌بندی متنی و تخریب (destructuring) را به‌کار ببرید
**معماری مبتنی بر رویداد**:
- هندلرهای رویداد برای تعاملات کاربر ایجاد کنید
- تغییرات حالت بازی را از طریق رویدادها پیاده کنید
- از شنونده‌های رویداد برای قابلیت ری‌استارت بهره بگیرید
**روش‌های کد تمیز**:
- توابع با مسئولیت‌های منفرد بنویسید
- نام‌های متغیر و تابع توصیفی استفاده کنید
- توضیحات مربوط به منطق و قوانین بازی را اضافه کنید
- کد را در بخش‌های منطقی سازمان‌دهی کنید
## الزامات ارسال
### تحویل‌ها
۱. **فایل‌های کامل بازی**: تمام فایل‌های HTML، CSS و جاوااسکریپت مورد نیاز برای اجرای بازی شما
۲. **README.md**: مستنداتی که توضیح می‌دهد:
- چگونه بازی کنید
- چه شرایط پایانی پیاده‌سازی شده‌اند
- دستورالعمل‌های ری‌استارت
- هر ویژگی یا مکانیک خاصی که دارید
۳. **کامنت‌های کد**: توضیحات واضح درباره منطق بازی و الگوریتم‌ها
### چک‌لیست تست
قبل از ارسال، مطمئن شوید که بازی شما:
- [ ] **بدون خطا اجرا می‌شود** در کنسول مرورگر
- [ ] **چندین شرایط پایان** به صورت مشخص پیاده‌سازی شده‌اند
- [ ] **ری‌استارت به درستی انجام می‌شود** با بازنشانی کامل حالت
- [ ] **بازخورد واضح** به بازیکنان درباره وضعیت بازی ارائه می‌دهد
- [ ] **از سینتکس و بهترین روش‌های جاوااسکریپت مدرن** استفاده می‌کند
- [ ] **مستندات جامع** در README.md دارد
## جدول ارزیابی
| معیار | عالی (4) | قابل قبول (3) | در حال توسعه (2) | مبتدی (1) |
|-------|----------|---------------|------------------|-----------|
| **عملکرد بازی** | بازی کامل با چندین شرایط پایان، ری‌استارت روان و تجربه بازی پالایش‌شده | بازی کامل با شرایط پایان پایه و مکانیزم ری‌استارت کارآمد | بازی ناقص با برخی شرایط پایان پیاده‌سازی شده، ری‌استارت ممکن است مشکلات جزئی داشته باشد | بازی ناقص با عملکرد محدود و اشکالات زیاد |
| **کیفیت کد** | کد تمیز و سازمان‌یافته با استفاده از روش‌های مدرن جاوااسکریپت، کامنت‌های جامع و ساختار عالی | سازمان‌دهی خوب کد با سینتکس مدرن، کامنت‌های مناسب و ساختار واضح | سازمان‌دهی پایه کد با برخی روش‌های مدرن، کمبود کامنت | سازمان‌دهی ضعیف، سینتکس قدیمی، فاقد کامنت و ساختار |
| **تجربه کاربری** | گیم‌پلی شهودی با دستورالعمل‌های واضح، بازخورد عالی و تجربه پایان/ری‌استارت جذاب | گیم‌پلی خوب با دستورالعمل‌ها و بازخورد کافی، پایان/ری‌استارت عملیاتی | گیم‌پلی پایه با دستورالعمل‌های کم و بازخورد محدود | گیم‌پلی گیج‌کننده با دستورالعمل‌های نامشخص و بازخورد ضعیف |
| **پیاده‌سازی فنی** | تسلط بر مفاهیم توسعه بازی، مدیریت رویدادها و حالت | درک خوب از مفاهیم بازی با پیاده‌سازی مناسب | درک پایه با پیاده‌سازی قابل قبول | درک محدود با پیاده‌سازی ضعیف |
| **مستندسازی** | README جامع با دستورالعمل‌های واضح، کد مستند شده به‌خوبی و شواهد تست کامل | مستندسازی خوب با دستورالعمل واضح و کامنت‌های کافی | مستندسازی پایه با دستورالعمل‌های کم | مستندسازی ضعیف یا ناقص |
### مقیاس نمره‌دهی
- **عالی (۱۶-۲۰ امتیاز)**: فراتر از انتظار با ویژگی‌های خلاقانه و پیاده‌سازی پالایش شده
- **قابل قبول (۱۲-۱۵ امتیاز)**: برآورده‌کننده تمام الزامات با اجرای خوب
- **در حال توسعه (۸-۱۱ امتیاز)**: بیش‌تر الزامات را برآورده می‌کند با مشکلات جزئی
- **مبتدی (۴-۷ امتیاز)**: برخی الزامات را دارد اما نیاز به بهبود چشمگیر دارد
## منابع آموزشی اضافی
- [راهنمای توسعه بازی MDN](https://developer.mozilla.org/en-US/docs/Games)
- [آموزش‌های توسعه بازی جاوااسکریپت](https://developer.mozilla.org/en-US/docs/Games/Tutorials)
- [مستندات API بوم نقاشی (Canvas)](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)
- [اصول طراحی بازی](https://www.gamasutra.com/blogs/)
> 💡 **نکته حرفه‌ای**: ساده شروع کنید و ویژگی‌ها را تدریجی اضافه کنید. یک بازی ساده و خوب پالایش‌شده بهتر از یک بازی پیچیده با اشکال است!
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**توضیح مهم**:
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است دارای خطاها یا نادقیق‌هایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما در قبال هر گونه سوء تفاهم یا تفسیر نادرست ناشی از استفاده این ترجمه مسئولیتی نداریم.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->