بازگشت به صفحه اصلی

به نام خدا

درس برنامه‌‌نویسی پیشرفته

فاز صفر و یک

دانشکده مهندسی کامپیوتر
دانشگاه صنعتی شریف
نیم‌سال دوم 05-04


استاد:
دکتر محمد امین فضلی


طراحان:
مهدی علی نژاد، عارف زارع زاده، پارسا ضمیری، امیرمهدی طهماسبی
علیرضا مهندسی، متین باقری، رهام قاسمی، محمدامین حقجو، یاسمن کاویانپور
حسین زاهدی ادیب، محمدپارسا آرانی، آرش شاه حسینی، امیرحسین مهبودی

تشکر ویژه از معین آعلی، یک فرانتکار ساده

مقدمه

Frame

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

در این بازی، بازیکن در یک دنیای خیالی و آخرالزمانی قرار دارد که توسط زامبی‌‌ها تصاحب شده است. مأموریت اصلی حفاظت از آخرین خطوط دفاعی انسان‌‌ها با استفاده از انواع گیاهان است. هر گیاه دارای توانایی‌‌های منحصربه‌‌فرد و اثرات ویژه‌‌ای است که بازیکن باید بر اساس نوع تهدید و شرایط مرحله‌‌ی بازی، استراتژی مناسبی را انتخاب کند.

Frame Frame

فهرست مطالب

معرفی

پروژه‌ی درس برنامه‌سازی پیشرفته، مکان خوبی برای آشنایی با کار بر روی پروژه‌های گسترده است و بزرگ‌ترین قدم برای یادگیری مهارت کار. هدف اصلی ما از طرح این پروژه یاد دادن کار تیمی و کار بر روی یک کدبیس بزرگ است، پس از حجم زیاد آن نترسید. در محیط کار و حتی بعضا محیط‌های آکادمیک به طور مداوم با همچین پروژه‌هایی سروکار دارید و توانایی کنترل کردن حجم زیاد برنامه مهارت مهمی است که در این درس یاد خواهید گرفت. کاری که ما سعی کردیم انجام بدیم، تفننی کردن پروژه است. دلیل انتخاب بازی به عنوان پروژه نیز همین است، زدن میزان زیادی کد عذاب‌آور است ولی در توسعه‌ی بازی‌ها معمولا مواجهه با باگ‌ها جنبه‌ی فانی دارند و دیدن دست‌آورد خود به صورت یک بازی گرافیکی برای اکثر افراد لذت‌بخش است. یک نکته‌ی مهم دیگر، استفاده از هوش مصنوعی است. سطح پروژه مشابه تمرین‌ها ساده ولی طولانی است، که مستلزم کار مستمر و با دقت بالا است. هوش مصنوعی می‌تواند گاها با راهنمایی درست، کار خیلی افراد را ساده‌تر کند ولی نباید به صورت کورکورانه استفاده شود. به همین دلیل، استفاده‌ی بیرویه از هوش مصنوعی در پروژه غیرمجاز است. تسلط بالا به کد از موارد مهم هنگام تحویل پروژه است، پس حواستان باشد که استفاده از هوش مصنوعی فقط در حد جستجو باشد. کلاس‌های پروژه را خودتان مشخص کنید، منطق‌ها را بنویسید تا یاد بگیرید در آینده هوش مصنوعی را هدایت کنید، نه اینکه فرمان را به دستش بدهید.

نحوه نمره‌دهی

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

قوانین لینتر (Checkstyle و PMD)

فاز صفر

در این فاز، شما باید مخزن کد خود را در هم‌گیت ایجاد کرده، و دیاگرام‌های UML اولیه پروژه را آماده نمایید.

ساخت مخزن در هم‌گیت

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

ایجاد حساب کاربری در هم‌گیت

۱. همه افراد وارد آدرس زیر شوند و یک حساب کاربری بسازند.

https://hamgit.ir/users/sign_in

۲. یکی از اعضای گروه، مخزنی بسازد و باقی اعضا را هم در آن اضافه کند.

تولید کلید SSH

۱. ترمینال (یا Git Bash در ویندوز) را باز کنید.

۲. دستور زیر را وارد کنید:

ssh-keygen -t ed25519 -C "your_email@example.com"

به جای your_email@example.com ایمیلی را که در هم‌گیت ثبت کرده‌اید بنویسید.

پس از اتمام، دو فایل کلید در سیستم شما ایجاد می‌شود (یکی خصوصی و یکی عمومی). فایل عمومی معمولا پسوند .pub دارد (برای مثال: id_ed25519.pub).

۳. فایل کلید عمومی (.pub) را با باز کنید و محتوای آن را به طور کامل کپی کنید و وارد حساب کاربری خود در هم‌گیت شوید و از منوی کاربری، بخش SSH Keys را پیدا کنید و یک کلید جدید اضافه کنید. متن کپی‌شده را در آنجا قرار دهید و ذخیره کنید.

کار با مخزن در گیت‌هاب

با اینکه بستر اصلی گیت در این ترم هم‌گیت است، همزمان در گیتهاب نیز به روال سال‌های قبل یک organization تشکیل دادیم تا کدهای خود را در مواقعی که می‌توانسید آنجا نیز قرار دهید. این کار صرفا به دلیل ماندگار شدن کدها بر یک پلتفرم جهانی است. برای ثبت کدهای پروژه در گیت‌هاب، ابتدا وارد سازمان زیر شوید و مخزن گروه خود را در همان سازمان بسازید:

https://github.com/organizations/advanced-progamming-sut-2026

نام مخزن باید دقیقا با قالب زیر ساخته شود:

group-{id}

که در آن به جای {id} شماره گروه خود را قرار می‌دهید. اگر چند ریموت برای مخزن خود دارید، می‌توانید هر کدام را جداگانه به مخزن محلی اضافه کنید و تغییرات را روی همه آن‌ها push کنید. برای مثال:

git remote add origin <repo-url> git remote add backup <other-repo-url> git push origin main git push backup main

در صورت نیاز می‌توانید با دستور زیر ریموت‌های ثبت‌شده را ببینید:

git remote -v

ایجاد UML

در این مرحله باید یک UML اولیه برای پروژه طراحی کنید که مبنای کار شما در فاز ۱ باشد. این UML باید مطابق نیازمندی‌ها و توضیحات فاز ۱ تهیه شده و شامل تمام کلاس‌های لازم برای پیاده‌سازی منطق پروژه، همراه با روابط و نوتاسیون‌های استاندارد UML باشد. هرچند ممکن است در حین پیاده‌سازی فاز ۱ تغییراتی در طراحی ایجاد شود، اما نقطه شروع و پایه‌ی معماری پروژه باید همین UML اولیه باشد. توصیه می‌شود برای رسم نمودار از ابزارهای دیجیتال، نرم‌افزارهای طراحی UML یا حتی قابلیت‌های داخلی IntelliJ استفاده کنید و نسخه نهایی را در مخزن پروژه قرار دهید.

نحوه تحویل هر فاز

در پایان هر فاز، لازم است یک Git Tag روی آخرین commit همان فاز ثبت و به مخزن هم‌گیت push شود.
برای مثال، در پایان فاز صفر از تگ phase-0 و در پایان فازهای بعدی به‌ترتیب از phase-2، phase-1 و ... استفاده کنید.
جزيیات بیشتر تحویل هر فاز، به شما اطلاع داده خواهد شد.

منوها

جریان کامل ورود و ثبت‌‌نام، اعتبارسنجی‌‌ها، پیام خطاها و بازیابی حساب مشخص می‌‌شود. مراحل ساخت کاربر جدید و پروفایل اولیه (نام، تصویر، تنظیمات پایه) توضیح داده می‌‌شود. ارتباط این بخش با دسترسی به منوها و ذخیره‌‌سازی وضعیت کاربر مستند می‌‌شود.

در داخل بازی، منوها برای دسترسی کاربر به بخش‌های مختلف بازی مانند نقشه، تنظیمات،‌ فضای کاربری و ... توسعه می‌یابند. دستورات زیر در همه منو‌ها قابل استفاده هستند:

ورود به منو

کاربر در هر منو که باشد، قادر خواهد بود به منوهای خاصی برود:

menu enter <menu_name>

منوی فعلی

menu show current

خروج از منو

کاربر با خروج از منو، به شرح زیر به منوی دیگری باید هدایت شود:

menu exit

در نظر داشته باشید که پیشرفت بازیکنان نباید با بسته و باز شدن برنامه از دست برود. پس در هنگام بستن برنامه باید تمام اطلاعات ذخیره شود.

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

منوی ثبت‌‌نام

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

۱. کاربر ثبت‌نام جدید انجام دهد.

