Özet - Skor Takipçisi
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 69 / 70.
Görev
KolayOyun liderlik tablosu için bir puan takip sistemi oluşturalım! Birlikte çalışan iki sınıf oluşturacaksın: biri bireysel puan kayıtlarını temsil edecek, diğeri ise operatör aşırı yüklemesiyle sağlanan sıralama özellikleriyle liderlik tablosunu yönetecek.
Kodunu üç dosyaya böleceksin:
ScoreEntry.lua: Tek bir oyuncunun puanını temsil eden bir ScoreEntry sınıfı oluştur. Her kayıtta birplayerNameve birscorebulunur."{playerName}: {score} points"biçiminde bir dize döndüren:getInfo()metodunu ekle. Buradaki temel özellik__ltmetamethod’udur:a < b,a'nın puanıb'ninkinden düşük olduğundatrueolmalıdır; tıpkı sayılarda<operatörünün çalışması gibi.Leaderboard.lua: Puan kayıtlarından oluşan bir koleksiyonu yöneten bir Leaderboard sınıfı oluştur. Liderlik tablon şunlara ihtiyaç duyar::addEntry(entry): iç listedeki ScoreEntry kaydını ekler:sort():table.sortkullanarak kayıtları en yüksek puandan en düşük puana doğru sıralar.table.sorttek başına en küçük öğeyi başa koyar, bu yüzden sıralamayı tersine çeviren bir karşılaştırma işlevi ver:function(a, b) return b < a end. Bu karşılaştırma yine de senin__ltmetamethod’unu kullanır.:display(): her kayıtla ilgili bilgileri satır başına bir kayıt olacak şekilde yazdırır
main.lua: Her şeyi bir araya getir! Bir Leaderboard oluştur, aldığın girdilere göre puan kayıtlarını ekle, liderlik tablosunu sırala ve sonuçları göster.
İki kaydı < ile karşılaştırmak __lt metamethod’unu çağırır, böylece table.sort ScoreEntry nesnelerini sıralayabilir. __lt anlamını “küçüktür” olarak koru ve sıralama çağrısında sıralamayı tersine çevir: __lt “büyüktür” anlamına gelseydi, programın herhangi bir yerinde iki kayıt üzerinde kullanılan her < geriye doğru çalışırdı.
Üç oyuncuyu temsil eden altı girdi alacaksın:
- İlk oyuncunun adı
- İlk oyuncunun puanı (bir sayı)
- İkinci oyuncunun adı
- İkinci oyuncunun puanı (bir sayı)
- Üçüncü oyuncunun adı
- Üçüncü oyuncunun puanı (bir sayı)
Ana dosyanda bir liderlik tablosu oluştur, üç kaydın tamamını ekle, :sort() metodunu çağır, ardından sıralanmış sonuçları göstermek için :display() metodunu çağır.
Örneğin, girdiler Alice, 1500, Bob, 2300, Charlie ve 1800 ise çıktı şöyle olmalıdır:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsGirdiler Zara, 500, Max, 750, Luna ve 600 ise çıktı şöyle olmalıdır:
Max: 750 points
Luna: 600 points
Zara: 500 pointsKendin dene
-- Ana dosya: Her şeyi bir araya getir
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Üç oyuncunun girdilerini oku
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: Yeni bir Leaderboard oluştur
-- TODO: Her oyuncu için ScoreEntry nesneleri oluştur
-- TODO: Üç girdinin tamamını liderlik tablosuna ekle
-- TODO: Liderlik tablosunu sırala
-- TODO: Sıralanmış sonuçları göster
Nesne Yönelimli Programlama bölümündeki tüm dersler
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil Hiyerarşisi9Kompozisyon ve Mixin'ler
Has-A İlişkisiDelegasyonBasit Mixin'lerBirden Fazla Mixin UygulamaMixin'ler ve KalıtımÖzet - Robot Birleştirme12Son Görevler
Özet - Envanter SistemiÖzet - Kullanıcı YöneticisiÖzet - Skor TakipçisiFinal OOP KontrolüKendi başına pratik yap: Online Lua derleyicisi