java_HW 2.pdf

‫برنامه سازی پیشرفته‬
‫نیمسال اول ‪94-93‬‬
‫دانشکده مهندسی کامپیوتر‬
‫تمرین دوم‬
‫پ‬
‫پیمان دودانگه‬
‫زمان تحویل‪ 3:‬آذر‬
‫‪ .1‬موعد ارسال تمرین ساعت ‪ 95:32‬روز دوشنبه مورخ ‪ 1525/9/3‬است‪.‬‬
‫‪ .9‬تمرین باید به صورت حضوری تحویل داده شود و استفاده از کامنت‪ ،‬و ساختار کد نمره خواهد داشت‪.‬‬
‫بنابراین نمره کامل از سیستم داوری به معنای نمره کامل نبوده و فقط بخشی از نمره شما خواهد بود‪.‬‬
‫‪ .5‬در صورت داشتن هرگونه مشکل‪ ،‬سوال خود را با تگ مناسب در ‪ Piazza‬مطرح کنید‪.‬‬
‫‪ .4‬با هر گونه تقلب برخورد جدی خواهد شد‪.‬‬
‫‪ .3‬در این تمرین نیازی به زدن تابع ‪ main‬نیست و صرفا باید کالس ها پیاده سازی شوند‪.‬‬
‫‪ .6‬شما می توانید غیر از توابع نام برده شده هر فیلد و یا تابعی که خواستید اضافه کنید اما توجه کنید که‬
‫تمام موارد مضاف (اعم از فیلد یا تابع) باید ‪ private‬باشند‪.‬‬
‫رستوران بین المللی‬
‫آقای شایسته به تازگی صاحب ثروت بزرگی شده است و از آنجایی که عالقه ی زیادی به غذا دارد تصمیم گرفته‬
‫است تعدادی رستوران بین المللی در کشورهای مختلف تاسیس کند‪ .‬او پس از عقد قرارداد با پیمان کاران‬
‫ساختمان های رستوران ها را آماده کرده است‪ .‬او برای هر رستوران مقدار ‪ 01111‬دالر بودجه اولیه درنظر گرفته‬
‫و آن را به صندوق مربوط به آن واریز کرده است‪ .‬با توجه به عالیق آقای شایسته قرار است در هرکدام از این‬
‫رستوران ها ‪ 5‬نوع غذا (چینی‪ ،‬ایتالیایی‪ ،‬فرانسوی‪ ،‬هندی و ایرانی) و از هرکدام ‪ 01‬مدل سرو شود‪( .‬در نتیجه‬
‫‪ 011‬مدل غذا در رستوران سرو می شود)‬
‫برای باالبردن کالس رستوران و سطح رضایت مشتریان از خدمات‪ ،‬در هر شعبه ‪ 31‬گارسون استخدام نموده است‪.‬‬
‫این گارسون ها در دسته های ‪ 5‬تایی قرار می گیرند و هر دسته به یک زبان زنده دنیا مسلط است‪( .‬چینی‪،‬‬
‫ایتالیایی‪ ،‬فرانسوی‪ ،‬هندی‪ ،‬ایرانی و انگلیسی) که گارسون های انگلیسی فقط به مشتریانی که از ‪ 5‬ملیت نام برده‬
‫شده نیستند سرویس می دهند‪.‬‬
‫یک قانون نانوشته در این رستوران هست که همه مشتریانی که غذا خورده اند رعایت می کنند‪:‬‬
‫صرف نظر از قیمت غذایی که خورده اند به گارسون ‪ 3‬دالر انعام می دهند‪ .‬هر گارسون به ازای سرویس دادن به‬
‫هر ‪ 01‬مشتری‪ 01 ،‬دالر هم حقوق می گیرد‪.‬‬
‫با توجه به شرایط سرآشپزان قرار شده است غذاها سری به سری پخته شود؛ یعنی هر وقت کل غذاهای مربوط به‬
‫یک ملیت تمام شد آشپز می آید‪ ،‬موجودی غذاهای ملیت خودش را به مقدار اولیه (‪ 01‬تا از هر مدل) می رساند‬
‫و می رود‪.‬‬
‫اگر مشتری وارد رستوران شود و جا نباشد‪ ،‬به طور اتوماتیک خمس مشتریان موجود در رستوران تسویه حساب‬
‫کرده و مشتری مذکور وارد می شود‪( .‬بنابراین مشتری بدون جا نمی ماند)‬
‫هر مشتری هنگام تسویه حساب برگه نظر سنجی که به وی داده شده و پر کرده است را تحویل می دهد‪ .‬طبق‬
‫رای داده شده (عدد صحیحی بین ‪ 0‬و ‪ )01‬کیفیت غذا تعیین می گردد‪( .‬جزء صحیح میانگین رای مشتریان در‬
‫هر خرید) (هربار که میانگین می گیرند جزء صحیح را حساب می کنند و رای بعدی با همین جزء صحیح‪ ،‬میانگین‬
‫گرفته می شود)‬
‫همچنین هر مشتری منوی مخصوص به خود دارد‪ .‬بدین صورت که مشتری میزان پول درون جیبش‪ ،‬عادت‬
‫غذاییش (گیاهخوار بودن یا نبودن)‪ ،‬ملیتش و غذای ملیتی که میخواهد بخورد‪ ،‬می گوید و طبق این موارد برای‬
‫او یک منو تشکیل داده می شود که عالوه بر رعایت نوع غذایی‪ ،‬غذایی که توانایی خریدش را ندارد از منو حذف‬
‫می گردد‪.‬‬
‫‪ ‬غذاهای این منو بر حسب کیفیتشان مرتب شده اند‬
‫‪ ‬توجه کنید عالوه بر هزینه غذا پول گارسون هم باید داده شود‬
‫‪ ‬غذاهایی که تمام شده اند در منو نباید باشند‬
‫‪ ‬مشتری هایی که گیاهخوار نیستند‪ ،‬گیاه هم میخورند!‬
‫‪ ‬مشتری همیشه اولین غذا را در منوی مخصوصش انتخاب می کند‪.‬‬
‫تخفیف ‪ :‬اگر مشتری قبال حتی یکبار به این رستوران آمده باشد ‪ 0‬دالر تخفیف می گیرد‪.‬‬
‫اداره ی این رستوران ها کامال آقای شایسته را مشغول کرده است‪ ،‬به طوری که دیگر وقت لذت بردن از ثروتش‬
‫را ندارد‪ .‬بنابراین حاضر است به ازای مبلغ قابل توجهی برنامه نویسی استخدام کند تا برنامه ای برای کنترل‬
‫رستوران و همچنین باال بردن رضایت مشتریان (به خاطر الکترونیکی شدن کارها) بنویسد‪.‬‬
‫بشتابید! بشتابید! چنین فرصت هایی کم پیش می آید‪.‬‬
‫در این برنامه شما باید کالس ها و توابع زیر را پیاده سازی کنید‪:‬‬
‫‪public class restaurant‬‬
‫;)‪public restaurant(String name, int capacity‬‬
‫کالس را با گرفتن نام رستوران و ظرفیت آن می سازد‪.‬‬
‫;)‪public restaurant(String name‬‬
‫کالس را با نام گرفته شده می سازد و ظرفیت آن را به طور پیش فرض ‪ 51‬قرار می دهد‪.‬‬
‫;)(‪public String getName‬‬
‫نام رستوران را برمیگرداند‪.‬‬
‫;)(‪public int getFund‬‬
‫مقدار موجودی فعلی صندوق را برمیگرداند‪.‬‬
‫;)(‪public int getCapacity‬‬
‫ظرفیت فعلی رستوران را برمیگرداند‪.‬‬
‫;)(‪public Food[] getFoods‬‬
‫کل غذاهای رستوران (‪ 011‬مدل) را در یک آرایه برمیگرداند‪( .‬غذاها در آرایه به ترتیب ملیت های داده شده است‬
‫و ‪ 5‬مدل آخر از هر ملیت مخصوص گیاهخواران است)‬
‫;)(‪public Customer[] getCustomers‬‬
‫مشتری های نشسته در سالن را در یک آرایه بر میگرداند‪.‬‬
‫;)(‪public Waiter[] getWaiters‬‬
‫تمام گارسون های مشغول به کار در رستوران را در یک آرایه برمیگرداند‪.‬‬
‫;)‪public void setCapacity(int capacity‬‬
‫مقدار ورودی را به عنوان ظرفیت فعلی رستوران قرار می دهد‪.‬‬
‫;)‪public void cooking(char nationality‬‬
‫سرآشپز ملیت ورودی می آید و موجودی غذاها را تکمیل می کند‪.‬‬
‫;)‪public void settlement(Customer customer‬‬
‫مشتری داده شده به تابع‪ ،‬تسویه حساب کرده و رستوران را ترک می کند‪.‬‬
‫‪public void CustomerEntry(char nationality, char foodType, char menuType,‬‬
‫;)‪int money, int vote‬‬
‫مشتری با مشخصات ورودی وارد رستوران می شود‪ .‬پس از تشکیل منو برای او اگر ‪ sad‬نباشد‪ ،‬سر جای خود‬
‫میرود و انعام گارسون را همین ابتدا می دهد‪.‬‬
‫‪class Customer‬‬
‫‪public Customer(int id, char nationality, char foodType, char menuType,‬‬
‫;)‪int money, int vote‬‬
‫کالس را با گرفتن خصوصیات مربوط به مشتری می سازد‪( .‬توجه‪ :‬برای سادگی فکر می کنیم که مشتری در همان‬
‫ابتدا رای خود به غذا را می داند)‬
‫;)(‪public char getNationality‬‬
‫ملیت مشتری را برمیگرداند‪.‬‬
‫;)(‪public char getFoodType‬‬
‫نوع غذایی مشتری از لحاظ گیاهخواری را برمیگرداند‪.‬‬
‫;)(‪public int getId‬‬
‫شماره اشتراک مشتری را بر میگرداند‪( .‬عددی صحیح مثبت که از ‪ 0‬شروع می شود)‬
‫;)(‪public int getMoney‬‬
‫میزان پول مانده در جیب مشتری در هر لحظه را می دهد‪.‬‬
‫;)(‪public int getVote‬‬
‫رای مشتری را بر میگرداند‪.‬‬
‫;)(‪public Menu getMenu‬‬
‫منوی مخصوص به مشتری را برمیگرداند‪.‬‬
‫;)‪public void setMenu(Menu menu‬‬
‫منوی ورودی را به مشتری اختصاص می دهد‪.‬‬
‫;)‪public void setVote(int vote‬‬
‫رای ورودی را به مشتری اختصاص می دهد‪.‬‬
‫;)(‪public boolean sad‬‬
‫اگر منوی اختصاص داده شده به مشتری تهی باشد (یعنی هیچ غذایی مطابق میل او در لیست نیست) مشتری‬
‫ناراحت می شود و بدون اینکه عضو مشتریان رستوران به شمار رود آنجا را ترک می کند‪.‬‬
‫;)(‪public int leaving‬‬
‫مشتری به غذا رای می دهد‪ ،‬هزینه اش را خودش حساب می کند و روی میز می گذارد‪ .‬آماده میشود که رستوران‬
‫او را تسویه حساب کند‪( .‬عدد برگردانده شده همان هزینه محاسبه شده است که قرار است به صندوق رود)‬
‫‪class Waiter‬‬
‫;)‪public Waiter(int id, char nationality‬‬
‫کالس گارسون را با گرفتن شماره استخدامی و ملیت آن می سازد‪.‬‬
‫;)(‪public int getId‬‬
‫شماره استخدامی گارسون را بر میگرداند‪( .‬عددی صحیح و مثبت که از ‪ 0‬شروع می شود)‬
‫;)(‪public char getNationality‬‬
‫ملیت گارسون را برمیگرداند‪.‬‬
‫;)(‪public int getSalary‬‬
‫کل پول بدست آورده شده توسط گارسون را تا آن لحظه برمیگرداند‪.‬‬
‫;)(‪public int getCustomers‬‬
‫تعداد مشتریانی که تا به حال به آنان سرویس داده است برمیگرداند‪.‬‬
‫;)‪public void incrementCustomers(int customers‬‬
‫تعداد مشتریان سرویس داده شده را یکی زیاد می کند‪.‬‬
‫;)‪public void setSalary(int salary‬‬
‫پول گارسون را به اندازه مقدار ورودی زیاد می کند‪.‬‬
‫‪class Food‬‬
‫‪public Food(int id, int quality, int internationalQuality , char nationality‬‬
‫;) ‪, char foodType‬‬
‫کالس را با گرفتن شماره غذا‪ ،‬نوع و ملیتش و کیفیت های اولیه اش می سازد‪.‬‬
‫‪ ‬کیفیت های اولیه برای غذاهای هر ملیت‪ 05 ،‬تای اول در دسته های ‪ 5‬تایی به ترتیب‪ 5-7-01 ،‬است‪.‬‬
‫‪ 5‬تای آخر که مربوط به گیاهخواران است کیفیت ‪ 8‬دارند‪.‬‬
‫‪ ‬کیفیت بین الملل از نظرات مشتریانی با ملیت های متفاوت با غذا تعیین می شود و کیفیت معمولی را‬
‫مشتریان خود آن کشور تعیین می کنند‪.‬‬
‫;)(‪public char getNationality‬‬
‫ملیت غذا را برمیگرداند‪.‬‬
‫;)(‪public int getId‬‬
‫شماره شناسایی غذا را برمیگرداند‪.‬‬
‫;)(‪public int getQuality‬‬
‫کیفیت معمولی غذا را برمیگرداند‪.‬‬
‫;)(‪public int getInternationalQuality‬‬
‫کیفیت بین المللی غذا را برمیگرداند‪.‬‬
‫;)(‪public int getNumber‬‬
‫تعداد موجودی غذا در این لحظه را برمیگرداند‪.‬‬
‫;)(‪public char getFoodType‬‬
‫نوع غذا را برمیگرداند‪.‬‬
‫;)‪public void setNumber(int number‬‬
‫تعداد غذا را برابر مقدار ورودی می کند‪.‬‬
‫;)‪public void setQuality(int quality‬‬
‫کیفیت معمولی غذا را برابر مقدار ورودی می کند‪.‬‬
‫;)‪public void setInternationalQuality(int internationalQuality‬‬
‫کیفیت بین المللی غذا را برابر مقدار ورودی می کند‪.‬‬
‫;)(‪public boolean isFinished‬‬
‫اگر غذا تمام شده باشد‪ true ،‬برمیگرداند‪.‬‬
‫‪class Menu‬‬
‫;)‪public Menu(Food[] retaurantFoods,Customer myCustomer‬‬
‫کالس را با گرفتن لیست غذاهای رستوران و مشتری موردنظرش می سازد‪.‬‬
‫;)(‪public Food[] getMenuFoods‬‬
‫غذاهای موجود در منوی ساخته شده را در یک آرایه برمیگرداند‪.‬‬
‫;)(‪public Customer getMyCustomer‬‬
‫مشتری که صاحب منو است برمیگرداند‪.‬‬
‫;)‪public void setMyCustomer(Customer myCustomer‬‬
‫مشتری صاحب منو را تغییر داده و برابر مشتری ورودی می کند‪.‬‬
‫‪Nationality = ‘c’: china ‘i’: Italian ‘f’: French ‘h’: Indian ‘p’: Iranian ‘e’: English‬‬
‫‪Food type = ‘v’: Vegetarian or ‘n’: non-vegetarian‬‬
‫غذاهای منو مربوط به کدام ملیت می شود = ‪Menu type‬‬
‫افراد می توانند از هر ملیتی باشند‪ ،‬میتوانید هر کاراکتری که خارج از این ها بود ملیت انگلیسی فرض کنید‪.‬‬
‫شرور ها و قهرمان ها‬
‫در دنیایی اف سانه ای ‪ ،‬چندین شهر وجود دارد‪ .‬مردم هر شهر از لحاظ دا شتن نیروی اف سانه ای ‪ ،‬به چند د سته‬
‫تقسیم میشوند‪ :‬ابر قهرمان ها ‪ ،‬شرور ها و مردم معمولی‪ .‬ابر قهرمان ها و شرور ها ‪ ،‬در زمانی که از قدرت هایشان‬
‫استفاده نمیکنند‪ ،‬مانند مردم معمولی زندگی میکنند و کار مشخصی دارند‪ .‬هر شهر میتواند به دالیل مختلف‪ ،‬به‬
‫شهههر دیگری حمله کند در این جنگ‪ ،‬هر شهههر‪ ،‬ابر قهرمان هایش را برای حمله و دفاع میفرسههتد‪ .‬در هر جنگ‬
‫فقط یک شهر پیروز میشود و شهر دیگر از بین میرود ‪ .‬قهرمان های شهر بازنده ‪ ،‬یا میمیرند ‪ ،‬یا به مردم معمولی‬
‫تبدیل می شوند و شرور هایش ‪ ،‬جزو قهرمان های شهر پیروز می شوند ‪ .‬مردم شهر بازنده نیز به مردم شهر اول‬
‫میپیوندند و تمام منابع شهر اول ‪ ،‬مانند ساختمان های شهر اول ‪ ،‬به شهر دوم میرسد‪.‬‬
‫در این دنیا ‪ ،‬گاهی حوادثی طبیعی رخ میدهد که باعث میشههود افراد‪ ،‬یا نیرو های افسههانه ای به دسههت آورند ‪،‬‬
‫نیروهایشان را از دست بدهند ‪ ،‬نیرو هایشان ضعیف یا قوی شود و یا کشته شوند ‪.‬‬
‫در این برنامه شما باید کالس ها و توابع زیر را پیاده سازی کنید‪:‬‬
‫‪public class Town‬‬
‫;) ‪public Town(String name‬‬
‫کالس را با گرفتن نام شهر میسازد‪.‬‬
‫)‪public void addBuilding(Building building‬‬
‫یک ساختمان میگیرد و آن را به ساختمان های شهر اضافه میکند ‪.‬‬
‫;)(‪public String printVillainsNames‬‬
‫نام شرور های شهر را با یک فاصله بر میگرداند‪.‬‬
‫)(‪public void printHeroNames‬‬
‫نام قهرمان های شهر را با یک فاصله چاپ میکند‪.‬‬
‫)‪public Town defend(Town town,Hero hero‬‬
‫با گرفتن شهر حمله کننده ‪ ،‬و قهرمانی که آن شهر برای حمله استفاده کرده است‪ ،‬باید با توجه به نیرویی که‬
‫قهرمان آن شهر دارد‪ ،‬از میان قهرمان های خودش‪ ،‬قهرمانی با آن نیرو را انتخاب کند( نیرویی که اسم یکسان با‬
‫آن نیرو داشته باشد) و به جنگ بفرستد‪ .‬در این جنگ ‪ ،‬قهرمانی پیروز است که قدرت نیرویش بیشتر است ‪ .‬اگر‬
‫شهر دوم ‪ ،‬قهرمانی با آن قدرت خاص را نداشته باشد‪ ،‬باید قهرمانی را به جنگ بفرستد که نیرویی دارد که حاصل‬
‫ضرب قدرت و مرتبه اش ‪ maximum‬باشد‪ .‬در این حالت ‪ ،‬پیروز جنگ ‪ ،‬کسی است که حاصل ضرب قدرت و‬
‫مرتبه ی نیرویش بیشتر باشد‪ .‬بدیهی است که شهر قهرمان پیروز‪ ،‬پیروز میشود و شهر قهرمان دیگر ‪ ،‬باتوجه به‬
‫توضیحات سوال‪ ،‬باید خالی شود‪.‬‬
‫;)‪public void addHero(Hero hero‬‬
‫یک قهرمان را به قهرمان های شهر اضافه میکند ‪.‬‬
‫;)‪public void addVillain(Villain villain‬‬
‫یک شرور میگیرد و به شرور های شهر اضافه میکند ‪.‬‬
‫;‪class People‬‬
‫;) ‪public People(String name , String job , Town town , Building position‬‬
‫این کالس ‪ ،‬مردم شهر را با گرفتن نام ‪ ،‬شغل‪ ،‬شهر آنها و ساختمانی که در آن قرار دارند میسازد‪. .‬‬
‫;)(‪public String getInfo‬‬
‫نام و شغل شخص را با یک فاصله بر میگرداند‪.‬‬
‫;)‪public void changePosition(Building newPosition‬‬
‫یک ساختمان میگیرد و جای فرد را عوض میکند و به آن ساختمان میبرد‪.‬‬
‫‪,‬‬
‫;‪class Hero‬‬
‫‪public Hero(String name , String job , Town town , Building position‬‬
‫;)‪List<Superpower> superpowers‬‬
‫این کالس یک قهرمان را با گرفتن نام ‪ ،‬شغل ‪ ،‬شهر ‪ ،‬محلی که در آن قرار دارد و لیست نیرو های او میسازد‪.‬‬
‫)‪public void addSuperpower(Superpower superpower‬‬
‫یک نیرو میگیرد و آن را به نیرو های قهرمان اضافه میکند ‪.‬‬
‫;)(‪public List getSuperpowers‬‬
‫نیرو های قهرمان را برمیگرداند ‪.‬‬
‫;)(‪public String getInfo‬‬
‫رشته ای شامل نام و شغل و تعداد نیرو ها را با یک فاصله از همدیگر بر میگرداند‪.‬‬
class Villain;
public Villain(String name , String job , Town town , Building position
List<Superpower> superpowers);
,
.‫ محلی که در آن قرار دارد و لیست نیرو های او میسازد‬، ‫ شهر‬، ‫ شغل‬، ‫این کالس یک شرور را با گرفتن نام‬
public void addSuperpower(Superpower superpower)
. ‫یک نیرو میگیرد و آن را به نیرو های شرور اضافه میکند‬
public List getSuperpowers();
. ‫نیرو های شرور را برمیگرداند‬
public String getInfo();
.‫رشته ای شامل نام و شغل را با یک فاصله از همدیگر بر میگرداند‬
class Superpower;
public Superpower(String name , int strength, int level);
‫یک نیرو را با گرفتن نام و امتیاز و مرتبه ی آن میسازد‬
‫;)(‪public String returnName‬‬
‫نام نیرو را باز میگرداند‪.‬‬
‫;)‪setStrength(int newStrength‬‬
‫‪public void‬‬
‫یک عدد جدید میگیرد و به جای قدرت نیرو میگذارد‪.‬‬
‫;)(‪getStrength‬‬
‫‪public int‬‬
‫قدرت نیرو را باز میگرداند‪.‬‬
‫;‪class Building‬‬
‫;)‪public Building(String name , int height , Town town‬‬
‫ساختمان را باگرفتن نام و ارتفاع و شهر آن میسازد‪.‬‬
‫;)(‪public String getPopulation‬‬
‫نام آدم های داخل ساختمان را ‪ ،‬هر کدام را در یک خط ‪ ،‬بر میگرداند‪.‬‬
‫;)(‪public String getInfo‬‬
‫رشته ای شامل نام ساختمان‪ ،‬ارتفاع آن و نام شهر آن که با یک فاصله از هم قرار دارند را برمیگرداند‪.‬‬
‫‪class NaturalDisaster‬‬
‫)‪public NaturalDisaster(Building position, int strength , Superpower superpower‬‬
‫این کالس ‪ ،‬بالیای طبیعی را با گرفتن مکان نزول بال و قدرت آن و ابر قدرتی که میتواند بدهد ‪ ،‬شبیه سازی‬
‫میکند ‪ .‬این ابر قدرت میتواند ‪ null‬باشد‪.‬‬
‫)(‪attack‬‬
‫‪public void‬‬
‫زمانی که این تابع اجرا شود‪ ،‬اگر ‪ superpower‬کالس مربوط به آن‪ null ،‬باشد‪ ،‬تمام مردم عادی کشته‬
‫میشوند ‪ .‬تمام قهرمان ها و یا اشرار داخل ساختمان ‪ ،‬به اندازه ی قدرت بال‪ ،‬از قدرت تمام نیرو هایشان کاسته‬
‫میشود و اگر قدرت نیرو هایشان ‪ ،‬منفی یا صفر شود ‪ ،‬آن نیرو را از دست میدهند‪ .‬اگر یک قهرمان یا شرور ‪،‬‬
‫تمام نیرو هایش را از دست بدهد ‪ ،‬به یک فرد عادی تبدیل میشود ‪.‬‬
‫اگر ‪ superpower‬وجود داشته باشد‪ ،‬آن ‪ superpower‬به تمام افراد اضافه میشود و اگر قهرمان یا شروری ‪،‬‬
‫آن ‪ superpower‬را داشته باشد‪ ،‬به اندازه ی قدرت آن ‪ superpower‬به قدرت ‪ superpower‬خودش اضافه‬
‫میشود ‪ .‬توجه داشته باشید که اگر مردم عادی قدرت بگیرند ‪ ،‬به قهرمان تبدیل میشوند‪.‬‬
‫‪class LightningHit‬‬
‫‪public LightningHit(Building position, int strength , SuperPower superpower , int‬‬
‫;)‪minHeight‬‬
‫این کالس ‪ ،‬نوعی از بالیای طبیعی را شبیه سازی میکند که درآن ‪ ،‬صاعقه به یکی از ساختمان ها برخورد‬
‫میکند و اگر ارتفاع ساختمان مساوی یا بیشتر از مقدار ‪ minHight‬باشد ‪،‬‬
‫)(‪attack‬‬
‫‪public void‬‬
‫زمانی که این تابع اجرا شود‪ ،‬اگر ‪ superpower‬کالس مربوط به آن‪ null ،‬باشد‪ ،‬تمام مردم عادی کشته‬
‫میشوند ‪ .‬تمام قهرمان ها و یا اشرار داخل ساختمان ‪ ،‬به اندازه ی قدرت بال‪ ،‬از قدرت تمام نیرو هایشان کاسته‬
‫میشود و اگر قدرت نیرو هایشان ‪ ،‬منفی یا صفر شود ‪ ،‬آن نیرو را از دست میدهند‪ .‬اگر یک قهرمان یا شرور ‪،‬‬
‫تمام نیرو هایش را از دست بدهد ‪ ،‬به یک فرد عادی تبدیل میشود ‪.‬‬
‫اگر ‪ superpower‬وجود داشته باشد‪ ،‬آن ‪ superpower‬به تمام افراد اضافه میشود و اگر قهرمان یا شروری ‪،‬‬
‫آن ‪ superpower‬را داشته باشد‪ ،‬به اندازه ی قدرت آن ‪ superpower‬به قدرت ‪ superpower‬خودش اضافه‬
‫میشود ‪ .‬توجه داشته باشید که اگر مردم عادی قدرت بگیرند ‪ ،‬به قهرمان تبدیل میشوند‪.‬‬
‫‪ ‬در این تمرین باید تا حد امکان‪ ،‬از مفاهیم وراثت استفاده کنید‪.‬‬
‫موفق باشید‬