در این قسمت کاربر را وارد کردن اطلاعات زیر در همان منو (با قوانین اعتبارسنجی هر کدام)، یک حساب کاربری جدید برای خود می‌سازد:

  1. نام کاربری (Username)
  2. رمز عبور (Password) و تکرار آن (Password_Confirm)
  3. نام مستعار (Nickname)
  4. ایمیل (Email)
  5. جنسیت (gender)
register -u <username> -p <password> <password_confirm> -n <nickname> -e <email> -g <gender>
۱. نام کاربری

نام کاربری برای شناسایی حساب کاربری در سطح بازی است. نام کاربری تنها می‌تواند شامل حروف کوچک و بزرگ، اعداد و نماد - باشد.

خطاها
۲. رمز عبور

در رمز عبور، تنها مجاز به استفاده از حروف کوچک و بزرگ، اعداد و نمادهای خاص هستید.

خطاها
⭐ بخش امتیازی

الگوریتم SHA-256 (مخفف Secure Hash Algorithm 256-bit) یک تابع هش رمزنگاری‌شده‌ی یک‌طرفه است که هر ورودی دلخواه (مانند رمز عبور) را به خروجی‌ای با طول ثابت ۲۵۶ بیت تبدیل می‌کند. این الگوریتم به‌گونه‌ای طراحی شده که بازیابی مقدار اولیه از خروجی تولیدشده عملاً غیرممکن باشد.

علت استفاده از رمزنگاری یک‌طرفه
رمزنگاری یک‌طرفه برای حفاظت از اطلاعات حساس (مانند رمز عبور) طراحی شده است تا حتی در صورت دسترسی غیرمجاز به فایل‌های ذخیره‌سازی، امکان بازیابی رمز اصلی وجود نداشته باشد. در این روش، رمز عبور کاربران هنگام ذخیره‌سازی، هش می‌شود و هنگام ورود مجدد، تنها خروجی هش‌شده‌ی رمز واردشده با مقدار ذخیره‌شده مقایسه می‌گردد.

پیاده‌سازی رمزهای عبور با استفاده از الگوریتم‌هایی مانند SHA-256، امنیت سیستم را به‌طور قابل توجهی افزایش داده و از افشای مستقیم اطلاعات کاربران جلوگیری می‌کند. انجام این پیاده‌سازی برای رمز عبور کاربران، به‌عنوان یک بخش امتیازی در ارزیابی در نظر گرفته شده است.

ذخیره‌سازی اطلاعات کاربران باید به‌صورت فایل خارجی انجام شود تا در هنگام اجرای مجدد برنامه، اطلاعات قبلی بازیابی شده و در دسترس باشد. این فرآیند شامل موارد زیر است:

۳. نام مستعار

این نام به عنوان نام نمایشی (Display Name) باید استفاده شود.

خطاها
۴. ایمیل (Email)

ایمیل شما باید از قوانین اعتبارسنجی زیر پیروی کند، در غیر این صورت باید خطای مربوطه را به کاربر نمایش دهید:

  1. ایمیل باید شامل یک و فقط یک نماد @ باشد.
  2. ایمیل باید دارای یک نام کاربری معتبر در بخش قبل از @ باشد:
  3. بخش دامنه (بعد از @) باید:
  4. ایمیل نباید شامل نمادهای غیرمجاز مانند: ? > < , " ' ; : \ / | [ ] } { + = ( ) * & ^ % $ # ! باشد.
مثال‌های نامعتبر
۵. جنسیت (Gender)

شامل مرد یا زن می‌باشد.

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

pick question -q <question_number> -a <answer> -c <answer_confirm>

در انتها کاربر با ایجاد حساب کاربری جدید،‌ به منوی ورود هدایت می‌شود تا از آنجا بتواند با وارد کردن حساب کاربری خود، وارد منوی اصلی بازی شود.

۲. گزینه Login Menu انتخاب شود.

در این قسمت، با زدن دکمه Login menu، کاربر بایستی به منوی ورود انتقال یابد. در فاز ۱، کاربر با دستور ورود به منو می‌تواند به منوی ورود برود.

منوی ورود

در این قسمت می‌تواند یکی از اقدامات زیر را انجام دهد:

۱. وارد کردن اطلاعات جهت ورود به حساب کاربری

در این حالت، کاربران می‌توانند با وارد کردن نام کاربری و رمز عبور خود وارد منوی اصلی برنامه شوند.

login -u <username> -p <password> -stay-logged-in

۲. گزینه فراموشی رمز عبور

کاربر می‌تواند در این بخش با وارد کردن نام کاربری خود و پاسخ دادن به پرسش‌های امنیتی که در حساب کاربری ذخیره شده، یک کلمه عبور جدید برای خود انتخاب کند.

forget password -u <username> -e <email>
answer -a <answer>

در ادامه اگر جواب درست بود به صورت خودکار پیغام داده شود که رمز عبور جدید را وارد کنید و اگر پاسخ درست نبود هم به اول منو بازگردد. توجه کنید که در این بخش هم مانند منوی ثبت‌نام در صورت نیاز لازم است تا پیغام خطای مناسب نمایش داده شود.


منوی اصلی

بعد از انجام مراحل Authorization/Authentication و زمانی که کاربر توانست با یک حساب کاربری شناخته شود، وارد منوی اصلی می‌شویم.

Main Menu

این منوی ارتباط اصلی ما را دیگر منوهای بازی برقرار میکند. از این منو میتوان با انتخاب گزینه آنها به یکی از منوهای زیر رفت:

خروج کاربر

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

menu logout

همانطور که در عکس بالا هم مشخص است، کاربر با انتخاب یکی از این منوها به منوی مربوطه خواهد رفت.

منوی بازی

Menu_Adventure_1
Menu_Adventure_2

در این منو، چند قسمت (Chapter) وجود دارد که هر زمان تمام مراحل آن Chapter تمام شد، مراحل Chapter بعد باز می‌شوند. با انتخاب هر Chapter وارد قسمت بازی می‌شوید و شروع به بازی کردن با آن مرحله از بازی خواهید شد.

menu enter chapter -c <chaptername>

در قسمت بالای صفحه‌ هم، المان‌های مختلفی وجود دارد.

menu greenhouse
menu travel-log
menu leaderboard
menu coin-wallet
menu gem-wallet

هنگامی که هر Chapter یا مرحله را به سرانجام رساندید، Chapterها و مراحل جدید برای شما باز می‌شوند و می‌توانید آنها را ادامه دهید ولی در غیر این صورت آنها هنوز باز (Unlock) نشده‌اند.

نکته: همچنین بایستی گزینه جا‌بجا شدن بین دنیاهای مختلف بازی هم در این منو قرار داده شود.

چیت کد

با دستورات زیر، می‌توان به تعداد الماس‌ها یا سکه‌های خود اضافه کرد.

menu cheat add <n> <coin/diamond>

منوی تنظیمات

Menu_Settings

در این منو،‌ می‌توان تنظیمات مربوط به بازی از جمله میزان سختی بازی و ... را تغییر داد. میزان سختی بازی (که مقدار difficulty level باید مقداری بین ۱ تا ۵ باشد. وقتی حساب کاربری جدید ساخته می‌شود، به صورت پیش‌فرض میزان سختی روی مقدار ۳ است). تغییر میزان سختی بازی، این موارد ضریب می‌گیرند:

برای افزایش از ضریب {dl}/3 و برای کاهش 3/{dl} استفاده خواهد بود. . در ادامه توضیحات، همواره فرض می‌شود میزان سختی ۳ است، مگر آنکه خلاف آن گفته شود.

menu settings change-difficulty -l <difficulty_level>

نکته: در فازهای بعدی، موارد دیگری به منوی تنظیمات اضافه خواهد شد.

منوی اخبار

Menu_News

این منو مربوط به اخبار بازی است. مانند زامبی‌ها، گیاهان، minigameها، پیام از طرف سایر کاربران (داخل قسمت شبکه) و سایر موارد که در داخل بازی اتفاق می‌افتد، در این بخش قرار میگیرند. هرگاه پیام جدیدی برای کاربر قرار داده شود، باید دکمه News داخل منوی اصلی، باید یک علامت قرمز رنگی برای اطلاع کاربر قرار داده شود. در ادامه به توضیح بیشتر مواردی که باید در این بخش پیاده‌سازی کنید می‌پردازیم.

  1. هرگاه یک گیاه جدید توسط کاربر باز (Unlock) شود.
  2. هرگاه یک زامبی جدید در مرحله بازی شده برای کاربر باز (Unlock) شود.
  3. هرگاه مراحل جدید یا minigameهای جدید توسط کاربر باز (Unlock) شود.
  4. در فازهای بعدی گرافیک و شبکه، اطلاعات جدید هم داخل این قسمت جهت اطلاع کاربر از وضعیت بازی یا سایر کاربران باید پیاده‌سازی شود که در آن قسمت توضیح داده خواهد شد.

