Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - Custom Collection

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 75 من 110.

challenge icon

التحدي

سهل

لنقم ببناء نظام ScoreBoard يتتبع نتائج اللاعبين ويوضح كيف تعمل الطرق الخاصة (special methods) معاً لإنشاء فئة (class) مصقولة واحترافية!

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • score_board.dart: أنشئ فئة Player وفئة ScoreBoard تعملان معاً لإدارة نتائج اللعبة.

    يجب أن تحتوي فئة Player على name (String) و score (int). وتحتاج إلى:

    • تنفيذ Comparable<Player> بحيث يمكن فرز اللاعبين حسب النتيجة بترتيب تنازلي (الأعلى أولاً)
    • إعادة تعريف (Override) لـ == و hashCode بحيث يُعتبر أي لاعبين لهما نفس الاسم متساويين (بغض النظر عن النتيجة)
    • إعادة تعريف toString() لترجع: [name]: [score] points

    يجب أن تقوم فئة ScoreBoard بتخزين قائمة من اللاعبين وتوفر:

    • طريقة addPlayer(Player player) تضيف لاعباً فقط إذا لم يكن موجوداً بالفعل (استخدم تنفيذك للمساواة!)
    • طريقة call() لا تأخذ أي وسائط وترجع نسخة مرتبة من قائمة اللاعبين (مرتبة حسب النتيجة، الأعلى أولاً)
    • إعادة تعريف toString() لعرض جميع اللاعبين (غير مرتبين)، لاعب واحد في كل سطر، مع العنوان ScoreBoard: في السطر الأول
  • main.dart: استورد ملف لوحة النتائج الخاص بك ووضح كيف تعمل كل هذه الطرق الخاصة معاً:
    • أنشئ ScoreBoard
    • أضف هؤلاء اللاعبين: Alice بـ 150، و Bob بـ 200، و Charlie بـ 175
    • حاول إضافة Alice مرة أخرى بنتيجة 999 (يجب رفضها كنسخة مكررة)
    • اطبع لوحة النتائج باستخدام toString() الخاصة بها
    • اطبع سطراً فارغاً
    • اطبع Rankings:
    • استدعِ لوحة النتائج كدالة للحصول على التصنيفات المرتبة، ثم اطبع كل لاعب

يجمع هذا التحدي بين toString() للعرض، و == و hashCode لكشف التكرار، و compareTo() للفرز، و call() للحصول على واجهة استدعاء نظيفة!

المخرجات المتوقعة:

ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points

Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 points

جرّب بنفسك

import 'score_board.dart';

void main() {
  // TODO: إنشاء ScoreBoard

  // TODO: إضافة لاعبين: Alice (150)، Bob (200)، Charlie (175)

  // TODO: محاولة إضافة Alice مرة أخرى بنتيجة 999 (يجب رفضها كنسخة مكررة)

  // TODO: طباعة لوحة النتائج باستخدام toString() الخاصة بها

  // TODO: طباعة سطر فارغ

  // TODO: طباعة "Rankings:"

  // TODO: استدعاء لوحة النتائج كدالة للحصول على تصنيفات مرتبة، ثم طباعة كل لاعب
}

جميع دروس Object Oriented Programming