نکته مهم
به خاطر اینکه امتحان داشتید و زمان کم بود این پروژه دیگه منتشر نشد ولی ریپازیتوریش رو پابلیک کردم کسی خواست بزنه بتونه بزنه
و نمره جداگانه نداره ولی خب اگه کسی زدش تا زمان نمره دادن هم یک مقدار کمکش میکنیم ولی خب میتونید در نظر بگیرید که همچین چیزی وجود نداره
|
برنامهسازی پیشرفته تمرین کامپیوتری شماره ۲ |
مدرس: راضیه قیاسی مهلت تحویل: ۲۰ روز پس از انتشار تمرین |
سلام بچهها امیدوارم حالتون خوب باشه 🌱
توی این تمرین قراره یک نسخه سادهشده و گرافیکی از بازی Plants vs Zombies رو پیادهسازی کنید.
هدف این نیست که بازی اصلی رو کامل و دقیق بازسازی کنید؛ بلکه باید یک نسخه کوچکتر، قابل اجرا و قابل توسعه بسازید که ایده اصلی بازی رو داشته باشه.
زامبیها از سمت راست زمین وارد میشن و به سمت خونه حرکت میکنن. بازیکن باید با کاشتن گیاههای مختلف، مدیریت Sun و دفاع درست، جلوی رسیدن زامبیها به خونه رو بگیره.
پروژه میتواند با یکی از زبانهای زیر پیادهسازی شود:
PythonC++
برای Python میتوانید از کتابخانههایی مثل pygame استفاده کنید.
برای C++ میتوانید از کتابخانههایی مثل SFML، SDL، raylib یا ابزارهای مشابه استفاده کنید.
- استفاده از طراحی شیءگرا الزامی است.
- پروژه باید رابط کاربری گرافیکی داشته باشد.
- پیادهسازی کاملاً کنسولی قابل قبول نیست.
- استفاده از assetهای دادهشده برای نمایش بخشهای اصلی بازی الزامی است.
- منطق اصلی برنامه نباید در تابع
mainیا یک فایل خیلی بزرگ و نامنظم نوشته شود. - برای بخشهای اصلی بازی باید کلاسهای مستقل و مناسب طراحی شود.
- پروژه باید در قالب گروههای ۳ نفره انجام شود.
- تحویل پروژه از طریق GitHub Classroom انجام میشود.
- نسخه نهایی باید بدون خطای اجرایی اجرا شود.
- در برنچ
masterیاmainباید نسخه پایدار و قابل اجرای پروژه قرار داشته باشد. - هر گروه باید آمادگی ارائه پروژه و توضیح طراحی کلاسهای خود را داشته باشد.
در نسخه نهایی، بازیکن باید بتواند:
- بازی را از طریق رابط کاربری گرافیکی اجرا کند.
- کارت گیاهها را مشاهده و انتخاب کند.
- حداقل سه گیاه اصلی را بکارد:
- مقدار
Sunفعلی خودش را ببیند. Sunهای تولیدشده را جمعآوری کند.- زامبیها را ببیند که از سمت راست وارد زمین میشوند و به سمت چپ حرکت میکنند.
- شلیک
PeaShooterو برخورد گلوله با زامبی را ببیند. - کم شدن جان زامبیها و گیاهها را تجربه کند.
- چند موج زامبی را پشت سر بگذارد.
- در صورت دفاع موفق برنده شود.
- در صورت رسیدن زامبی به خانه، بازی را ببازد.
زمین بازی باید شامل موارد زیر باشد:
- ۵ ردیف
- ۹ ستون
- ورود زامبیها از سمت راست زمین
- قرار گرفتن خانه بازیکن در سمت چپ زمین
- امکان کاشت گیاه در خانههای خالی
برای نمایش زمین بازی، باید از asset آماده زیر استفاده شود:
Assets/images/items/Frontyard.png
این تصویر باید بهعنوان پسزمینه اصلی زمین بازی قرار بگیرد و گیاهها، زامبیها، گلولهها و Sunها روی همین زمین نمایش داده شوند.
شمارهگذاری پیشنهادی:
- ردیفها از ۰ تا ۴
- ستونها از ۰ تا ۸
- زامبیها از سمت راست وارد میشوند و به سمت چپ حرکت میکنند.
هر خانه از زمین در حالت عادی فقط میتواند یک گیاه داشته باشد.
گروهها باید روی تصویر Frontyard.png یک grid منطقی ۵×۹ در نظر بگیرند تا محل کاشت گیاهها و حرکت زامبیها مشخص باشد. نمایش خطوط grid روی تصویر الزامی نیست، اما منطق داخلی بازی باید دقیقاً بر اساس همین خانهبندی انجام شود.
موارد زیر برای همه گروهها الزامی است:
- پیادهسازی پروژه با
PythonیاC++ - استفاده از طراحی شیءگرا
- داشتن رابط کاربری گرافیکی
- استفاده از assetهای دادهشده برای نمایش بخشهای اصلی بازی
- پیادهسازی زمین ۵×۹
- استفاده از
Frontyard.pngبهعنوان زمین اصلی بازی - پیادهسازی سیستم
Sun - پیادهسازی کارتهای گیاهها
- پیادهسازی حداقل سه گیاه اصلی:
- پیادهسازی حداقل یک نوع زامبی:
- پیادهسازی حداقل ۳ موج زامبی
- پیادهسازی شلیک، برخورد، آسیب و حذف موجودات
- پیادهسازی شرط برد و باخت
- آماده بودن گروه برای ارائه و توضیح طراحی پروژه
جزئیات دقیق مربوط به HP، سرعت، cooldown، هزینه کاشت، آسیب و رفتار هر گیاه و زامبی در مسیر زیر قرار دارد:
گروهها میتوانند برای گرفتن نمره اضافه، قابلیتهای بیشتری پیادهسازی کنند؛ مثل:
- گیاههای بیشتر:
- زامبیهای بیشتر:
- ابزارهایی مثل:
- منوی شروع بازی
- pause menu
- چند level مختلف
- افکت صوتی
- انیمیشنهای کاملتر
- ذخیره و بارگذاری وضعیت بازی
پیادهسازی قابلیتهای اختیاری فقط زمانی امتیاز دارد که بخشهای الزامی پروژه به شکل قابل قبول کار کنند.
استفاده از همین نامها الزامی نیست، اما پروژه باید طراحی شیءگرای قابل دفاع داشته باشد.
کلاسهای پیشنهادی:
GameBoardیاLawnCellPlantPeaShooterSunFlowerWallNutZombieNormalZombieProjectileSunCardWaveManagerGameState
نمره الزامی پروژه: ۱۲۰ نمره
نمره اختیاری پروژه: ۵۰ نمره
حداکثر نمره قابل کسب: ۱۷۰ نمره
| بخش | نمره |
|---|---|
| زمین بازی و حلقه اصلی بازی | ۱۰ |
سیستم Sun، کارتها و کاشت گیاه |
۱۴ |
| پیادهسازی گیاههای الزامی | ۱۶ |
| زامبیها و موجها | ۱۴ |
| مبارزه، برخورد و آسیب | ۱۵ |
| وضعیت بازی، برد و باخت | ۸ |
| رابط کاربری گرافیکی و استفاده از assetها | ۱۵ |
| طراحی شیءگرا و کلاسبندی مناسب | ۱۸ |
| کیفیت کد، اعتبارسنجی و مستندات | ۱۰ |
| جمع کل الزامی | ۱۲۰ |
repository گروه باید شامل موارد زیر باشد:
- تمام فایلهای سورس پروژه
- برای C++: فایلهای
.hو.cpp - برای Python: فایلهای
.py
- برای C++: فایلهای
- فایل
MakefileیاCMakeLists.txtبرای C++ - یا توضیح دقیق نحوه اجرا برای Python در
README.md - فایل
README.md - پوشه assetهای مورد استفاده یا توضیح مسیر دریافت assetها
- توضیح نحوه نصب پیشنیازها
- توضیح نحوه اجرا
- چند screenshot از اجرای بازی
- توضیح امکانات پیادهسازیشده
- توضیح اعضای گروه و مسئولیت هر فرد
فایلهای داخل docs/characters مشخص میکنند هر کاراکتر دقیقاً چطور رفتار میکند.
اگر بین توضیحات کلی README.md و فایلهای جزئیات کاراکترها اختلافی وجود داشت، ملاک ارزیابی فایلهای داخل docs/characters است.