Menu
Coddy logo textTech

סיכום – אוסף מותאם אישית

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 75 מתוך 110.

challenge icon

אתגר

קל

בואו נבנה מערכת ScoreBoard שעוקבת אחר הניקוד של השחקנים ומדגימה איך שיטות מיוחדות פועלות יחד כדי ליצור מחלקה מלוטשת ומקצועית!

תארגנו את הקוד שלכם בשני קבצים:

  • score_board.dart: צרו מחלקה Player ומחלקה ScoreBoard שפועלות יחד לניהול ניקוד במשחק.

    במחלקה Player צריכים להיות name (String) ו-score (int). היא צריכה:

    • לממש את Comparable<Player> כדי שאפשר יהיה למיין שחקנים לפי הניקוד בסדר יורד (הגבוה ביותר קודם)
    • לדרוס את == ואת 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 (ההוספה אמורה להידחות כי Alice כבר קיימת)

  // TODO: הדפיסו את טבלת הניקוד באמצעות toString()

  // TODO: הדפיסו שורה ריקה

  // TODO: הדפיסו "Rankings:"

  // TODO: קראו לטבלת הניקוד כמו לפונקציה כדי לקבל דירוגים ממוינים, ואז הדפיסו כל שחקן
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Dart אונליין