نمایش اخبار جدید

menu news show-unread

در این صورت بایستی این اخبار خوانده شده در نظر گرفته شوند و در دفعات بعدی اجرای این کد، این اخبار نشان داده نشوند.

نمایش تمام اخبار کاربر

menu news show-all

منوی پروفایل

در این منو، کاربر بایستی بتواند تغییرات مربوط به حساب کاربری خود، شامل موارد زیر را تغییر دهد:

menu profile change-username -u <username>
menu profile change-nickname -u <nickname>
menu profile change-email -e <email>
menu profile change-password -p <new_password> -o <old_password>

نمایش اطلاعات کاربر

با وارد کردن این دستور، باید اطلاعات کاربر شامل موارد زیر نمایش داده شود:

menu profile show-info

منوی کلکسیون

Menu_Collection_1
Menu_Collection_2

همانطور که در این عکس‌ها هم مشاهده می‌کنید، منوی Collection برای نشان دادن گیاهان، زامبی‌هایی که کسب کرده‌اید، استفاده می‌شوند. در این قسمت، با کلیک کردن روی هر گیاه یا زامبی باید جزئیات آن مشاهده کنیم. هر زامبی را تا زمانی که داخل فضای بازی ندیده باشیم، داخل این قسمت وجود ندارند و قاب مربوط به آنها خالی هست.

در این فاز، باید جزئیات هر آیتم خواسته شده به صورت متنی چاپ شود.

نمایش لیست گیاهان کسب شده

menu collection show-plants

نمایش لیست تمام گیاهان تعریف شده در بازی

menu collection show-all-plants

نمایش لیست زامبی‌های مشاهده‌شده

menu collection show-zombies

نمایش لیست تمام زامبی‌های تعریف شده در بازی

menu collection show-all-zombies

نمایش مشخصات یک گیاه

menu collection show-plant -p <plant_name>

نمایش مشخصات یک زامبی

menu collection show-zombie -z <zombie_name>

ارتقای گیاه

با دستور زیر می‌توان گیاهان را ارتقا داد. اگر برای ارتقای گیاه سکه یا seed packet کافی از آن گیاه نداریم، باید خطای مناسب نمایش داده شود.

menu collection upgrade-plant -p <plant_name>

نکته: در ادامه، بیشتر درباره‌ی ارتقای گیاهان توضیح داده می‌شود.

خرید گیاه

با دستور زیر می‌توان یک گیاه جدید خرید. اگر برای خرید گیاه سکه کافی از آن گیاه نداریم، باید خطای مناسب نمایش داده شود. هزینه‌ی خرید گیاه جدید 2 هزار سکه است.

menu collection purchase-plant -p <plant_name>

منوی انتخاب گیاه

انتخاب گیاه‌ها در بدو شروع بازی

قبل از شروع بازی، باید یک تعداد از گیاهان را انتخاب کنید که در طول بازی می‌توانید از آن‌ها استفاده کنید. تعداد گیاهان قابل انتخاب داخل هر مرحله وابسته به خود آن مرحله است ولی در صورت عدم ذکر، ۸ جای خالی برای انتخب گیاهان در نظر گرفته می‌شود.

لیست گیاهان

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

show all plants show available plants

اضافه کردن گیاه

add plant -t <type>

در صورت نبود گیاه، قفل بودن گیاه، یا از قبل انتخاب شدن گیاه، خطای مناسب چاپ شود.

حذف گیاه

remove plant -t <type>

در صورت وجود نداشتن گیاه یا انتخاب نشدن گیاه، خطای مناسب چاپ شود.

بوست کردن گیاه

با زدن دستور زیر، می‌توان با خرج کردن دو الماس، گیاهی را boost کرد. با بوست کردن گیاه، هرگاه آن گیاه را در این مرحله می‌کاریم، اثر غذای گیاه برای آن گیاه (در صورت وجود) بلافاصله فعال می‌شود. در ادامه در مورد غذای گیاه و اثر آن روی گیاهان بیشتر توضیح داده خواهد شد.

boost plant -t <type>

شروع بازی

بعد از انتخاب گیاهان با دستور زیر وارد منوی بازی می‌شویم.

start game

مکانیزم‌های اصلی بازی

مکانیزم گذر زمان

با توجه به این مورد که در فاز نخست امکان پیاده‌سازی real-time بازی وجود ندارد، از مفهومی به نام tick استفاده خواهیم کرد. هر ۱۰ تیک معادل یک ثانیه درون بازی خواهد بود. به طور کلی در بازی کوچک‌ترین واحد زمانی ما در بازی معادله 1tickخواهد بود. در هر قسمت از بازی می‌توان با دستور زیر بازی را به جلو برد.

advance time -t <count> ticks

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

مکانیزم تولید خورشید (آفتاب)

برای تولید خورشید راه‌هایی مختلفی وجود دارد.

استفاده از گیاهان خورشیدزا (Sun Producers)

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

plant <plant-type> produced a sun at (<x>, <y>)

که plant-type اسم خورشیدزا و x,y مختصات خورشیدزا خواهد بود که منطقا اعدادی صحیح است.

برای برداشت خورشید از یک خورشیدزا نیاز است که از دستور زیر استفاده کنیم.

collect sun -l (<x>, <y>)

این خورشید به مدت زمان نامتناهی بر گیاه باقی می‌ماند.

سقوط خورشید

به طور خودکار، اگر محیط بازی توسط مورد دیگری (از قبیل فصل Dark Ages) منع نشود، هر x ثانیه یک خورشید از آسمان به زمین میفتد.

$$ x = \max(6 + 0.05t, 12) $$

که t معادل زمان گذشته شده از شروع بازی خواهد بود.

خورشیدهای سقوط کننده دو گونه‌اند:

خورشیدها از آسمان یک خانه را به صورت تصادفی انتخاب می‌کنند و ۵ ثانیه طول می‌کشد تا به زمین برسد. هنگام ظهور خورشید و برخورد به زمین به ترتیب پیام‌های زیر نمایش داده می‌شود.

New <type> sun is dropping at position (<x>, <y>) Sun reached the ground at position (<x>, <y>)

مشاهده میزان خورشید فعلی

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

show sun amount

تقلب

با استفاده از دستور زیر می‌توان به میزان خورشید اضافه کرد.

cheat add -n <count> suns

حمله زامبی‌ها

حمله به گیاهان

زامبی‌ها با توجه به مشخصات مختص به خودشان استراتژیهای مختلفی را برای حمله به گیاهان دارند. که ساده‌ترین آن‌ها حمله به جلویی‌ترین گیاه در آن ردیف است. هنگامی که یک زامبی به یک گیاه حمله می‌کند، حرکت نمی‌کندتا آن گیاه از بین برود. هنگامی که گیاه از بین رفت متن زیر چاپ شود:

Plant <type> at (<x>, <y>) is destroyed.

هنگامی که گیاه نابود شود زامبی به مسیر خود ادامه می‌دهد.

ماشین چمن‌زنی

در انتهای هر ردیف یک ماشین چمن زنی قرار داده شده است، برای بار اول که یک زامبی به آن می‌رسد فعال می‌شود و تمامی زامبی‌های داخل آن ردیف را می‌کشد (مگر آن که آن زامبی از زامبی‌های رئیس باشد). ماشین چمن‌زنی در هر ردیف یکبار مصرف است و دفعه دوم که یک زامبی به آن نقطه برسد می‌بازد. پیامی که در اثر رسیدن زامبی در مراتب اولیه و ثانویه به انتهای مسیر نمایش داده می‌شود:

The lawn mower in the row <r>is triggered and killed these zombies:

و در صورت دفعه دوم بودن:

The zombie ate your brain; LOSER!!!

و در حالت دوم بازی تمام می‌شود و به صفحه‌ای که مرحله از آن انتخاب شد به عنوان یک بازنده باز می‌گردیم.

ظهور زامبی‌ها

هر مرحله تعدادی موج حمله دارد. در هر موج، زامبی‌هایی که ظاهر می‌شوند باید تابع سختی هر موج باشند. سختی هر موج به گونه‌ای خواهد بود که ۲۵ درصد سخت‌تر از موج قبلی خواهد بود و موج آخر که موج flag نام دارد یک ابرموج است که دو برابر سختی مرحله قبلی را خواهد داشت. قابل توجه است اگر در هر مرحله صراحتا فرمول دیگری ذکر شده است باید آن فرمول اعمال شود. تعداد امواج یک مرحله نیز به مرحله بستگی دارد.

