المسارات
/
C#
C#
/
التمارين
/
تقارير مباريات كرة القدم
تقارير مباريات كرة القدم

تقارير مباريات كرة القدم

تمرين تعلّمي

مقدمة

جمل switch

تصف ويكيبيديا جملة switch بأنها "نوع من آليات التحكم في الاختيار تُستخدم للسماح لقيمة متغير أو تعبير بتغيير مسار تنفيذ البرنامج".

تتضمن هذه الآلية الكلمات المفتاحية التالية: switch وcase وbreak وdefault.

في أبسط صورها، تختبر جملة switch تعبيرًا أوليًا أو تعبيرًا نصيًا وتتخذ قرارًا بناءً على قيمته. على سبيل المثال:

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. إرجاع أوصاف اللاعبين بناءً على رقم قميصهم

لا يلعب الفريق إلا بخطة 4-3-3، ولم يوافق قط على تغيير القواعد عام 1965 الذي سمح بالتبديلات، فضلًا عن توسيع قوائم اللاعبين.

أوصاف اللاعبين كما يلي:

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 عند معالجة رقم قميص خارج النطاق 1-11.

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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.