• محدودیت زمان پایتون: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

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

سلاح‌ها

نام برد قدرت اندازۀ گلوله
Submachine Gun 100 10 0.5
Assault Rifle 200 20 1
Pistol 80 8 0.5
Shotgun 50 40 4
Sniper Rifle 1000 30 3

گلوله‌ها

نام اندازه آسیب
A 0.5 1
B 1 1.5
C 3 3
D 4 2

پروژه اولیه

پروژه اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها

GunProblemSample.zip
├── Shooter.py
└── ShootingContract.py
Plain text

خواسته‌های مسئله

با توجه به انواع سلاح‌ها و گلوله‌ها کلاس زیر را پیاده‌سازی کند:

class Shooter:

    def set_gun_by_name(self, name: str) -> None:

        pass

    def add_bullet_of_given_size_to_gun(self, size: float, count: int) -> None:

        pass

    def shoot_to_target(self, target_x: int,  target_y: int,  target_distance: int,  aim_x: int,  aim_y: int) -> float:

        pass

Python

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

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

    • در صورتی که سلاحی با نام داده شده وجود نداشته باشد، باید یک Exception پرتاب شود.
    • این متد باید به حرف کوچک و بزرگ حساس باشد؛ به عنوان مثال سلاحی با نام submachine gun نداریم.
  • متد انتخاب گلوله، گلوله‌هایی را با اندازه و تعداد داده‌شده به سلاح اضافه می‌کند.

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

    • هدف، یک مربع به ضلع ۱۰ است.
    • مختصات گوشۀ پایین-چپ مربع در ورودی داده می‌شود.
    • برای محاسبۀ خروجی، به صورت زیر عمل می‌کنیم:
      • اگر برد سلاح از فاصله کمتر باشد، عدد ۰ برگردانده شود.
      • در غیر این صورت، حاصل‌ضرب قدرت اسلحه در آسیب گلوله برگردانده شود.
    • در صورتی که سلاحی انتخاب نشده باشد یا گلوله‌ای نداشته باشد، باید یک Exception پرتاب شود.

مثال

shooter = Shooter()
shooter.set_gun_by_name('Submachine Gun')
shooter.add_bullet_of_given_size_to_gun(0.5, 1)
result = shooter.shoot_to_target(1, 1, 20, 5, 4)
# result should be 10
Python

نکات

  • شما تنها مجاز به تغییر در فایل Shooter.py هستید. تغییرات در باقی فایل‌ها نادیده گرفته می‌شود.
  • توجه کنید که تمیزی کد مهم و در رتبه‌بندی نهایی تاثیرگذار است.
  • برای ثبت پاسخ، پروژه را با ساختار زیر ارسال کنید.
[your-zip-file-name].zip
└── Shooter.py
Plain text

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.