زامبی‌ها همواره در راستای افقی به سمت چپ حرکت می‌کنند. مگر به دلایلی این مسیر عوض شود که در حالات مختلف در این پروژه بررسی می‌شود.

هر موج که شروع می‌شود متن زیر نمایش داده شود:

Wave <n> started.

یا اگر موج آخر باشد:

The final wave has come.

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

Zombie <type> spawned at wave <n> in lane <m> which costed <waveCost>.

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

هرگاه سلامتی یک زامبی صفر شود از بین می‌رود و پیام زیر چاپ می‌شود.

Zombie of type <type> is dead at (<x>, y>)

تقلب

release the nuke

کل زامبی‌های داخل نقشه را می‌کشد.

برد بازی

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

Dear humanz, zis is not done yet; we will come back to eat your brainz, humanz.

زمین بازی

بازی اصلی در پنج ردیف و ۹ ستون شکل می‌گیرد، مگر اینکه در تنظیمات مرحله طور دیگری گفته شده باشد. هر کدام از این خانه‌ها می‌تواند انواع مختلفی داشته باشد (در ادامه توضیحات داک، درباره‌ی این فصل‌ها بیشتر توضیح داده خواهد شد).

مصر باستان

سنگ قبر به مقدار ۷۰۰، سلامتی دارد و وقتی که تیر می‌خورد آسیب می‌بیند و هنگامی که سلامتی آن صفر می‌شود به زمین معمولی تبدیل می‌شود. سنگ قبر غیرقابل کاشت است.

غارهای یخزده

ساحل مواج

عصر تاریکی

کاشتن گیاه

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

plant plant -t <type> -l (<x>, <y>)

قابل توجه است که هرگاه یک گیاه را می‌کارید باید صبر کنید تا دوباره از آن گیاه در دسترس شود و دوباره می‌توانید آن را بکارید. یعنی در دو زمان خیلی نزدیک به هم نمی‌توانید از یک نوع گیاه دوبار بکارید. در این مورد در بخش گیاهان بیشتر توضیح داده شده است.

تقلب

cheat remove-cooldown

با این دستور تمام محدودیت cooldown ها حذف می‌شود.

برداشتن گیاه

به دستور زیر میتوانید گیاهی که در یک خانه قرار دارد بکنید. خطاهای مربوطه مورد توقع است.

pluck plant -l (<x>, <y>)

غذای گیاهان

هر زامبی که ظاهر می‌شود به احتمال ۵ درصد درخشان است. اگر یک زامبی درخشان باشد موقع مرگش یه غذای گیاه به بازیکن می‌دهد. بازیکن به طور همزمان می‌تواند حداکثر ۳ غذای گیاه ذخیره کند. هرگاه یک زامبی که درخشان می‌میرد متن زیر چاپ میشود.

The glowing zombie dropeed a plant food; you have <n> plant foods now.

می‌توان با دستور زیر از یک غذای گیاه استفاده کرد. در بخش گیاهان در مورد اثر غذای گیاه روی هر گیاه توضیح داده شده است.

feed plant -l (<x>, <y>)

تقلب

cheat add-plant-food

که یک غذای گیاه می‌دهد.

چاپ بازی

با دستور زیر شرایط کنونی بازی به صورت ترمینالی چاپ می‌شود. در هر خانه باید مشخص شود که آیا زامبی وجود دارد، گیاه وجود دارد و به طور کلی شرایط فعلی نشان داده شود. همچنین شکل زمین‌های متفاوت (آب، قبر، کلاسیک یخ‌زده) باید متمایز باشد. در ابتدای خروجی نیز باید ذکر شود که موج چندم هستیم، چند غذا داریم، چند خورشید داریم و ... همچنین باید مشخص شود که آیا در هر ردیف ماشین چمن‌زنی تا به حال استفاده شده است یا خیر. توجه کنید که چون حرکت زامبی‌ها به صورت پیوسته است، مختصات زامبی‌ها در راستای افقی می‌تواند عددی اعشاری باشد، اما مختصات گیاهان همواره عددی صحیح است.

show map

وضعیت گیاهان

با دستور زیر می‌توان وضعیت آن که برای کشت هرگیاه چه قدر خورشید لازم است و آیا قابل کاشت هست، و اگر نیست تا چند ثانیه دیگر قابل کشت می‌شود باید نشان داده شود.

show plants status

وضعیت خانه

با دستور زیر می‌توان اطلاعات گیاهی(هایی) که بر روی یک خانه هستند و یا زامبی‌های که آنجا هستند مشخص می‌شود (اطلاعاتی از قبیل خصوصیات ذاتی، سلامتی و ...)

show tile status -l (<x>, <y>)

سکه و الماس و گلدان

هر زامبی هنگام کشته شدن، با احتمال ده درصد ممکن است ۱ الماس یا ۵۰ سکه یا یک گلدان (مربوط به گلخانه) بیندازد. در این صورت، باید پیام مناسب به صورت زیر چاپ شود:

A zombie dropeed a <coin/diamond/pot>; you have <n> <coins/diamonds/pots> now.

نکته درباره‌ی این بخش

گیاهان

مکانیزم‌‌ها و دسته‌‌بندی گیاهان

۱. دسته‌بندی گیاهان

۱. تولیدکننده‌های خورشید (Sun Producers):

وظیفه اصلی این گیاهان تولید خورشید است.

۲. شلیک‌کننده‌های مستقیم (Shooters):

بزرگترین دسته گیاهان که مستقیماً به سمت جلو تیر پرتاب می‌کنند. تیرهای آن‌ها می‌تواند ویژگی‌های متفاوتی داشته باشد: تیرهای آتشین (که دمیج دوبرابر دارند و یخ‌ها را آب می‌کنند)، تیرهای یخی (که سرعت زامبی‌ها را کم می‌کنند) و تیرهای سمی (که زره زامبی‌ها را نادیده گرفته و مستقیم به خود زامبی آسیب می‌زنند).

۳. پرتاب‌کننده‌های هوایی (Lobbers):

این گیاهان تیر خود را مثل منجنیق پرتاب می‌کنند تا مستقیماً روی سر زامبی‌ها فرود بیاید. این تیرها موانع را نادیده می‌گیرند.

۴. گیاهان انفجاری (Explosives):

گیاهانی که یا به محض کاشته شدن منفجر می‌شوند، و یا (مانند مین‌ها) با نزدیک شدن زامبی منفجر می‌شوند. این گیاهان به صورت مساحتی آسیب وارد می‌کنند.

۵. مبارزان تن‌به‌تن (Melee Attackers):

این گیاهان تیراندازی نمی‌کنند و مستقیماً به زامبی‌هایی که به آن‌ها نزدیک می‌شوند ضربات فیزیکی (مثل مشت زدن یا قورت دادن) وارد می‌کنند.

۶. گیاهان مدافع (Wall-nuts):

این گیاهان جان (HP) بسیار بالایی دارند و وظیفه‌شان مسدود کردن راه زامبی‌هاست.

۷. گیاهان پشتیبان (Modifier):

این گیاهان معمولاً حمله مستقیم یا آسیب فیزیکی ندارند، بلکه شرایط میدان نبرد را به نفع شما تغییر می‌دهند.

۸. گیاهان نفوذکننده (Strike-through):

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

۹. گیاهان ردیاب (Homing):

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

۱۰. نعناع‌ها (Mints):

این گیاهان به محض کاشته شدن، تاثیری مشابه با دادن «غذای گیاه» روی تمامی گیاهان هم‌خانواده‌ی خود در سراسر باغچه می‌گذارند و پس از مدت کوتاهی از بین می‌روند.

۲. مکانیزم‌های کلی گیاهان

۳. تگ ها

هر گیاه، دارای تعدادی از این تگ‌ها است.

۱. (Day) روز: گیاهانی که مخصوص مراحل روز هستند یا بهترین عملکردشان در این مراحل است.

۲. (night) شب: گیاهانی که ذاتا برای مراحل تاریک طراحی شده‌اند.

۳. (Shroom) قارچ: گیاهانی که از خانواده قارچ‌ها هستند.

۴. (wramp-up) رشد تدریجی: گیاهانی که قدرت، اندازه یا میزان تولید آن‌ها بلافاصله پس از کاشت در بالاترین حد نیست و با گذشت زمان در زمین قوی‌تر می‌شوند (مثل Sun-shroom یا Kiwibeast).

۵. (Pea) نخود: خانواده نخودها. پرتابه‌های این گیاهان از قوانین فیزیکی نخودها پیروی می‌کنند و با گیاهانی مانند Torchwood (که تیرها را آتشین می‌کند) تعامل مستقیم دارند.

