مسیرها
/
C#
C#
/
تمرین‌ها
/
گزارش‌های مسابقه‌ی فوتبال
گزارش‌های مسابقه‌ی فوتبال

گزارش‌های مسابقه‌ی فوتبال

تمرین یادگیری

مقدمه

دستورهای switch

ویکی‌پدیا دستور switch را چنین توصیف می‌کند: «نوعی سازوکار کنترلی انتخاب که به مقدار یک متغیر یا عبارت اجازه می‌دهد جریان اجرای برنامه را تغییر دهد.»

این سازوکار شامل کلیدواژه‌های زیر است: switch، case، break و default.

در ساده‌ترین حالت، این دستورها یک عبارت اولیه یا رشته‌ای را می‌آزمایند و بر پایه‌ی مقدار آن تصمیمی می‌گیرند. برای نمونه:

string direction = GetDirection();
switch (direction)
{
    case "left":
        GoLeft();
        break;
    case "right":
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

در پیشرفته‌ترین حالت، تبدیل نوع به پایین به شکل case <Type> <variable>: و نگهبان‌ها (when) را معرفی می‌کنند.

Animal animal = GetAnimal();

switch (animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}

دستورالعمل‌ها

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

1. توصیف بازیکنان را بر اساس شماره‌ی پیراهنشان تولید کنید

این تیم تنها با آرایش ۴-۳-۳ بازی می‌کند و هرگز با تغییر قوانین در سال ۱۹۶۵ که تعویض بازیکن را مجاز می‌کرد موافق نبوده است، چه برسد به بزرگ‌تر شدن فهرست بازیکنان.

توصیف بازیکنان به این صورت است:

1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"

متد استاتیک PlayAnalyzer.AnalyzeOnField() را پیاده‌سازی کنید تا بر اساس شماره‌ی پیراهن بازیکن، توصیف او را تولید کند.

PlayAnalyzer.AnalyzeOnField(10);
// => "striker"

2. شماره‌های پیراهن ناشناخته را مدیریت کنید

متد PlayAnalyzer.AnalyzeOnField() را تغییر دهید تا وقتی شماره‌ی پیراهنی خارج از بازه‌ی ۱ تا ۱۱ پردازش می‌شود، UNKNOWN را گزارش کند.

3. پوشش را گسترش دهید تا فعالیت‌های خارج از زمین را هم شامل شود

متد PlayAnalyzer.AnalyzeOffField() را پیاده‌سازی کنید تا توصیف فعالیت‌ها و افراد حاضر در اطراف زمین بازی را تولید کند. این متد انواع مختلفی از داده را دریافت می‌کند که باید تحلیل شوند و به متن مناسب تبدیل شوند تا به خبرنگاران کمک کنند.

برای شروع، داده‌های مربوط به ورزشگاه را پوشش می‌دهیم:

  • تعداد فعلی تماشاگران در ورزشگاه (هر int)
  • اطلاعیه‌هایی که از طریق سیستم صوتی ورزشگاه پخش می‌شوند (هر string)

انواع ناشناخته‌ی داده نباید پردازش شوند، بنابراین اگر متد داده‌ای از نوعی متفاوت دریافت کند، باید رشته‌ی خالی برگردانده شود.

PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."

PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"

PlayAnalyzer.AnalyzeOffField(0.5);
// => ""

4. درباره‌ی رخدادهای حین مسابقه گزارش بدهید

متد PlayAnalyzer.AnalyzeOffField() را تغییر دهید تا توصیف رخدادهایی را تولید کند که در طول مسابقه اتفاق می‌افتند.

رخدادها می‌توانند هر زیرکلاسی از نوع Incident باشند و شامل توصیفی از رخداد خواهند بود. آسیب‌دیدگی‌ها نوع خاصی از رخداد هستند، چون باعث متوقف شدن مسابقه می‌شوند، پس باید به شکل متفاوتی با آن‌ها برخورد شود.

PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."

PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."

5. درباره‌ی مربیان باشگاه گزارش بدهید

متد PlayAnalyzer.AnalyzeOffField() را تغییر دهید تا مربیان باشگاهی را که در مسابقه حاضرند ذکر کند.

مربیان نمونه‌هایی از نوع Manager هستند و یک اسم و اسم باشگاهی که مدیریت می‌کنند دارند. ممکن است باشگاه مربی ناشناخته باشد که در این صورت روی null تنظیم می‌شود. اگر باشگاه یک مربی مشخص نباشد، نباید بخشی از توصیف باشد.

PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"

PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C# Exercism

آماده‌اید گزارش‌های مسابقه‌ی فوتبال را شروع کنید؟

در Exercism ثبت‌نام کنید تا C# را همراه با 62 مفهوم178 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.