Menu
CoddyTech

Özet - Skor Takipçisi

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 69 / 70.

challenge icon

Görev

Kolay

Oyun 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 bir playerName ve bir score bulunur. "{playerName}: {score} points" biçiminde bir dize döndüren :getInfo() metodunu ekle. Buradaki temel özellik __lt metamethod’udur: a < b, a'nın puanı b'ninkinden düşük olduğunda true olmalı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.sort kullanarak kayıtları en yüksek puandan en düşük puana doğru sıralar. table.sort tek 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 __lt metamethod’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:

  1. İlk oyuncunun adı
  2. İlk oyuncunun puanı (bir sayı)
  3. İkinci oyuncunun adı
  4. İkinci oyuncunun puanı (bir sayı)
  5. Üçüncü oyuncunun adı
  6. Üçü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 points

Girdiler Zara, 500, Max, 750, Luna ve 600 ise çıktı şöyle olmalıdır:

Max: 750 points
Luna: 600 points
Zara: 500 points

Kendin 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

Kendi başına pratik yap: Online Lua derleyicisi