۶. (Ice) یخ: دارای ویژگی‌های انجماد یا سرما. این گیاهان سرعت حرکت و حمله زامبی‌ها را کاهش می‌دهند. (توجه: حملات آتشی می‌توانند اثر کندیِ این تگ را خنثی کنند).

۷. (Fire) آتش: دارای مکانیزم حرارتی و آتشین. آسیب بیشتری وارد می‌کنند، می‌توانند اثرات یخ‌زدگی را خنثی کنند و در مراحل سرد، محیط اطرافشان را گرم نگه دارند.

۸. (stack) انباشته‌پذیر: گیاهانی که مکانیک کاشت لایه‌ای دارند. یعنی می‌توان آن‌ها را روی سر یکدیگر (مثل Pea Pod) یا روی سایر گیاهان (مثل پوشش Pumpkin) کاشت.

۹. (charge) نیازمند شارژ: گیاهانی که برای شلیک یا فعال شدن قابلیت اصلی‌شان، به یک زمان انتظار یا شارژ اولیه نیاز دارند (مثل پر کردن توپ Citron).

۱۰. (Magic) جادویی: گیاهانی با توانایی‌های غیرفیزیکی که معمولاً قوانین عادی حمله را دور می‌زنند، مانند هیپنوتیزم کردن، تغییر شکل زامبی‌ها، یا نادیده گرفتن موانع.

۱۱. (Poison) سمی: ایجادکننده آسیب مستمر (Damage over Time). این گیاهان زامبی‌ها را مسموم کرده و معمولاً زره‌ها (مثل سطل یا مخروط) را نادیده می‌گیرند و مستقیماً از جان اصلی زامبی کم می‌کنند.

۱۲. (Water) آبی: گیاهانی که مکانیک اصلی آن‌ها مرتبط با آب است؛ یا قابلیت کاشت مستقیم درون آب را دارند و یا برای محیط‌های آبی ضروری هستند (مثل Tangle Kelp یا Lily Pad).

۱۳. (AoE) مساحتی: گیاهانی که آسیب یا اثر مهارتشان فقط به یک هدف برخورد نمی‌کند، بلکه منطقه‌ای (مثلاً ۳x۳) یا گروهی از زامبی‌ها را همزمان تحت تأثیر قرار می‌دهد.

۱۴. (Trap) تله: گیاهانی که بلافاصله حمله نمی‌کنند، بلکه روی زمین کاشته می‌شوند و با نزدیک شدن یا تماس مستقیم زامبی‌ها فعال شده و واکنش نشان می‌دهند (مثل Potato Mine).

۱۵. (moveZombies) جابجاکننده: گیاهانی که مسیر حرکت زامبی‌ها را دستکاری می‌کنند و آن‌ها را مجبور می‌کنند به لاین‌های (ردیف‌های) مجاور بروند یا به سمت لاین خاصی کشیده شوند (مثل Garlic و Sweet Potato).

۱۶. (Sun) خورشید: تگی برای گیاهانی که با وجود اینکه دسته‌بندی اصلی‌شان «تولیدکننده» نیست، اما مکانیک‌هایی دارند که منجر به تولید یا رهاسازی خورشید می‌شود (مثل Sun Bean پس از خورده شدن).

۱۷. (Explosive) انفجاری: گیاهانی که ویژگی یا واکنش ثانویه آن‌ها ایجاد یک انفجار مخرب است (مثل وقتی که Explode-o-nut پس از تمام شدن جانش منفجر می‌شود).


جدول مشخصات گیاهان

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

phase1/assets/Data/plants.csv

جدول گیاهان

زامبی‌‌ها

می‌توانید در این جا مشخصات کل زامبی‌ها را مشاهده کنید. جزئیات هرکدام در بخش زیر آمده است. زمابی‌های دارای رنگ آبی، امتیازی هستند.

انواع زامبی‌ها

مشترک بین همه چپتر ها

زامبی معمولی

ساده‌ترین نوع زامبی. با سرعت مشخصی راه می‌رود و در صورت رسیدن به گیاهان شروع به خوردنشان می‌کند. همچنین دارای انواع زره‌پوش نیز می‌شود. در زامبی‌های زره‌پوش، ابتدا باید زره از بین برود و سپس می‌توان به زامبی آسیب رساند. همچنین در صورت برخورد تیر سمی به این زامبی‌ها، آسیب مستقیماً به زامبی وارد می‌شود.

معمولی
Frame Zombie
سرمخروطی
Frame Zombie
سرسطلی
Frame Zombie
شوالیه
Frame Zombie
سربلوکی
Frame Zombie

زامبی غول پیکر (Gargantuar)

Frame Zombie

ایمپ (Imp)

Frame Zombie

فوتبالیست (All star)

Frame Zombie

زامبی آرکید (arcade zombie)

Frame Zombie

چتر دار (Parasol Zombie)

Frame Zombie

تورکوایز (Turquoise Zombie)

Frame Zombie

اکتشافگر (Prospector Zombie)

Frame Zombie

پیانیست (Pianist Zombie)

Frame Zombie

پیرمرد (Newspaper Zombie)

Frame Zombie

زامبی دبه ای (Barrel Roller Zombie)

Frame Zombie

همچنین دبه خالی نیز بدین شکل است:

Frame Zombie

مصر باستان (Ancient Egypt)

خورشید دزد (Ra Zombie)

Frame Zombie

مشعل دار (Explorer Zombie)

Frame Zombie

قبرساز (Tombraiser)

Frame Zombie

غار های یخی (Frostbite Caves)

زامبی‌های این بخش، برخلاف بخش‌های قبل، در صورت برخورد با تیرهای یخی، یخ نمی‌زنند.

زامبی دودو سوار (Dodo Rider Zombie)

Frame Zombie

زامبی شکارچی (Hunter Zombie)

Frame Zombie

تروگلوبایت (Troglobite)

Frame Zombie

ساحل (Big Wave Beach)

ماهیگیر (Fisherman Zombie)

Frame Zombie

غواص (Snorkel Zombie)

Frame Zombie

اختاپوس پرت کن (Octopus Zombie)

Frame Zombie

قرون وسطی (Dark Ages)

ژانگولر (Juggler / Jester Zombie)

Frame Zombie

جادوگر (Wizard Zombie)

Frame Zombie

پادشاه (King)

Frame Zombie

ایمپ اژدها (Imp Dragon)

Frame Zombie

دستورات زامبی‌ها

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

نمایش اطلاعات زامبی

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

zombies info

نمونه خروجی:

King: position: 9, 4 health: 400 armor: effects: chilled: 3.2s Knight: position: 7, 5 health: 300 armor: crown: 800 shoulderArmor: 700 effects: ConeHead: position: 5, 5 health: 200 armor: cone: 400 effects: frozen: 2s ConeHead: position: 3, 3 health: 100 armor: effects:

اضافه کردن زامبی

با این دستور، زامبی از نوع موردنظر در سطر y ام و ستون x ام ظاهر میشود

cheat spawn-zombie -t <zombie-type> -l <x, y>

فصل‌‌ها

فصل‌‌های Adventure

بخش adventure شامل چهار فصل می‌باشد که هر فصل دارای ۴ مرحله است. مرحله‌ی اول هر فصل یک مرحله‌ی معمولی است که توضیحات آن در بخش‌های قبل داده شده. دو مرحله‌ی بعدی فصل، مراحل ویژه هستند که در ادامه درباره‌شان توضیح داده خواهد شد (توجه شود که ۸ نوع مرحله‌ی ویژه داریم، پس هر یک از مراحل ویژه باید یک بار در adventure دیده شوند). مرحله آخر هر فصل‌ هم مرحله‌‌ی رئیس است که در فاز بعدی باید پیاده سازی کنید.

هر فصل ویژگی‌های خاص خود را دارد. همچنین تعدادی از زامبی‌ها فقط در فصل‌های خاصی دیده می‌شوند که در بخش زامبی‌ها در این مورد توضیح داده شده است. در بخش زیر، هر یک از چهار فصل و ویژگی‌های آن توضیح داده شده اند:

مصر باستان

این فصل نقش معرفی بازیکن به محیط بازی را دارد و فقط دارای دو ویژگی خاص است:

قبر: در ابتدای هر مرحله، تعدادی قبر وجود دارد که مانع تیرهای مستقیم گیاهان می‌شوند. دارای جان 700 هستند و باید نابود شوند تا تیرهای مستقیم گیاهان بتوانند از آن خانه رد شوند.

