A3.pdf

‫برنامهسازی پیشرفته (جاوا)‬
‫نیمسال ‪49-49‬‬
‫دانشکده مهندسی کامپیوتر‬
‫مدرس‪ :‬سلمان مروستی‬
‫تمرین سوم‬
‫مهلت ارسال‪ 11 :‬خرداد ماه ‪1334‬‬
‫‪ -1‬مهلت ارسال تمرین تا ساعت ‪ 95:32‬روز جمعه ‪ 53‬خرداد ماه میباشد‪.‬‬
‫‪-2‬‬
‫کالسها و توابع آمده در فایل ضمیمه شده باید دقیقا به همان نام باشند و شما تنها باید بدنهي آنها را با توجه به عملکرد‬
‫خواسته شده بنویسید البته نوشتن توابع اضافی و تعریف متغیرهاي مورد نیاز در کالسها مجاز خواهد بود‪.‬‬
‫‪ -3‬تمرین باید به صورت حضوري تحویل داده شود و استفاده از کامنت‪ ،‬و ساختار مناسب کد نمره خواهد داشت‪ .‬بنابراین نمره‬
‫کامل از سیستم داوري به معناي نمره کامل نبوده و این نمره تنها بخشی از نمرهي شما خواهد بود‪.‬‬
‫‪ -4‬در صورت داشتن هرگونه مشکل‪ ،‬سوال خود را با تگ مناسب در‬
‫مطرح کنید‪.‬‬
‫سوال‪ -1‬باغ وحش‬
‫در انتخابات انجمن حیوانی باغ وحش ادیسون شمال‪ ،‬فقط یک کاندیدا‪ ،‬نامزد انتخابات شده بود‪ .‬اما از آنجایی که هر‬
‫نامزد باید حداقل یک سامانه جدید برای خدمت رسانی به هم باغ وحشی ها معرفی کند‪ ،‬جناب نامزد‪ ،‬که االغی‬
‫مهربان بود‪ ،‬به فکر فرو رفت و پس از غور کردن در بحر اندیشه‪ ،‬به سامانه ای سودمند برای مدیریت باغ وحش رسید‬
‫تا بدین وسیله هم دل مدیران باغ وحش و هم دل حیوانات عزیز را به دست آورده باشد‪ .‬این شد که سامانه ی مطرح‬
‫در این سوال ابداع گردید‪ .‬سعی کنید با پیاده سازی درست این سامانه‪ ،‬به االغ عزیز کمک کنید تا مسئولیت انجمن‬
‫حیوانی را به دست بگیرد‪ .‬برای این کار‪ ،‬همانند تمرین قبل‪ ،‬کالسها و متدهای ضمیمه در فایل ‪ Zoo.java‬را‬
‫کامل نمایید‪.‬‬
‫قواعد معنایی محیط‬
‫هر حیوان یک نام مشخص دارد‪ .‬همچنین یک سطح انرژي مشخص دارد که با حرکت کردن و نیز تولید مثل‪ ،‬کاهش‬
‫یافته و با تغذیه زیاد می شود‪ .‬میزان کاهش‪ ،‬بستگی به حیوان و میزان افزایش بستگی به غذا دارد‪ .‬هر غذا مقدار‬
‫مشخصی انرژي دارد که در اثر تناول آن‪ ،‬به همان میزان به سطح انرژي تناولگر (‪ )‬افزوده میشود‪ .‬براي هر‬
‫حیوان‪ ،‬میزان کاهش انرژي در اثر حرکت و تولید مثل‪ ،‬به عنوان ورودي هنگام ساخت آن حیوان داده میشود‪.‬‬
‫هر حیوان سقف عمري دارد که با رسیدن به آن‪ ،‬دار فانی را وداع خواهد گفت! البته به دالیلی که ذکر خواهد گشت‪،‬‬
‫ممکن است قبل از رسیدن به آن سن‪ ،‬اقدام به ترک دنیا کند‪.‬‬
‫گذر زمان را متد ‪ nextRound‬برعهده دارد‪ .‬هر بار که این متد صدا زده میشود‪ ،‬یک واحد زمان به جلو میرود‪.‬‬
‫نیاز به نگهداری زمان سپری شده نیست‪ ،‬لکن تاثیر زمان باید رعایت شود‪ .‬یعنی با هر بار صدازدن این متد‪ ،‬سن هر‬
‫حیوان یک واحد زیاد میشود‪ .‬خروجی این متد‪ ،‬در هر بار صدا کردن آن‪ ،‬لیستی از حیوانات متوفی در پایان آن‬
‫مرحله است‪ .‬حیواناتی که به عنوان متوفی بازگردانده میشوند‪ ،‬به یکی از سه دلیل زیر مرده اند‪:‬‬
‫‪ .1‬خوراک ناکافی (یعنی اگر سطح انرژي آنها در هنگام صدازدن متد‪ ،‬مثبت نباشد)‬
‫‪ .2‬مسکن ناکافی! (در واقع یعنی مسکن نداشته باشند‪ ،‬در این باره بیشتر توضیح داده خواهد شد)‬
‫‪ .9‬رسیدن به سن غیرقانونی (یعنی سقف عمر)‬
‫هر حیوان مسکن مشخصی دارد‪ .‬حیواناتی که پرواز میکنند‪ ،‬روي درخت و حیواناتی که پرواز نمیکنند‪ ،‬در قفس‬
‫زندگی میکنند (از آنجا که آبزیان و آنهایی که زیاد زیرآبی میروند‪ ،‬نباید حق راي داشته باشند‪ ،‬االغ عزیز آنها را‬
‫در سامانه خود حساب نکرده است) توجه داشته باشید که هر نوع حیوانی‪ ،‬در مسکن همان نوع زندگی میکند‪ .‬بنابراین‬
‫در قفس فیل‪ ،‬فقط فیل میتواند زندگی کند‪.‬‬
‫هر غذا‪ ،‬مدتزمان مصرف مشخصی دارد که اگر از آن زمان بگذرد‪ ،‬اثر عکس خواهد داشت‪ .‬یعنی به همان میزان‬
‫انرژي آن‪ ،‬از انرژي تناول کننده آن خواهد کاست!‬
‫قرار بود هر مسکن (چه قفس چه درخت) ظرفیت مشخصی داشته باشند‪ ،‬و براي کنترل ظرفیت آن و جلوگیري از‬
‫پرشدن‪ ،‬چند قاعده معنایی دیگر‪ ،‬به این قواعد اضافه شود‪ .‬از آنجا که االغ مهربان رقیب خاصی ندارد که براي رقابت‬
‫با او‪ ،‬سطح کیفی محصولش را باال ببرد‪ ،‬و نیز براي رفاه حال پیادهسازان سامانه که ممکن است دلمشغولیهاي‬
‫فراوان دیگري داشته باشند‪ ،‬از این مورد صرف نظر کرد ‪‬‬
‫هر حیوان‪ ،‬جنسیت مشخص دارد‪ .‬برای تولید مثل‪ ،‬باید به این امر توجه شود که جنسیت دو حیوان متفاوت بوده و نیز‪،‬‬
‫دو حیوان از یک نوع باشند (حاالت استثنا مثل اسب و خر و اینها که محصول بازارمشترک تولید میکنند را نادیده‬
‫بگیرید) همچنین هر نوع حیوان‪ ،‬دوره بارداری مشخصی دارد‪ .‬پس از طی شدن آن دوره (که با متد ‪nextRound‬‬
‫طی میشود) بچههای آن تولید شده و به همان قفس یا درخت اضافه میشوند‪ .‬تعداد بچههای متولد شده در هر‬
‫بارداری‪ ،‬عددی است که برای هر نوع حیوان فرق میکند‪ .‬این عدد‪ ،‬برای ماکیان‪ ،‬شش‪ ،‬برای کانگرو‪ ،‬سه و برای‬
‫خفاش‪ ،‬دو میباشد‪ .‬حیوان مادهای که در دوران بارداری خود است‪ ،‬نمیتواند در عمل تولید مثل دیگری شرکت‬
‫کند‪ .‬نام فرزندان‪ ،‬به صورت ترکیب نام پدر (برای فرزندان فرد) یا نام مادر (برای فرزندان زوج) با شماره (ترتیب)‬
‫تولدشان است‪ .‬در اینصورت نام فرزند اول ‪ Jack‬و ‪ Jane‬همانا ‪ ، Jack1‬نام فرزند دومشان ‪ ، Jane2‬سومی‬
‫‪ Jack3‬و ‪ ...‬خواند بود‪.‬‬
‫توجه داشته باشید که انرژی کاهش یافته در تولید مثل‪ ،‬در همان مرحله (یعنی هنگام صدازدن متد ‪ )breed‬کاهش‬
‫مییابد و نه در مرحله به دنیا آمدن فرزند(ان)‪.‬‬
‫کانگروها‪ ،‬قابلیتی اضافی دارند‪ .‬آنها میپرند! وقتی کانگرویی میپرد‪ ،‬از انرژي هر کسی در قفس نباشد‪ ،‬به اضافه همهي‬
‫کانگروهاي هم قفسی اش‪ ،‬به علت لذت و هیجان باال چهار واحد کم میشود! توجه کنید که هر حیوان در بدو تولد‬
‫سطح انرژي اولیهاي برابر با ‪ 92‬دارد‪.‬‬
‫هر حیوان صدای مشخصی دارد که با صدا زدن متد مربوط به آن‪ ،‬آن صدا در قالب رشتهای برگردانده میشود! این‬
‫صدا برای نوع حیوان‪ ،‬در حالت کلی‪ ،‬رشتهی ”‪ ،“aaaarrr aaaarrr‬برای پستانداران نیز همان‪ ،‬برای‬
‫مرغ‪ “ghodghodghodaaaaa”،‬و برای خروس‪ “ghoughoulighoughou” ،‬میباشد‪.‬‬
‫هر قفس‪ ،‬شمارهي یکتایی دارد که از ‪ 5‬شروع میشود و یکی یکی زیاد میشود‪ .‬همچنین است هر درخت!‬
‫براي موارد مورد نیاز‪ ،‬باید استثناهایی پرتاب شوند‪ .‬بدین منظور‪ ،‬استثناهاي زیر در نظر گرفته شدهاند‪:‬‬
‫‪ :TypeMismatchException‬اگر در تولید مثل‪ ،‬دو حیوان از دو نوع مختلف باشند‪ .‬فرمت این استثنا‬
‫باید به صورت مقابل باشد‪ ‘T1’ && ‘T2’ :‬که ‪ T1‬و ‪ T2‬نوع حیوانات است!‬
‫‪ :GenderMatchException‬اگر در تولید مثل‪ ،‬جنیست دو حیوان یکی باشد‪ .‬فرمت این استثنا باید‬
‫اینگونه باشد‪ ‘G’ :‬که ‪ G‬جنسیت آنهاست‪.‬‬
‫‪ :PregnantException‬اگر حیوان باردار‪ ،‬برای تولید مثل‪ ،‬فراخوانی شود‪ .‬فرمت این استثنا باید اینگونه‬
‫باشد‪ ‘#’, ‘*’ :‬که ‪ #‬نام حیوان باردار و * زمان گذشته از دوران بارداریش است‪.‬‬
‫‪ :HouseMismatchException‬اگر در مسکن دادن به یک حیوان‪ ،‬نوع مسکن و نوع حیوان یکسان‬
‫نباشد‪.‬‬
‫استثنای نوع چهارم‪ ،‬باید کنترل شود و در صورت رخ دادن آن‪ ،‬عملی انجام نشود! سه استثنای دیگر‪ ،‬نباید کنترل‬
‫شوند‪.‬‬
‫سوال‪ -2‬مار‬
‫عمین! که پس از سالها بازی با گربهها‪ ،‬به تازگی عالقهی خاصی به خزندگان و به خصوص مارها پیدا کرده است‪،‬‬
‫در تالش است حضور مارها را در زندگیاش پررنگتر کند‪ .‬برای همین تصمیم گرفت در تمام لحظات فراغتش به‬
‫بازی مار یا همان ‪ snake‬مشغول شود و این موجود دوستداشتنی را هر چه بیشتر در لحظات خود حس کند‪ .‬به‬
‫همین جهت برای کمک به علی در راه رسیدن به این هدف شما میبایست این بازی را برای او پیادهسازی کند‪.‬‬
‫در این سوال شما باید بازی ‪ snake‬که احتماال خاطرات زیادی را با آن دارید‪ ،‬پیادهسازی کنید‪.‬‬
‫در صورتی که حافظهی تان یاری یادآوری بازی را نمیکند میتوانید از این لینک بازی را مشاهده کنید‪:‬‬
‫‪http://patorjk.com/games/snake‬‬
‫برای ابتدای بازی ‪ ،‬نام کاربر را از آن دریافت کرده تا در تمامی صفحات بازی ‪ ،‬آن را نمایش دهید‪.‬‬
‫بعد از وارد کردن نام‪ ،‬به کاربر صفحهی خوش آمد گویی را نشان میدهید‪ .‬کاربر با فشردن یکی از دکمههای جهت‬
‫(باال‪ ،‬پایین‪ ،‬چپ و راست) بازی را شروع میکند و مار در جهت کلید فشرده شده حرکت خود را شروع میکند‪ .‬مار‬
‫همواره در حال حرکت است و شما باید بازی را به گونه ای طراحی کنید که مار بوسیله کلیدهای جهت روی صفحه‬
‫کلید‪ ،‬کنترل شود‪ .‬نکته قابل ذکر این است که مار با کنترل در جهت عکس حرکت فعلی حرکت نمی کند و تنها در‬
‫صورتی که کلید تغییر جهت تغییر ‪ 09‬درجه را نشان دهد جهتش عوض میشود‪.‬‬
‫طول مار در ابتدای بازی ‪ 2‬است‪ .‬غذاهایی به صورت رندوم در هر مرحله درون صفحه قرار میگیرد و در صورتی که‬
‫مار هر کدام از این غذاها را بخورد دو واحد به طولش زیاد میشود و ‪ 1‬امتیاز به امتیازهای کاربر اضافه میشود‪.‬‬
‫امتیازات کاربر باید در صفحه بازی نمایش داده شود‪ .‬به ازای هر ‪ 4‬غذای خورده شده یک واحد رژیم غذایی باید در‬
‫صفحه برای ‪ 19‬ثانیه ظاهر شود که در صورتی که مار این رژیم غذایی را بخورد ‪ 3‬واحد از طولش کم میشود‪.‬‬
‫در صورتی که مار به یکی از خطوط صفحه بازی برخورد کند و یا به خودش برخورد کند بازی خاتمه مییابد‪.‬‬
‫بخش امتیازی‪:‬‬
‫‪ -1‬بیشترین امتیاز کسب شده در این بازی را به همراه اسم فرد نگه دارید تا در انتهای بازی به کاربر بیشترین امتیازهای‬
‫کسب شده را به همراه اسم کسب کنندهی آن نمایش دهید‪ 5( .‬امتیاز اضافه برای انجام این بخش)‬
‫‪ -2‬اگر مار به یکی از خطوط صفحه برخورد کرد از خط مقابل این خط در همان جهت ادامه میدهد‪ 19( .‬امتیاز‬
‫برای انجام این بخش)‬
‫‪ -3‬تعدادی دیوار دلخواه در صفحه وجود داشته باشد که پس از خوردن هر غذا جای دیوارها عوض شود و در‬
‫صورتی که مار به این دیوارها برخورد کند بازی خاتمه یابد (‪ 19‬امتیاز)‬