بازی StickMan:Legacy
یک بازی استراتژیک است که در آن هر کس ارتش خودش را تجهیز میکند و به جنگ دشمنان میرود. از شما میخواهیم برنامهای بنویسید که درخواستهای بازیکن را مدیریت کند.
شما برای ملحق کردن افراد به ارتش باید به آنها سکه بدهید. همچنین نمیتواند بیش از ۵۰ واحد نیرو زنده در ارتش خود داشتهباشید. در ابتدای بازی ۵۰۰ سکه دارید و هیچ کسی در ارتش شما نیست. دولت از لحظهی ابتدایی بازی، هر ۲۰ ثانیه یکبار ۱۸۰ سکه به ارتش شما میدهد. (بهجز لحظهی شروع)
در این ارتش ۶ سِمَت مختلف «معدنکار»، «شمشیرزن»، «تیرانداز»، «سپردار»، «جادوگر» و «غول» برای افراد وجود دارد. هر کدام از این سِمَتها ویژگی و شرایط مختلفی دارند که در پایین توضیح داده میشود.
هر کس بسته به سمتی که دارد، مقداری جان دارد، اگر در جنگ آسیبی به کسی وارد شود، به همان اندازه از جانش کم میشود و اگر جان کسی بعد از یک صدمه، کمتر یا مساوی ۰ شود، میمیرد.
ارتش شما باید به مبارزه با یک اژدها برود. این اژدها واحد جان دارد و هر چندوقت یکبار به یکی از افراد ارتش شما صدمه میزند.
در میدان جنگ ۴ معدن وجود دارد و روی هر معدن حداکثر دو معدنکار میتوانند کار کنند. اگر تعداد معدنکارها بیشتر ۸ باشد، ۸ نفر روی معادن کار میکنند و بقیه بیکار میایستند.
miner
): هر معدنکار یک واحد نیرو حساب میشود. جان هر معدنکار ۱۰۰ است. استخدام کردن یک معدنکار ۱۵۰ سکه نیاز دارد. هر معدنکار بعد از استخدام، در صورتی که بتواند روی یک معدن مشغول شود، هر ۱۰ ثانیه، ۱۰۰ سکه به دارای شما اضافه میکند. swordwrath
): هر شمشیرزن یک واحد نیرو حساب میشود. جان هر شمشیرزن ۱۲۰ است. استخدام کردن یک شمشیرزن ۱۲۵ سکه نیاز دارد. شمشیرزن هر ثانیه بعد از استخدام، یک ضربه به اژدها میزند و از جان او ۲۰ واحد کم میکند.archidon
): هر تیرانداز یک واحد نیرو حساب میشود. جان هر تیرانداز ۸۰ است. استخدام کردن یک تیرانداز ۳۰۰ سکه نیاز دارد. تیرانداز هر ثانیه بعد از استخدام، یک تیر به اژدها میزند و از جان او ۱۰ واحد کم میکند.spearton
): هر سپردار دو واحد نیرو حساب میشود. جان هر سپردار ۲۵۰ است. استخدام کردن یک سپردار ۵۰۰ سکه نیاز دارد. سپردار هر سه ثانیه بعد از استخدام، یک نیزه به اژدها میزند و از جان او ۳۵ واحد کم میکند.magikill
): هر جادوگر چهار واحد نیرو حساب میشود. جان هر جادوگر ۸۰ است. استخدام کردن یک جادوگر ۱۲۰۰ سکه نیاز دارد. جادوگر هر پنج ثانیه بعد از استخدام، یک آتش به اژدها میزند و از جان او ۲۰۰ واحد کم میکند.giant
): هر غول چهار واحد نیرو حساب میشود. جان هر غول ۱۰۰۰ است. استخدام کردن یک غول ۱۵۰۰ سکه نیاز دارد. غول هر چهار ثانیه بعد از استخدام، یک ضربه به اژدها میزند و از جان او ۱۵۰ واحد کم میکند.در این سوال از شما میخواهیم درخواست که بازیکن از ارتش دارد را مدیریت کنید.
add
)
این درخواست یعنی بازیکن میخواهد فردی با سمت <role>
در لحظهی <timestamp>
به بازی اضافه کند. (تضمین میشود که <role>
یکی از ۶ کلمه بالا باشد.)
game over
را چاپ کنید.not enough money
را چاپ کنید.too many army
را چاپ کنید. اگر هیچکدام از دو حالت بالا اتفاق نیفتاد، این فرد را به ارتش اضافه کنید و یک عدد که شمارهی این فرد است را چاپ کنید. افرادی که به ارتش اضافه میشوند به ترتیب از ۱ شماره گذاری میشوند. (اگر افراد کشته هم شوند شمارهی آنها حفظ میشود ولی اگر به هر دلیل از خطاهای بالا اضافه نشوند دیگر شماره ندارند.)
اگر چند خطا از خطاهای بالا باهم وجود داشت، تنها پیامی را چاپ کنید که زودتر آمده است.
damage
)
این درخواست، یعنی فرد شمارهی <idx>
توسط اژدها به اندازهی <d>
در لحظهی <timestamp>
ضربه خورده است.
game over
را چاپ کنید.<idx>
به ارتش شما هنوز نیامده یا اکنون زنده نیست. پیام no matter
را چاپ کنید.اگر هیچکدام از حالتهای بالا اتفاق نیفتاد، از جان <idx>
بهاندازهی <d>
کم کنید. اگر بعد از این ضربه این فرد کشته شد، رشتهی dead
و درغیراین صورت جان باقیماندهی آن را چاپ کنید.
توجه کنید اگر ضربه اژدها باعث کشته شدن یک معدنکار شود و معدنکار بیکاری داشته باشیم، معدنکاری که زودتر در ارتش استخدام شده، جایگزین میشود.
enemy-status
)
این درخواست، یعنی میخواهیم وضعیت اژدها را در لحظهی <timestamp>
بدانیم.
game over
را چاپ کنید.در غیراینصورت جان باقیمانده اژدها را در این لحظه چاپ کنید.
army-status
)
این درخواست، یعنی میخواهیم تعداد افراد زنده به تفکیک سمتشان در ارتش، را در لحظهی <timestamp>
بدانیم.
game over
را چاپ کنید.در غیراینصورت ۶ عدد صحیح که با یک فاصله از هم جدا شدهاند و هر کدام به ترتیبی که در بالا معرفی شدند، تعداد افراد زنده را در این لحظه را چاپ کنید. (هر فرد را مستقل از سمت یکبار بشمارید.)
money-status
)
این درخواست، یعنی میخواهیم وضعیت مالی را در لحظهی <timestamp>
بدانیم.
game over
را چاپ کنید.در غیراینصورت تعداد سکههای ذخیره شده را در این لحظه چاپ کنید.
<timestamp>
نشان میدهیم. فرمت هر کدام به صورت mm:ss:xxx
است که یعنی اتفاق در دقیقه mm
، ثانیه ss
و میلیثانیه xxx
اتفاق افتاد است. در سطر اول ورودی، دو عدد صحیح و با یک فاصله داده میشود که به ترتیب نشاندهندهی تعداد درخواستها و جان اژدها است.
در سطر بعدی، در هر سطر یکی از دستوراتی که در صورت سوال گفته شده میآید.
تضمین میشود زمان همهی درخواستها از نظر زمانی مرتب هستند و هیچ دو اتفاقی حتی اتفاقهایی که به تناوب تکرار میشوند، همزمان رخ نمیدهد.
خروجی سطر دارد و در هر سطر خروجی متناسب با درخواستها را به ترتیب چاپ کنید.
همانطور که در سوال گفته شد؛ دولت بعد از شروع بازی هر ۲۰ ثانیه، ۱۸۰ سکه به ارتش کمک میکند. پس تا لحظهی قبل از ثانیه ۲۰، مقدار پول ارتش همان ۵۰۰ سکهای است که از ابتدا دارد و اولین لحظه بعد از ثانیه ۲۰، ۱۸۰ سکه به ارتش اضافه میشود.
در ۴ درخواست بعدی، در هر درخواست یک معدنکار به ارتش اضافه میشود. هر معدنکار برای استخدام ۱۵۰ سکه نیاز دارد. پس بعد از استخدام معدنکار ۴ام دیگر پول کافی برای استخدام معدنکار ۵ام در لحظهی ۲۹:۰۰۹ نداریم. اما در لحظهی ۳۰:۰۱۰، هر ۴ معدنکار ۱۰ ثانیه هست که مشغول به کار شدند و هر کدام ۱۰۰ سکه به ارتش اضافه کردهاند. پس میتوانیم در این لحظه یک معدنکار داشته باشیم.