گردباد: زامبی‌ها ممکن است به جای اینکه به صورت عادی وارد نقشه شوند، با گردباد وارد شوند از لحظه ورود، بین 1 تا 4 ستون، جلوتر از چیزی که در حالت عادی رخ می‌دهد وارد شوند (فقط در موج آخر).

غارهای یخی

در این فصل زامبی‌ها با تیر یخی گیاهان یخ نمی‌زنند. همچنین موارد زیر در این فصل وجود دارند:

باد یخی: در هر موج از زامبی‌، ممکن است باد یخی به تعدادی از ردیف ها برخورد کند و کلیه گیاهان (به جز گیاهانی که تگ آتشین دارند) آن ردیف‌ها، یکی به سطح یخزدگی‌شان اضافه می‌شود. در کل سه سطح یخ زدگی وجود دارد که دو سطح اول هیچ کاری نمی‌کنند، و در سطح سوم گیاه به طور کامل یخ می‌زند. گیاهان یخ زده تا زمانی که یخشان از بین نرود، هیچ کاری نمی‌کنند. یخ روی گیاهان 600 تا سلامتی دارد و باید با تیر گیاهان نابود شود، یا با تیری آتشین بلافاصله از بین برود. همچنین اگر در یکی از 8 خانه اطراف گیاه یخ زده، گیاه آتشینی باشد، با نرخ 60 سلامتی بر ثانیه یخ آسیب می‌بیند. توجه شود که زامبی شکارچی نیز مانند باد یخی، سطح یخ زدگی گیاهان را یکی بالا می‌رود و اثر هردو یکی است.

زمین یخی: در بعضی مراحل این فصل، تعداد زمین لیز روی نقشه وجود دارد که دارای جهت هستند. این جهت از پیش تعیین شده است و در وسط مرحله تغییر نمی‌کند. زامبی‌ها با راه رفتن روی آن به ردیف بالایی یا پایینی (بسته به جهت زمین لیز) می‌روند. توجه شود که زامبی دودو سوار که از موانع پرواز می‌کرد، از زمین لیز نیز فرار می‌کند.

زامبی یخ‌زده در ابتدای بعضی مراحل، تعدادی زامبی یخ زده وجود دارد که مانند گیاهان یخ زده هیچ کاری نمی‌کنند، و وقتی یخشان از بین برود به صورت عادی به حرکت خود ادامه می‌دهند.

ساحل موج بزرگ

موج آب: در مراحل این فصل، تعدادی از ستون‌های سمت راست صفحه دریا است. برای کاشت گیاه روی آن، ابتدا باید یک lily pad روی آب قرار داد. البته تعدادی از گیاهان را می‌توان به طور مستقیم روی آب کاشت که در بخش گیاهان ذکر شده است.

سطح آب در طول مرحله می‌تواند تغییر کند. برای مثال ممکن است در یک زمان فقط سه ستون سمت راست باشد، و در چند ثانیه بعد پنج ستون سمت راست را شامل شود. هرگاه که موجی از زامبی‌ می‌آید، سطح آب نیز تغییر می‌کند. یک خط افقی در هر مرحله وجود دارد که مشخص می‌کند سطح آب فقط تا این ستون بالا می‌آید. اگر سطح آب بالا بیاید و گیاهی که در حالت عادی نمی‌توان در آب کاشت روی آب قرار بگیرد، آن گیاه از بین می‌رود.

ساحل‌های پست: تعدادی از خانه‌های زمین بازی، ممکن است ساحل پست باشند. در این صورت اگر آب روی آنها باشد، ممکن است زامبی‌هایی از زیر آن بیرون بیایند.

قرون وسطی (عصر تاریکی)

اصلی‌ترین ویژگی این مراحل این است که شب است و از آسمان خورشید پایین نمی‌آید. پس تنها راه تولید خورشید، از گیاهان است.

قبر: در این فصل نیز قبر نیز وجود دارد. یک تفاوت اصلی با این قبرها با قبرهای مصر باستان این است که در ابتدای هر موج زامبی ممکن است تعدادی قبر به صورت تصادفی به وجود بیاید (مگر آنکه در آن خانه گیاهی کاشته شده باشد). همچنین بعضی از قبرهای قرون وسطی دارای 50 خورشید یا یک غذای گیاه هستند. هنگام تشکیل هر قبر باید به بازیکن اطلاع داده شود و هنگام چاپ کردن نقشه، نوع این قبرها نیز مشخص شود.

نکرومنسی: بعضی از خانه‌های نقشه، پتناسیل آن را دارند که در صورتی که قبر رویشان باشند، در ابتدای هر موج زامبی، یک زامبی از زیر آن قبر به وجود بیاورند.

مراحل ویژه (Special Levels)

به جز مراحل عادی بازی، بعضی مراحل ویژه نیز باید پیاده‌سازی شوند. این مراحل به صورت خاص بازیکن را محدود می‌کنند تا با انجام یک سری وظیفه مشخص، مرحله را به پایان برساند.

معرفی مراحل ویژه:

1. نوار کناری (Conveyor Belt Level)

example

در این مرحله به جای قسمت انتخاب گیاه، بازیکن مستقیم وارد بازی می‌شود و نوار (تسمه نقاله‌ای) را در گوشه صفحه مشاهده می‌کند. این نوار هر ۱۲ ثانیه یک گیاه را به صورت تصادفی (از بین گیاه‌های مخصوصی که بازیکن موفق به دریافت آن شده، بدون نیاز به انتخاب آن‌ها) بالا می‌آورد. دقت شود که اولین گیاه در لحظه ورود بازیکن به مرحله تولید می‌شود.


2. گیاهان زندانی (Locked Plants Level)

example

در این نوع مرحله، تعدادی از اسلات‌های انتخاب گیاه از ابتدا قفل شده‌اند یا بعضی گیاهان خاص به طور کلی در این مرحله در دسترس نیستند.


3. محافظ دانه ها (Save Our Seeds)

example

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


4. نبرد زماندار (Timed War)

در این مرحله یک تایمر در بالای صفحه نمایش داده می‌شود. بازیکن باید تا پایان تایمر تعداد مشخص‌شده‌ای از زامبی‌ها را از بین ببرد؛ مثلا ۱۲ زامبی در ۵ ثانیه. در نوع دیگر بازیکن باید در زمان معلوم شده، تعدادی مشخص خورشید تولید کند.


5. شب عملیات (Night Ops)

مشابه شب در PVZ کلاسیک، هیچ آفتابی از آسمان نمی‌بارد. بازیکن فقط با آفتاب تولیدشده توسط گیاهان (مثل گل آفتاب‌گردان) می‌تواند زنده بماند.


6. ددلاین (Dead Line)

example

در این مراحل، یک خط عمودی در جای مشخصی از نقشه بازی وجود دارد. بازیکن به محض عبور هر زامبی از این خط، بلافاصله بازی را می‌بازد.


7. از دست نده (Love Your Plants)

اگر تعداد مشخصی از گیاهان، مثلا ۵ عدد، از بین بروند یا توسط زامبی‌ها خورده شوند، بازیکن بازی را می‌بازد.


8. هر چه رسد بکار (Plant What You Get)

بازی با مقدار مشخصی آفتاب اولیه (مثلاً ۵۰۰ یا ۸۰۰) شروع می‌شود و دیگر هیچ آفتابی از آسمان نمی‌بارد. همچنین بازیکن امکان انتخاب گل‌های آفتابگردان را ندارد. بازیکن فقط با همان آفتاب اولیه باید تمام زامبی‌های مرحله را شکست دهد.

در ابتدای مرحله‌، زامبی‌ای وارد باغ نمی‌شود و بازیکن می‌تواند بدون اینکه از زمان recharge گیاهان استفاده شود، هرچقدر که بخواهد گیاه بکارد، سپس می‌تواند با دستور

start zombie waves

کاری کند که زامبی‌ها بیایند و بازی به روند عادی شروع شود. البته می‌توانید مکانیزم شروع مرحله و باقی جزئیات را به انتخاب خودتان تغییر دهید، اما فرایند کلی باید به همین صورت باشد.

گلخانه

توصیف کلی گلخانه

در گلخانه، 20 گلدان (در 4 ردیف و 5 ستون) داریم که می‌توان در آن گل کاشت. گلدان‌های ردیف 2 تا 4 در ابتدای بازی قفل هستند و با پرداخت سکه می‌توان قفل هر گلدان را باز کرد. هر گلدان یک اسلات ثابت است که پس از دریافت، برای همیشه آزاد می‌شود. مختصات هر گلدان به صورت (<x>,<y>) با x از 1 تا 5 و y از 1 تا 4 در نظر گرفته می‌شود. در صورتی که به هر دلیلی نمی‌توان در آنجا گیاه کاشت (قفل بودن گلدان، اشغال بودن خانه یا نداشتن گلدان آزاد)، خطای مربوطه چاپ شود.

