مراجعة - متتبع النقاط
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 69 من 70.
التحدي
سهللنبنِ نظامًا لتتبّع النقاط في لوحة صدارة الألعاب! ستنشئ فئتين تعملان معًا: إحداهما تمثّل إدخالات النقاط الفردية، والأخرى تتولى إدارة لوحة الصدارة مع إمكانات الفرز المدعومة بزيادة تحميل العوامل.
ستنظّم شيفرتك عبر ثلاثة ملفات:
ScoreEntry.lua: أنشئ فئة ScoreEntry تمثّل نقاط لاعب واحد. يحتوي كل إدخال علىplayerNameوscore. أدرج أسلوب:getInfo()يعيد سلسلة نصية بالتنسيق"{playerName}: {score} points". الميزة الأساسية هنا هي تنفيذ أسلوب metamethod__lt، لكن تذكّر أنه بالنسبة إلى الترتيب التنازلي (أعلى النقاط أولًا)، يجب أن تعيد المقارنةtrueعندما تكون نقاط الإدخال الأول أكبر من نقاط الإدخال الثاني.Leaderboard.lua: أنشئ فئة Leaderboard تدير مجموعة من إدخالات النقاط. يجب أن تتضمن لوحة الصدارة لديك::addEntry(entry): يضيف ScoreEntry إلى القائمة internal:sort(): يرتّب الإدخالات من أعلى نقطة إلى أدنى نقطة باستخدامtable.sort:display(): يطبع info لكل إدخال، إدخالًا واحدًا في كل line
main.lua: اجمع everything معًا! أنشئ Leaderboard، وأضف إدخالات النقاط استنادًا إلى inputs التي تتلقاها، ثم رتّب لوحة الصدارة واعرض النتائج.
يكمن الجزء الأنيق من هذا التصميم في أن table.sort يستخدم automatically أسلوب metamethod __lt الخاص بك لمقارنة كائنات ScoreEntry. ومن خلال تعريف طريقة مقارنة الإدخالات بعضها ببعض، يعمل الفرز المضمّن في Lua مباشرةً مع كائناتك المخصّصة!
ستتلقى ستة inputs تمثّل ثلاثة لاعبين:
- اسم اللاعب الأول
- نقاط اللاعب الأول (عدد)
- اسم اللاعب الثاني
- نقاط اللاعب الثاني (عدد)
- اسم اللاعب الثالث
- نقاط اللاعب الثالث (عدد)
في main file، أنشئ لوحة صدارة، وأضف الإدخالات الثلاثة all، واستدعِ :sort()، ثم استدعِ :display() لعرض النتائج المرتبة.
على سبيل المثال، إذا كانت inputs هي Alice و1500 وBob و2300 وCharlie و1800، فيجب أن يكون الناتج:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsإذا كانت inputs هي 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: أضف جميع الإدخالات الثلاثة إلى الـ Leaderboard
-- TODO: رتّب الـ Leaderboard
-- TODO: اعرض النتائج المرتبة
جميع دروس البرمجة كائنية التوجه
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 النهائيتدرّب بنفسك: مترجم Lua عبر الإنترنت