Professional Documents
Culture Documents
Advanced Programming Modeling HW2
Advanced Programming Modeling HW2
Candy Crush
وانیلوپه میخواهد در مسابقات نوروزی Sugar Rushشرکت کند .ولی در تمرین دچار حادثه میشود و
ماشینش را برای مسابقه از دست میدهد .برای اینکه بتواند در مسابقه شرکت کند به کینگ کندی مراجعه
میکند و درخواست یک ماشین جدید میدهد .کینگ کندی به او میگوید یک سری مشکل در بازی پیش
آمده و اگر وانیلوپه در حل مشکالت کمک کند به او اجازه میدهد تا ماشین جدیدش را بسازد .برای حل
مشکل نیاز است تا وانیلوپه یک سری جدول را حل کند ولی رالف جدول های او را خراب میکند .برای همین
به سراغ شما آمده تا در حالی که او رالف را سرگرم میکند در حل جدول ها به او کمک کنید تا بتواند در
در این تمرین ،قصد داریم تا بازی لهکردن آبنباتها ( )Candy Crushرا پیادهسازی کنیم .همچنین برای این
بازی میخواهیم مکانیسم حساب کاربری ،ثبتنام ،الگین و … را مطابق مواردی که در ادامه برای شما گفته
در این برنامه ،در اصل پنج منو ( )Menuداریم :منوی ثبت نام ،منوی اصلی ،منوی بازی ،منوی رخنما ()Profile
و منوی فروشگاه .در ادامه به توضیح دستوراتی که در هر کدام از این منوها وارد میشود میپردازیم .توجه
https://quera.org/course/assignments/40250/print 15/59
4/11/23, 11:14 AM تمرین ۲
کنید که در هنگام شروع برنامه ،به طور پیشفرض ،کاربر در منوی ثبتنام قرار دارد .ضمنا ،توجه کنید که
تمامی پیغامهای انجام موفقیتآمیز دستورات و یا خطاها ،در یک خط مجزا چاپ میشوند و سپس برنامه
بازی Candy Crush Sagaیا لهکردن آبنباتها یک بازی تطابق سهتایی است که در آن با جابهجا کردن دو
شکالت همسایه در یک جدول پر از شکالت ،سعی میکنیم که یک تطابق حداقل -۳تایی از خانههای متوالی
افقی یا عمودی با شکالتهای همرنگ بسازیم .بعد از آن ،شکالتهایی که در یک تطابق باشند ،له و از
جدول حذف میشوند ،و شکالتهای روی آن ،فضای خالی را پر میکنند ،و در باالی جدول تعدادی شکالت
جدید پدیدار میشود .ممکن است که بعد از این تغییر جایگاه بعضی شکالتها ،تطابقی جدید پیدا شود که
آنها نیز به طور مشابه از جدول حذف میشوند .امتیاز بازیکن بر اساس شکالتهای حذف شده بدست
میآید و اگر زنجیرهوار تطابقهای جدید ساخته شوند ،امتیاز بدست آمده بیشتر میشود .بازیکن باید با
بعضی از این شکالتها کمی خاص هستند و در صورتی که در تطابق باشند ،چند شکالت دیگر را نیز له
میکنند که در ادامه با آنها آشنا میشویم .کاربر میتواند از فروشگاه ،تعدادی boosterیا تقویتکننده
بخرد و در بازی استفاده کند .در ادامه با این تقویتکنندهها نیز آشنا میشوید.
شکالتهای عادی
اکثر شکالتهای بازی ،عادی هستند .با یک جابهجایی حداقل ۳شکالت پشتسرهم همرنگ در یک خط
در بازی شکالتها ۶رنگ متفاوت دارند که آنها را با ' 'R', 'O', 'Y', 'G', 'B', 'Pنشان میدهیم.
شکالتهای خاص
https://quera.org/course/assignments/40250/print 16/59
4/11/23, 11:14 AM تمرین ۲
ظاهر :به صورت خطوط راهراه عمودی یا افقی روی یک شکالت عادی میآید و با توجه به افقی یا
عمودی بودن ،به رنگ آن پسوند ' 'Hیا ' 'Vاضافه میشود .به طور مثال یک شکالت قرمز راهراه عمودی
تاثیر :در صورت له شدن این شکالت ،مرتبط با جهت این شکالت خاص ،تمامی شکالتهای همردیف
یا همستون آن نیز له میشوند .یعنی اگر این شکالت راهراه افقی باشد ،تمام شکالتهای همردیف با
ظاهر :یک شکالت عادی را بسته بندی میکند .این شکالت نیز همانند شکالتهای عادی و راهراه رنگ
دارد .ما در جدول آن را با پسوند ' 'Wنشان میدهیم .به طور مثال یک شکالت زرد پیچیده را با ''YW
نشان میدهیم.
تاثیر :در صورت له شدن این شکالت ،تمامی ۸شکالت همسایه با آن نیز له میشوند.
ظاهر :این شکالت برخالف تمامی شکالتهای قبلی هیچ رنگی ندارد .در جدول آن را با ' 'CBنشان
میدهیم.
تاثیر:
جابهجا شود ،خودش و تمامی شکالتهای همرنگ با در صورتی که با یک شکالت عادی دیگر c
را له میکند. شکالت c
در صورتی که به هر نحوی بهجز جابهجایی له شود ،فقط خودش له میشود و عملیاتی انجام
نمیدهد.
ترکیبها
در صورتی که هر دو شکالتی که با یکدیگر جابهجا میکنیم خاص باشند ،ترکیبی جدید ساخته میشود که
کارایی قویتری دارد .در تمامی ترکیبها ،رنگ دو ترکیب اهمیتی ندارد و در هر صورت ترکیب اجرا میشود.
راهراه -راهراه
https://quera.org/course/assignments/40250/print 17/59
4/11/23, 11:14 AM تمرین ۲
در صورتی که دو شکالت راهراه را با یکدیگر جابهجا کنیم ،،هر دو له میشوند و تمام شکالتهایی که با
حداقل یکی از این دو همسطر یا همستون باشند نیز له میشوند .در این ترکیب جهت دو شکالت راهراه
اهمیتی ندارد.
راهراه -پیچیده
در این صورت یک شکالت پیچیده در خانه مبدا جابهجایی ساخته میشود .سپس تمامی شکالتهای ۳
در این صورت ابتدا تمام شکالتهای همرنگ (حتی شکالتهای راهراه یا پیچیده) با شکالت راهراه تبدیل به
یک شکالت راهراه میشوند و جهت تمامی آنها مطابق با شکالت راهراه اولیه است .سپس تمامی آنها له
میشوند.
پیچیده -پیچیده
تمامی شکالتهایی که در زیرجدول 5در 6ای که وسط زیرجدول ،این دو شکالت هستند له میشوند.
مشابه ترکیب راهراه-بمبرنگی ،ابتدا تمامی شکالتهای همرنگ (حتی راهراه و پیچیده) با شکالت پیچیده
تقویتکنندهها
https://quera.org/course/assignments/40250/print 18/59
4/11/23, 11:14 AM تمرین ۲
در بازی ،یک شکالت دلخواه انتخاب میکنید ،با این چکش آن شکالت له میشود .هزینه آن در فروشگاه ۶
سکه است.
یک شکالت انتخاب میکنید ،تبدیل به یک شکالت راهراه میشود .هزینه این تقویتکننده ۱۵سکه است.
یک شکالت انتخاب میکنید ،تبدیل به یک شکالت پیچیده میشود .هزینه این تقویتکننده ۱۵سکه است.
یک شکالت انتخاب میکنید ،تبدیل به یک شکالت راهراه میشود .هزینه این تقویتکننده ۲۰سکه است.
جابهجایی آزاد
دو خانه مجاور انتخاب میکنید و جای آنها بدون توجه به رنگشان عوض میشود ،هزینه این تقویتکننده
حرکت اضافه
با استفاده از این تقویتکننده ۵ ،مرحله بیشتر بازی میکنید .هزینه این تقویتکننده ۱۰سکه است.
نحوه بازی
بازی در یک جدول ۱۱در ۱۱انجام میشود .خانههای جدول به صورت شکل زیر شمارهگذاری میشوند .به این
https://quera.org/course/assignments/40250/print 19/59
4/11/23, 11:14 AM تمرین ۲
در هر جای بازی که در تعدادی از خانهها شکالت وجود نداشت ،بهترتیب شمارههای عکس باال با تابع
تصادفی که در ادامه گفته میشود ،خانهها را پر میکنیم .این تابع بهگونهای تعریف شده که در موقع
شروع بازی ،هیچ ۳خانه متوالی با شکالتهای همرنگ وجود نداشته باشد .در جریان بازی ،بعد از جابهجا
کردن دو خانه یا استفاده از تقویتکننده چکش آبنبات چوبی ،تعداد شکالت له میشوند ،هر شکالتی که
در مرحله اول له میشود ۶۰امتیاز به امتیازمان اضافه میکند .سپس شکالتهای خالی توسط شکالتهای
باالتر پر میشوند .مجددا به ترتیب شمارهگذاری خانهها ،با تابع تصادفی شکالت گذاشته میشود .این بار
اگر مجددا شکالتهایی له شوند ۱۲۰ ،امتیاز به امتیازمان اضافه میشود .هر بار همهی خانههای ممکن له
میشوند ،سپس شکالتها به سمت پایین کشیده میشوند و در نهایت خانههای خالی بهترتیب
امتیاز میدهند .بعد از شمارهگذاریشده پر میشوند .شکالتهایی که در مرحله iام له میشوند60 × i ،
اینکه بازی تمام شود ،به اندازه امتیاز تقسیم بر ۱۰سکه به بازیکن داده میشود.
تابع تصادفی
;import java.util.Random
{ public class Function
;private final Random randomobj
https://quera.org/course/assignments/40250/print 20/59
4/11/23, 11:14 AM تمرین ۲
در ابتدای شروع هر بازی ،مقدار seedنیز به شما داده میشود که مربوط به تابع تصادفی باال است .در هر
جا طبق ترتیبی که گفته شده ،رنگ شکالتها را با استفاده از تابع nextIntتعیین میکنیم .اعداد ،۱ ،۰
۴ ،۳ ،۲و ۵بهترتیب مربوط به رنگهای قرمز ،نارنجی ،زرد ،سبز ،آبی و بنفش هستند.
در تمامی قسمتها خطاهای دستورات به ترتیب داده شده بررسی میشوند و اگر خطایی رخ دهد ،پیغام آن
invalid command
ثبت نام
https://quera.org/course/assignments/40250/print 21/59
4/11/23, 11:14 AM تمرین ۲
این دستور برای ایجاد یک کاربر جدید استفاده میشود.نام کاربری باید فقط شامل حروف انگلیسی کوچک و
بزرگ و ارقام 0تا 9و آندرالین باشد .اسم کاربر باید فقط شامل حروف انگلیسی کوچک و بزرگ و کارکتر
اگر خطایی وجود نداشت و ثبت نام موفقیت آمیز بود ،پیغام :
خطاها
اگر نام کاربری شرایط گفته شده را نداشت و کاراکتری غیر از کاراکتر های مطلوب در آن وجود داشت ،
پیغام:
اگر اسم کاربر شرایط گفته شده را نداشت و کاراکتری غیر از کاراکتر های مطلوب در آن وجود داشت ،
پیغام:
https://quera.org/course/assignments/40250/print 22/59
4/11/23, 11:14 AM تمرین ۲
!password is weak
اگر نام کاربری وارد شده ،از قبل وجود داشت ،پیغام:
دقت کنید اگر در usernameو passwordفاصله وجود داشته باشد ،باید invalid commandچاپ شود.
الگین
این دستور برای الگین کردن به حساب کاربری میباشد .نام کاربری باید فقط شامل حروف انگلیسی کوچک و
اگر خطایی وجود نداشت و ورود موفقیت آمیز بود ،پیغام :
خطاها
اگر نام کاربری شرایط گفته شده را نداشت و کاراکتری غیر از کاراکتر های مطلوب در آن وجود داشت ،
پیغام:
https://quera.org/course/assignments/40250/print 23/59
4/11/23, 11:14 AM تمرین ۲
!incorrect password
لیست کاربران
list of users
پس از اجرای این دستور نام تمامی اعضایی که ثبت نام شده اند به ترتیب زمان ثبت نام (قدیم به جدید)
به صورت:
پایان بازی
https://quera.org/course/assignments/40250/print 24/59
4/11/23, 11:14 AM تمرین ۲
exit
این دستور بیانگر پایان اجرای برنامه است و پس از آن اجرای برنامه به پایان میرسد.
منوی اصلی
شروع بازی
با این دستور یک بازی جدید ساخته میشود seed .یک عدد است که در تابع تصادفی به آن نیاز است و
درواقع seedتابع تصادفی است moves .هم تعداد حرکات بازی میباشد.
ورود به منو
این دستور برای ورود به منوهای شاپ و پروفایل و اسکوربورد است که < >menu_nameفقط میتواند معادل
خطاها
چاپ خواهد شد و اگر معتبر نبود دستور معتبر نیست و پیغام مربوط با دستور نامعتبر چاپ میشود.
https://quera.org/course/assignments/40250/print 25/59
4/11/23, 11:14 AM تمرین ۲
خروج از حساب
logout
این دستور برای خارج شدن از اکانت یوزری است که الگین کرده است.درصورت خارج شدن از اکانت پیغام :
اسکوربورد
show scoreboard
برای نمایش اسکوربورد باید برای هر کاربر متنی به صورت زیر چاپ شود.
مثال :یک کاربر با نام کاربری " "erfanدارای ۱۲امتیاز است و یک کاربر با نام کاربری " "abolfazlدارای ۱۵
میشود.
https://quera.org/course/assignments/40250/print 26/59
4/11/23, 11:14 AM تمرین ۲
درصورت برابر بودن امتیاز ،بر اساس حروف الفبا به صورت صعودی مرتب میشوند(.اولویت ترتیب بر اساس
منوی بازی
جابجایی شکالتها
در تمام دستورات مشخصات خانههای درست به صورت ) (x, yداده میشوند که 0 ≤ x, y ≤ 10و x
شماره ستون از سمت چپ است .مثال خانه شماره شماره سطر از باال و y
را به سمت directionکه یکی از حروف (' )'R', 'L', 'U', 'Dاست حرکت میدهیم. با این دستور خانهی )(x, y
اگر هیچ خطایی رخ ندهد و با موفقیت جابهجا شوند ،پیغام زیر چاپ شود.
خطاها
در جدول وجود نداشته باشد (یا اعداد منفی باشند) ،باید این خطا را چاپ کنید در صورتی که خانهی )(x, y
و کاری انجام ندهید.
invalid cell
اگر نتوانیم خانه مربوطه را در جهت گفته شده حرکت بدهیم باید خطای زیر را چاپ کنید .به طور مثال اگر
خانه در باالترین ردیف قرار داشته باشد و بخواهیم آن را در جهت باال ( )Uانتقال دهیم ،با این خطا مواجه
میشویم.
https://quera.org/course/assignments/40250/print 27/59
4/11/23, 11:14 AM تمرین ۲
invalid destination
اگر با جابهجا کردن دو خانه هیچ اتفاقی نیفتد ،نباید جابهجا شوند و باید این خطا چاپ شود.
invalid move
نکته:
چاپ شود.
با این دستور ،یک خانه انتخاب شده را با استفاده از تقویتکننده چکش آبنبات چوبی له میشود .در
خطاها
invalid cell
https://quera.org/course/assignments/40250/print 28/59
4/11/23, 11:14 AM تمرین ۲
با این دستور ،یک خانه انتخاب شده را با استفاده از تقویتکننده قلممو بمب رنگی تبدیل به یک شکالت
خطاها
invalid cell
و اگر شکالت موجود در خانه انتخاب شده بمب رنگی باشد ،،پیغام:
https://quera.org/course/assignments/40250/print 29/59
4/11/23, 11:14 AM تمرین ۲
با این دستور ،یک خانه انتخاب شده را با استفاده از تقویتکننده قلممو شکالت پیچیده تبدیل به یک
شکالت شکالت پیچیده میشود .در صورتی که با خطایی مواجه نشود ،پیغام:
خطاها
invalid cell
،اگر شکالت موجود در خانه انتخاب شده بمب رنگی باشد ،،پیغام:
و اگر شکالت موجود در خانه انتخاب شده شکالت پیچیده باشد ،پیغام:
https://quera.org/course/assignments/40250/print 30/59
4/11/23, 11:14 AM تمرین ۲
با این دستور ،یک خانه انتخاب شده را با استفاده از تقویتکننده قلممو بمب راهراه تبدیل به یک شکالت
بمب راهراه میشود .اگر directionبرابر vباشد افقی و در اگر hباشد عمودی است .در صورتی که با
خطاها
invalid cell
،اگر شکالت موجود در خانه انتخاب شده بمب رنگی باشد ،،پیغام:
https://quera.org/course/assignments/40250/print 31/59
4/11/23, 11:14 AM تمرین ۲
و اگر شکالت موجود در خانه انتخاب شده شکالت راهراه باشد ،پیغام:
با این دستور ،مشابه دستور swipeشکالت در جهت گفته شده جابهجا میشود .در صورتی که با خطایی
خطاها
invalid cell
invalid destination
https://quera.org/course/assignments/40250/print 32/59
4/11/23, 11:14 AM تمرین ۲
با این دستور ۵ ،تا به تعداد حرکتها اضافه میشود .در صورتی که با خطایی مواجه نشود ،پیغام:
خطاها
show board
با این دستور ،در خط اول تعداد حرکات باقیمانده و امتیاز فرد چاپ میشود .سپس در ۱۱خط بعدی ،هر
شکالت را چاپ میکنید و سپس یک تب میزنیم .رشته مربوط به هر شکالت در بخش شکالت توضیح داده
Moves: 1
Score: 180
P Y B O G O G R G O O
https://quera.org/course/assignments/40250/print 33/59
4/11/23, 11:14 AM ۲ تمرین
Y P R P Y P Y B Y G G
P O CB R G O G Y B R R
R G R PW Y GW Y P O B P
B R P Y G O B Y P G O
Y P O G Y B R B R P P
P O P O P R G Y B R P
Y G R G R B R P O G O
B O B R G R P Y B Y G
R G R B Y B R P R G O
P Y B O B O P O G O B
show boosters
. تعداد تقویتکنندههای فرد را باید به فرمت زیر چاپ کنید،با این دستور
منوی خرید
:دستورات
اعتبار حساب
show money
https://quera.org/course/assignments/40250/print 34/59
4/11/23, 11:14 AM تمرین ۲
با اجرای این دستور مقدار موجودی کاربر به صورت زیر چاپ میشود:
>wallet : <wallet
show inventory
این دستور ،موجودی بوستر های کاربر را به صورت زیر نشان میدهد:
با اجرای این دستور < >countعدد boosterبرای کاربر خریده میشود >booster< .فقط میتواند موارد های
زیر باشد:
""free_switch
""colour_bomb_brush
""striped_brush
https://quera.org/course/assignments/40250/print 35/59
4/11/23, 11:14 AM ۲ تمرین
"lollipop_hammer"
"wrapped_brush"
"extra_moves"
:خطاها
invalid number
back
https://quera.org/course/assignments/40250/print 36/59
4/11/23, 11:14 AM تمرین ۲
پروفایل
تغییر رمز
این دستور برای تغییر رمز عبور است .پسورد جدید باید همان شرایط که پسورد اولیه دارد و در دستور
رجیستر گفته شد را داشته باشد .اگر تغییر رمز موفقیت آمیز بود ،پیغام:
!password changed
خطاها:
!password is incorrect
!password is weak
back
اطالعات کاربری
https://quera.org/course/assignments/40250/print 37/59
4/11/23, 11:14 AM تمرین ۲
show information
>username : <username
>nickname : <nickname
>money : <money
>highscore : <highscore
چاپ میکند.
حذف اکانت
پس از اجرای این دستور در صورت وجود نداشتن خطا ،اکانت کاربر حذف میشود و پیغام :
!account deleted
خطاها
!password is incorrect
https://quera.org/course/assignments/40250/print 38/59
4/11/23, 11:14 AM ۲ تمرین
Register Menu
Main Menu
Game Menu
Profile Menu
Shop Menu
.چاپ میشود
ورودی
1 ورودی نمونه
https://quera.org/course/assignments/40250/print 39/59
4/11/23, 11:14 AM ۲ تمرین
1 خروجی نمونه
password is weak!
user successfully created!
user successfully logged in!
Main Menu
1- user1: 0
entered Shop menu!
there is no product with this name
wallet : 100
Lollipop Hammer : 0
Colour Bomb : 0
Extra Moves : 0
Free Switch : 0
Striped Brush : 0
Wrapped Brush : 0
user logged out!
2 ورودی نمونه
https://quera.org/course/assignments/40250/print 40/59
4/11/23, 11:14 AM ۲ تمرین
swipe 9 9 R
swipe 2 6 D
logout
list of users
show current menu
login u user2 p Password2@
enter Profile menu
remove account Password2@
list of users
exit
2 خروجی نمونه
https://quera.org/course/assignments/40250/print 41/59
4/11/23, 11:14 AM ۲ تمرین
https://quera.org/course/assignments/40250/print 42/59