نمایش وضعیت گلخانه

برای مشاهده جدول گلخانه و وضعیت هر گلدان از دستور زیر استفاده می‌شود:

show greenhouse

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

کاشت گیاه در گلدان

در صورتی که گلدان آزاد باشد، با دستور زیر یک گیاه به صورت تصادفی کاشته می‌شود:

plant pot at (<x>, <y>)

هر بار کاشت، با احتمال 50 درصد یک گل معمولی (marigold) و با احتمال 50 درصد یکی از گیاهانی که بازیکن تا به حال آنلاک کرده است و قابلیت غذای گیاه دارد (به صورت تصادفی) می‌کارد.

رشد گیاهان

وقتی گیاه گل معمولی است، پس از گذشت 2 ساعت به طور کامل رشد می‌کند، و اگر گیاه تصادفی باشد، بعد از گذشت 8 ساعت به طور کامل رشد می‌کند. زمان رشد در این فاز بر اساس ساعت سیستم محاسبه می‌شود.

برداشت گیاهان

وقتی گیاه به طور کامل رشد کرد، می‌توان آن را برداشت کرد:

collect (<x>, <y>)

اگر گیاه برداشته شده گل معمولی باشد، 500 سکه به بازیکن می‌دهد. اگر گیاه برداشته شده از گیاهان آنلاک‌شده باشد، یک بوست ذخیره‌ای برای همان گیاه ایجاد می‌شود؛ در اولین دفعه‌ای که بازیکن در مرحله‌ای از آن گیاه استفاده کند، آن گیاه boost می‌شود و این بوست مصرف می‌شود. برای هر گیاه همزمان فقط یک بوست ذخیره می‌شود؛ اگر بوست آن گیاه از قبل ذخیره شده باشد، برداشت جدید هیچ بوست اضافه‌ای نمی‌دهد و تنها گلدان را خالی می‌کند. برداشت marigold همیشه 500 سکه می‌دهد.

تسریع رشد گیاهان

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

grow (<x>, <y>)

هزینه تسریع برابر با سقف ساعت‌های باقی‌مانده است (مثلاً 2.5 ساعت = 3 الماس) و اگر گیاه آماده برداشت باشد، باید خطای مناسب نمایش داده شود.

فروشگاه

ورود به فروشگاه

فروشگاه از داخل گلخانه قابل دسترسی است:

enter shop

ساختار فروشگاه

فروشگاه دو بخش دارد:

  1. کالاهای دائمی که همیشه در دسترس‌اند.
  2. پیشنهاد روزانه که هر روز در ساعت 00:00 (در این فاز بر اساس ساعت سیستم) رفرش می‌شود و تنها یک بار قابل خرید است.

مشاهده کالاها

shop list shop daily

کالاهای دائمی

در ادامه منظور از «بسته بذر» همان Seed Packet بازی اصلی است.

آیتم قیمت واحد خرید توضیح
گلدان (Pot) 2000 سکه 1 باز کردن یک اسلات گلخانه (حداکثر 20 عدد)
غذای گیاه (Plant Food) در ابتدای مرحله بعد 3 الماس 1 حداکثر تعداد ذخیره همزمان 3 عدد است
بسته بذر تصادفی 1000 سکه 5 بسته بذر برای یک گیاه تصادفی از گیاهان آنلاک‌شده
بسته بذر انتخابی 5 الماس 10 بسته بذر برای یک گیاه انتخابی از بین گیاهان آنلاک‌شده
تبدیل ارز 5 الماس 500 سکه تبدیل الماس به سکه

پیشنهاد روزانه

هر روز یک بسته بذر ویژه برای یک گیاه تصادفی (از بین گیاهان آنلاک‌شده) ارائه می‌شود. این بسته شامل 10 بسته بذر است که قیمت پایه آن 2000 سکه است و با 20٪ تخفیف، با قیمت 1600 سکه فروخته می‌شود. شناسه و تاریخ پیشنهاد روزانه باید ذخیره شود تا در هر روز فقط یک‌بار قابل خرید باشد.

خرید از فروشگاه

shop buy -i <item_id> -n <count> [-t <plant_type>]

تاثیر اقتصادی

منابع اصلی درآمد سکه و الماس از مراحل، کوئست‌ها، لیدربورد و گلخانه تأمین می‌شوند. فروشگاه نقش اصلی در مصرف سکه و الماس دارد و باید تعادل اقتصادی بازی را حفظ کند؛ به‌ویژه:

کوئست‌‌ها

travel log

در این بخش مأموریت‌های مختلف بازی برای درگیر شدن بیشتر کاربر با بازی و هدایت کاربر در روند بازی است. کوئست‌ها به چهار دسته‌ی کلی تقسیم می‌شوند که هر کدام شرط کامل شدن و پاداش مخصوص به خودشان را دارند که در جدول زیر قید شده‌اند.

همانطور که در تصویر بالا می‌تواند دید، کوئست‌ها در منوی travel log قرار دارند، و با توجه به دسته‌بندی‌شان، در یک صفحه متفاوت در travel log قرار می‌گیرند. برای تغییر در صفحه travel log از دستور زیر استفاده می‌شود:

travel log page <page_name>

همچنین صفحه مینی‌گیم در travel log وجود دارد که در آن مینی‌گیم‌هایی که در ادامه توضیح داده می‌شوند وجود دارند.

Quests-pvz2

اولویت‌بندی و مکانیزم تعاملی

برای بالا بردن User Engagement، سیستم کوئست‌ها بر اساس اولویت‌های زیر نمایش داده می‌شوند:

پاداش ها در بازی به سه صورت زیر هستند:

بخش امتیازی

بازی امتیازی

این بخش مانند مراحل معمولی در adventure است. با این تفاوت که آنچه اهمیت دارد، امتیازاتی است که در لحظه اتمام بازی، بازیکن به دست آورده است. نحوهٔ امتیازدهی بازی امتیازی با فرمول یا قواعد دقیق مشخص می‌‌شود. میوپوینت در این بازی همان امتیاز است.

تفاصیل محاسبه میوپوینت

برای این بخش شما باید 5 الگوی امتیازگیری تعریف کنید که با استراتژی‌های مختلف بتوان میزان میوپوینت متفاوتی بدست آورد. چند مثال از این الگوها می‌تواند موارد زیر باشد:

این بازی در هر روز برای همه‌ی کاربران با الگوریتم یکسانی زامبی تولید می‌کند. در فازهای آینده نیز بخش‌های امتیازی سوار بر این بخش خواهیم داشت.

لیدربورد

در جدول امتیازات، نام کاربری تمام بازیکنانی که ثبت نام کرده اند به همراه موارد زیر نمایش داده می‌شود:

  1. آخرین مرحله و فصلی که بازیکن موفق به انجام آن شده. برای مثال مرحله ۱ فصل ۳
  2. تعداد مینی گیم هایی که بازیکن با موفقیت انجام داده است.
  3. تعداد کوئست های روزانه و غیر روزانه (به طور مجزا) که بازیکن انجام داده است.
  4. بالاترین امتیازی که بازیکن در بازی امتیازی کسب کرده.

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

توجه کنید که این جدول امتیازات مربوط به کل بازی است و صرفا به امتیازات بازی امتیازی محدود نیست.

صفحه جدول امتیازات و بازی امتیازی باید از منوی اصلی قابل دسترسی باشد.

مینی‌گیم‌ها

مینی‌گیم‌ها مراحل اضافه‌تر هستند که از طریق travel log قابل دسترسی‌اند. در travel log یک صفحه مانند تصویر زیر وجود دارد که در آن‌ها مینی‌گیم‌ها قرار می‌گیرند. از هر مینی‌گیم ۳ مرحله باید پیاده‌سازی شود که هر یک از قبلی سخت‌تر است.

کوزه شکنی (Vasebreaker)

معرفی مینی گیم

در این مینی‌گیم، هدف بازیکن این است که تمامی کوزه‌های چیده‌شده روی حیاط خودش را بشکند و هم‌زمان مراقب باشد که زامبی‌هایی که ممکن است درون کوزه بوده باشند، مغز او را نخورند.

Vasebreaker Example

جزئیات پیاده سازی

در این مینی‌گیم، بازیکن گیاهان خودش را انتخاب نمی‌کند، همچنین خورشید از آسمان نمی‌افتد و تنها منبع تولید زامبی‌ها و گیاهان از کوزه‌هاست. هر کوزه می‌تواند یا خالی باشد، یا حاوی یک زامبی باشد و یا دارای یک Seed Packet یک‌بارمصرف برای یک گیاه باشد. لازم به ذکر است که Seed Packet‌های انداخته‌شده روی زمین پس از مدتی ناپدید می‌شوند و بازیکن باید سریع‌تر برای کاشتن آن‌ها اقدام نماید.

