Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

<<<<<<< HEAD

اسکرین‌شات‌ها

منوی شروع داخل بازی
start menu gameplay
برد حالت pause
win pause

پیش‌نیازها و نصب

نیازمند Python 3.10+ است.

pip install -r requirements.txt

for 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

======= Review Assignment Due Date نکته مهم به خاطر اینکه امتحان داشتید و زمان کم بود این پروژه دیگه منتشر نشد ولی ریپازیتوریش رو پابلیک کردم کسی خواست بزنه بتونه بزنه و نمره جداگانه نداره ولی خب اگه کسی زدش تا زمان نمره دادن هم یک مقدار کمکش میکنیم ولی خب میتونید در نظر بگیرید که همچین چیزی وجود نداره

برنامه‌سازی پیشرفته
تمرین کامپیوتری شماره ۲
مدرس: راضیه قیاسی
مهلت تحویل: ۲۰ روز پس از انتشار تمرین

تمرین کامپیوتری شماره ۲ — Plants vs Zombies

سلام بچه‌ها امیدوارم حالتون خوب باشه 🌱

توی این تمرین قراره یک نسخه ساده‌شده و گرافیکی از بازی Plants vs Zombies رو پیاده‌سازی کنید.

هدف این نیست که بازی اصلی رو کامل و دقیق بازسازی کنید؛ بلکه باید یک نسخه کوچک‌تر، قابل اجرا و قابل توسعه بسازید که ایده اصلی بازی رو داشته باشه.

زامبی‌ها از سمت راست زمین وارد می‌شن و به سمت خونه حرکت می‌کنن. بازیکن باید با کاشتن گیاه‌های مختلف، مدیریت Sun و دفاع درست، جلوی رسیدن زامبی‌ها به خونه رو بگیره.


زبان‌های مجاز

پروژه می‌تواند با یکی از زبان‌های زیر پیاده‌سازی شود:

  • Python
  • C++

برای 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، هزینه کاشت، آسیب و رفتار هر گیاه و زامبی در مسیر زیر قرار دارد:

docs/characters


قابلیت‌های اختیاری

گروه‌ها می‌توانند برای گرفتن نمره اضافه، قابلیت‌های بیشتری پیاده‌سازی کنند؛ مثل:

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


موجودیت‌های پیشنهادی برای طراحی

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

کلاس‌های پیشنهادی:

  • Game
  • Board یا Lawn
  • Cell
  • Plant
  • PeaShooter
  • SunFlower
  • WallNut
  • Zombie
  • NormalZombie
  • Projectile
  • Sun
  • Card
  • WaveManager
  • GameState

نمره‌دهی

نمره الزامی پروژه: ۱۲۰ نمره
نمره اختیاری پروژه: ۵۰ نمره
حداکثر نمره قابل کسب: ۱۷۰ نمره

بخش نمره
زمین بازی و حلقه اصلی بازی ۱۰
سیستم Sun، کارت‌ها و کاشت گیاه ۱۴
پیاده‌سازی گیاه‌های الزامی ۱۶
زامبی‌ها و موج‌ها ۱۴
مبارزه، برخورد و آسیب ۱۵
وضعیت بازی، برد و باخت ۸
رابط کاربری گرافیکی و استفاده از assetها ۱۵
طراحی شیءگرا و کلاس‌بندی مناسب ۱۸
کیفیت کد، اعتبارسنجی و مستندات ۱۰
جمع کل الزامی ۱۲۰

فایل‌های الزامی برای تحویل

repository گروه باید شامل موارد زیر باشد:

  • تمام فایل‌های سورس پروژه
    • برای C++: فایل‌های .h و .cpp
    • برای Python: فایل‌های .py
  • فایل Makefile یا CMakeLists.txt برای C++
  • یا توضیح دقیق نحوه اجرا برای Python در README.md
  • فایل README.md
  • پوشه assetهای مورد استفاده یا توضیح مسیر دریافت assetها
  • توضیح نحوه نصب پیش‌نیازها
  • توضیح نحوه اجرا
  • چند screenshot از اجرای بازی
  • توضیح امکانات پیاده‌سازی‌شده
  • توضیح اعضای گروه و مسئولیت هر فرد

نکته مهم درباره جزئیات بازی

فایل‌های داخل docs/characters مشخص می‌کنند هر کاراکتر دقیقاً چطور رفتار می‌کند.

اگر بین توضیحات کلی README.md و فایل‌های جزئیات کاراکترها اختلافی وجود داشت، ملاک ارزیابی فایل‌های داخل docs/characters است.

>>>>>>> aa363b0afddf6f5de0ba84461be698766505cf02

About

ap_1404-practice_two-AP_1404_PRACTICE_TWO created by GitHub Classroom

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages