مراجعة - متتبع النقاط
جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 69 من 70.
التحدي
سهللنقم ببناء نظام لتتبع النقاط للوحة صدارة الألعاب! ستقوم بإنشاء فئتين (classes) تعملان معاً—إحداهما تمثل إدخالات النقاط الفردية، والأخرى تدير لوحة الصدارة مع إمكانيات الفرز المدعومة بتحميل العوامل الزائد (operator overloading).
ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:
ScoreEntry.lua: قم بإنشاء فئة ScoreEntry التي تمثل نتيجة لاعب واحد. كل إدخال يحتوي علىplayerNameوscore. قم بتضمين طريقة:getInfo()التي تعيد سلسلة نصية بتنسيق"{playerName}: {score} points". الميزة الرئيسية هنا هي تنفيذ الطريقة الميتا (metamethod) المسماة__lt—ولكن تذكر، من أجل الترتيب التنازلي (أعلى الدرجات أولاً)، يجب أن تعيد المقارنة الخاصة بكtrueعندما تكون درجة الإدخال الأول أكبر من درجة الإدخال الثاني.Leaderboard.lua: قم ببناء فئة Leaderboard التي تدير مجموعة من إدخالات النقاط. تحتاج لوحة الصدارة الخاصة بك إلى::addEntry(entry)— يضيف ScoreEntry إلى القائمة الداخلية:sort()— يفرز الإدخالات من أعلى درجة إلى أدنى درجة باستخدامtable.sort:display()— يطبع المعلومات لكل إدخال، كل واحد في سطر
main.lua: اجمع كل شيء معاً! قم بإنشاء Leaderboard، وأضف إدخالات النقاط بناءً على المدخلات التي تتلقاها، وافرز لوحة الصدارة، واعرض النتائج.
الجزء الأنيق في هذا التصميم هو أن table.sort تستخدم تلقائياً طريقة __lt الخاصة بك لمقارنة كائنات ScoreEntry. من خلال تحديد كيفية مقارنة الإدخالات ببعضها البعض، سيعمل الفرز المدمج في Lua ببساطة مع كائناتك المخصصة!
ستتلقى ستة مدخلات تمثل ثلاثة لاعبين:
- اسم اللاعب الأول
- درجة اللاعب الأول (رقم)
- اسم اللاعب الثاني
- درجة اللاعب الثاني (رقم)
- اسم اللاعب الثالث
- درجة اللاعب الثالث (رقم)
في ملفك الرئيسي، قم بإنشاء لوحة صدارة، وأضف جميع الإدخالات الثلاثة، واستدعِ :sort()، ثم استدعِ :display() لإظهار النتائج المفروزة.
على سبيل المثال، إذا كانت المدخلات هي Alice، و 1500، و Bob، و 2300، و Charlie، و 1800، فيجب أن يكون المخرج:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsإذا كانت المدخلات هي Zara، و 500، و Max، و 750، و Luna، و 600، فيجب أن يكون المخرج:
Max: 750 points
Luna: 600 points
Zara: 500 pointsجرّب بنفسك
-- الملف الرئيسي: تجميع كل شيء معاً
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- قراءة المدخلات لثلاثة لاعبين
local name1 = io.read()
local score1 = tonumber(io.read())
local name2 = io.read()
local score2 = tonumber(io.read())
local name3 = io.read()
local score3 = tonumber(io.read())
-- TODO: إنشاء لوحة متصدرين (Leaderboard) جديدة
-- TODO: لكل لاعب ScoreEntry إنشاء كائنات
-- TODO: إضافة جميع الإدخالات الثلاثة إلى لوحة المتصدرين
-- TODO: فرز لوحة المتصدرين
-- TODO: عرض النتائج المفروزة
جميع دروس Object Oriented Programming
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال9التركيب و Mixins
علاقة "يحتوي على" (Has-A)التفويض (Delegation)Mixins بسيطةتطبيق Mixins متعددةMixins مقابل الوراثةملخص - تجميع الروبوت12التحديات النهائية
مراجعة - نظام المخزونمراجعة - مدير المستخدمينمراجعة - متتبع النقاطاختبار OOP النهائي