کوزه های خاص

Normal Vase

علاوه بر کوزه های عادی که صرفا دارای یک نماد علامت سوال هستند، دو نوع کوزه خاص هم داریم.

Plant Vase
Gargantuar Vase

دستورات مربوط به این مینی‌گیم (مانند شکستن کوزه یا برداشتن seed packet افتاده از یک کوزه) را خودتان انتخاب کنید.

بولینگ گردویی (Wallnut Bowling)

معرفی مینی گیم

در این مینی‌گیم، بازیکن حق انتخاب گیاهان خودش را ندارد و گیاهان از طریق نوار (Conveyor Belt) به بازیکن داده می‌شود. این گیاهان گردوهایی هستند که پس از کاشته شدن مانند توپ بولینگ به سمت زامبی‌ها می‌روند و به آن‌ها برخورد می‌کنند (برخوردها باعث توقف گردوها نمی‌شود و صرفاً مسیرشان عوض می‌شود) و به زامبی‌ها صدمه می‌زنند (میزان آسیب به اندازه میزان سلامتی زامبی عادی است). بازیکن باید به کمک این گردوها از پیشروی زامبی‌ها جلوگیری کند.

جزئیات پیاده سازی

در این مینی‌گیم خورشید از آسمان نمی‌افتد و دو نوع گیاه خاص به بازیکن داده می‌شود. یک خط قرمز رنگ بر روی حیاط کشیده شده و بازیکن از درب خانه‌اش تا این خط قرمز حق کاشتن گیاه دارد.

معرفی گیاهان

من زامبی (i, zombie)

معرفی مینی گیم

در این مینی‌گیم، تعدادی گیاه به صورت تصادفی در تعدادی از ستون‌های سمت چپ صفحه کاشته شده است و جلوی آن گیاهان، یک خط قرمز وجود دارد. بازیکن باید در این مینی‌گیم، به جای گیاهان، طرف زامبی‌ها باشد و باید با گذاشتن زامبی‌ها، گیاهان را شکست دهد. در تصویر زیر می‌توانید نمونه‌ای از آن را مشاهده کنید (توجه کنید که این اسکرین‌شات از plants vs. zombies 1 گرفته شده است و برای این است که ایده حدودی از خواسته پروژه داشته باشید، برای همین ممکن است بعضی گیاهان یا زامبی‌های این تصویر در پروژه وجود نداشته باشند)

i, zombie

جزئیات پیاده سازی

بازیکن با خرج کردن خورشید (که در ابتدای مرحله ۱۵۰ تا از آن را دارد) زامبی‌ها را در سمت راست خط قرمز می‌گذارد تا به گیاهان حمله کنند.

در این مراحل یک نوع زامبی خاص وجود دارد که به اندازه زامبی سطل دار سلامتی دارد و برای زامبی‌ها خورشید تولید می‌کند. در ابتدا نرخ تولید خورشیدشان خیلی پایین است، ولی با گذر زمان، نرخ تولید خورشیدشان (با فرمول دلخواه خودتان) بیشتر می‌شود. در ابتدای مرحله در هر ردیف، یکی از این زامبی‌ها وجود دارد، و بازیکن نمی‌تواند از این نوع زامبی در زمین بگذارد (پس اگر هرکدام از این زامبی کشته شود، دیگر بازیکن نمی‌تواند دوباره آن را بگذارد). تعامل گیاهان با زامبی‌ها در این مینی‌گیم فرقی با بازی عادی ندارد. در انتهای هر ردیف از باغچه، یک مغز به جای lawn mower وجود دارد که زامبی‌ها با رسیدن به آن مغز، آن را می‌توانند بخورند. هرگاه تمام مغزهای هر 5 ردیف خورده شدند، بازیکن برنده می‌شود. اگر بازیکن خورشید کافی برای گذاشتن زامبی بیشتری نداشته باشد و تمام زامبی‌های موجود در صفحه از بین رفته باشند، بازیکن می‌بازد.

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

بخش امتیازی

Beghouled (ترکیب سه‌تایی)

معرفی مینی گیم

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

در این مرحله، بازیکن باید گیاهان را طوری جابه‌جا کند که یک ترکیب سه‌تایی (یا بیشتر) از گیاه یکسان در یک ستون یا یک ردیف تشکیل شود (تا حدی شبیه به بازی candy crush).

نکته: فقط در صورتی می‌توان گیاهی را جابه‌جا کرد که با جابه‌جایی آن یک ترکیب سه‌تایی ایجاد شود.

Beghouled

هرگاه ترکیبی ساخته شود، گیاهان آن ترکیب از بین می‌روند و گیاهان بالای آن‌ها پایین می‌آیند و هرجا لازم باشد، گیاه به صورت تصادفی از بالا ساخته می‌شود. بازیکن وقتی برنده می‌شود که تعداد معینی ترکیب سه‌تایی (یا بیشتر) بسازد.

جزئیات پیاده سازی

هرگاه که بازیکن یک ترکیب سه‌تایی ایجاد کند، یک خورشید ۵۰ تایی می‌گیرد. با این خورشیدها، می‌تواند گیاهان موجود در زمین را ارتقا دهد (که درباره‌ی جزئیات ارتقا در ادامه توضیح داده شده است). اگر بتواند ترکیب را بیشتر از 3 تا کند، به ازای هر چه ترکیب بزرگتر است، یک خورشید بیشتر می‌گیرد (برای مثال ترکیب چهارتایی، دو خورشید می‌دهد و ترکیب پنج‌تایی، 3 خورشید می‌دهد). همچنین اگر بازیکن حرکتی را انجام دهد و بعد از حرکت او، به خاطر تشکیل تصادفی گیاهان ترکیب 3 تایی جدیدی ایجاد شود، این ترکیب‌ها یکی خورشید بیشتر از حالت عادی خود می‌دهند.

نکته: در صورتی که در زمین بازی نتوان ترکیب سه‌تایی دیگری ایجاد کرد، باید کل زمین reset شده و به جای هر گیاهی که در باغ است، گیاهی تصادفی تشکیل شود.

هرگاه یک زامبی گیاهی را بخورد، در آنجا یک crater یا زمین خاکی ایجاد می‌شود و دیگر در آنجا گیاهی نمی‌تواند قرار بگیرد، چه به صورت عادی، و چه با جابه‌جایی گیاهان.

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

دستورات مربوط به جابجایی گیاهان و انتخاب ارتقا را به دلخواه خودتان انتخاب کنید.

انواع ارتقا

همانطور که در بالا گفته شد، می‌توان گیاهان را ارتقا داد. برای مثال، با خرج کردن 500 خورشید، باید بتوان تمام peashooter های موجود در باغ را به repeater تبدیل کرد. در پایین تعدادی ارتقای پیشنهادی را آورده‌ایم:

هزینه (خورشید) تبدیل به تبدیل از
500 repeater peashooter
1500 mega gatling-pea repeater
500 tall-nut wall-nut
250 fume-shroome puff-shroom
1000 melon-pult cabbage-pult
750 winter melon melon-pult

شما می‌توانید ارتقاهای بیشتر یا متفاوتی بگذارید، ولی لازم است حداقل یک ارتقای دو مرحله‌ای (مانند cabbage-pult به melon-pult و ارتقای melon-pult به winter melon) و ارتقا برای سه گیاه متفاوت را پیاده سازی کنید. انتخاب اینکه چه گیاهان و چه ارتقاهایی در هر مرحله وجود دارد نیز به عهده خودتان است، اما لازم است گیاهان هر مرحله و ارتقاهایشان کمی تفاوت داشته باشند.

بخش امتیازی

Zombotany (زامبی‌های گیاهی)

معرفی مینی گیم

این مینی گیم به این صورت است که زامبی‌ها خاصیت بعضی از گیاهان را دارند، برای مثال بعضی از زامبی‌ها مانند peashooter به جلو تیر پرتاب می‌کنند که به گیاهان خورده و به آنها آسیب می‌زند. بقیه اجزای مرحله (از فرایند انتخاب گیاهان تا پیروزی/باخت) مانند یک مرحله عادی است.

جزئیات پیاده سازی

لازم است که زامبی‌هایی که خواص گیاهان زیر را دارند را پیاده سازی کنید (زامبی‌های زیر، به جز خواص گفته شده، کاملا مانند زامبی‌ عادی هستند):

بقیه‌ی اجزای مرحله مانند یک مرحله معمولی است.