<<<<<<< HEAD
| منوی شروع | داخل بازی |
|---|---|
![]() |
![]() |
| برد | حالت pause |
|---|---|
![]() |
![]() |
نیازمند Python 3.10+ است.
pip install -r requirements.txtfor windows also install this if you have python 3.14: pip install pygame-ce Pillow
کتابخانههای استفادهشده:
pygame— رندر گرافیکی، حلقه اصلی بازی، مدیریت ورودیPillow— استخراج فریمهای انیمیشن GIF (pygame بهتنهایی GIF متحرک را پشتیبانی نمیکند)
python3 main.py
windows python main.py- کلیک روی کارت گیاه → انتخاب → کلیک روی خانه خالی زمین → کاشت
- کلیک روی Sun (چه از آسمان چه از SunFlower) → جمعآوری
- کلیک روی آیکون بیل (Shovel) → انتخاب حالت حذف → کلیک روی گیاه → حذف آن
EscیاP→ توقف/ادامه بازی (Pause)- در صفحه برد/باخت → دکمه «Play Again» برای شروع دوباره
- زمین ۵×۹ روی
Frontyard.pngبا حلقه اصلی بازی (منو → بازی → برد/باخت) - سیستم Sun کامل: مقدار اولیه ۱۵۰، تولید آسمانی هر ۱۰ ثانیه (۲۵ واحد)، تولید توسط SunFlower
- کارتهای گیاه با هزینه، cooldown و غیرفعالشدن خودکار در نبود Sun کافی
- سه گیاه الزامی: PeaShooter (شلیک/آسیب/برد طبق مشخصات)، SunFlower (تولید Sun)، WallNut (HP بالا + انیمیشن آسیبدیده در HP کم)
- NormalZombie: حرکت راستبهچپ، توقف و خوردن گیاه روبهرو، آسیب طبق مشخصات
- برخورد گلوله-زامبی و کمشدن HP و حذف موجودیتها
- دقیقاً جدول «حداقل موج قابل قبول»: موجهای ۲۰/۵۰/۹۰ ثانیه با ۳/۵/۷ زامبی (مجموع ۱۵)
- شرط برد (همه موجها تمام + همه زامبیها نابود) و باخت (زامبی به خانه برسد)
- طراحی شیءگرا مطابق کلاسهای پیشنهادی تمرین (پایین صفحه توضیح داده شده)
- LawnMower برای هر ردیف (طبق
docs/characters/LawnMower.md) - Shovel برای حذف گیاه کاشتهشده
- منوی شروع بازی و صفحه Pause
- صفحه برد/باخت با دکمه شروع دوباره
- افکتهای صوتی (کاشت، برخورد گلوله، خوردن، غرش زامبی، اعلام موج، لانموور) — در صورت نبودن دستگاه صوتی روی سیستم اجراکننده، بازی بدون خطا و بیصدا اجرا میشود
امکانات اختیاری پیادهسازینشده (SnowPea، Repeater، CherryBomb، ConeheadZombie و…) در
docs/characters مستند هستند و با همان الگوی PLANT_CLASSES / ZOMBIE_CLASSES قابل اضافهشدنند.
main.py # نقطه ورود
src/
constants.py # همه مقادیر عددی (HP، cooldown، آسیب، جدول موجها...) از docs/characters
assets.py # بارگذاری تصاویر و استخراج فریمهای GIF (AnimatedSprite)
game.py # کلاس Game: حلقه اصلی، رویدادها، برد/باخت
game_state.py # Enum حالتهای بازی (MENU/PLAYING/PAUSED/WIN/LOSE)
board.py # کلاسهای Board و Cell + تبدیل مختصات پیکسل↔خانه
wave_manager.py # کلاس WaveManager: زمانبندی و spawn موجها
entities/
entity.py # کلاس پایه انتزاعی Entity (hp, alive, update, draw)
plant.py # Plant + PeaShooter, SunFlower, WallNut
zombie.py # Zombie + NormalZombie
projectile.py # Pea
sun_drop.py # SunDrop (Sun آسمانی و Sun گیاهی)
lawn_mower.py # LawnMower
ui/
card.py # Card و CardBar (کارتهای گیاه)
hud.py # HUD: شمارنده Sun، بیل، دکمه Pause
menu.py # StartMenu, PauseMenu, EndScreen
=======
نکته مهم
به خاطر اینکه امتحان داشتید و زمان کم بود این پروژه دیگه منتشر نشد ولی ریپازیتوریش رو پابلیک کردم کسی خواست بزنه بتونه بزنه
و نمره جداگانه نداره ولی خب اگه کسی زدش تا زمان نمره دادن هم یک مقدار کمکش میکنیم ولی خب میتونید در نظر بگیرید که همچین چیزی وجود نداره
|
برنامهسازی پیشرفته تمرین کامپیوتری شماره ۲ |
مدرس: راضیه قیاسی مهلت تحویل: ۲۰ روز پس از انتشار تمرین |
سلام بچهها امیدوارم حالتون خوب باشه 🌱
توی این تمرین قراره یک نسخه سادهشده و گرافیکی از بازی 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 است.



