Menu
Coddy logo textTech

Ö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

Bir oyun liderlik tablosu için 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 desteklenen sıralama özelliklerine sahip liderlik tablosunu yönetecek.

Kodunu üç dosya arasında düzenleyeceksin:

  • 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. :getInfo() biçiminde bir dize döndüren bir "{playerName}: {score} points" yöntemi ekle. Buradaki temel özellik __lt metamethod'unu uygulamaktır; ancak azalan sıralama (en yüksek puanlar önce) için karşılaştırmanın, ilk kaydın puanı ikincinin puanından büyük olduğunda true döndürmesi gerektiğini unutma.
  • Leaderboard.lua: Puan kayıtlarından oluşan bir koleksiyonu yöneten bir Leaderboard sınıfı oluştur. Liderlik tablon şunları içermelidir:
    • :addEntry(entry): bir ScoreEntry'yi dahili listeye ekler
    • :sort(): table.sort kullanarak kayıtları en yüksek puandan en düşük puana doğru sıralar
    • :display(): her kayıt için bilgileri satır başına bir tane olacak şekilde yazdırır
  • main.lua: Her şeyi bir araya getir! Bir Leaderboard oluştur, aldığın girdilere göre puan kayıtları ekle, liderlik tablosunu sırala ve sonuçları görüntüle.

Bu tasarımın zarif yanı, table.sort'un ScoreEntry nesnelerini karşılaştırmak için __lt metamethod'unu otomatik olarak kullanmasıdır. Kayıtların birbirleriyle nasıl karşılaştırılacağını tanımlayarak Lua'nın yerleşik sıralaması özel nesnelerinle doğrudan çalışır!

Üç 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 tümünü ekle, :sort() çağrısını yap, ardından sıralanmış sonuçları göstermek için :display() çağrısını yap.

Ö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')

-- Üç oyuncu için girdileri 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: Üç girdiyi de leaderboard'a ekle

-- TODO: Leaderboard'u sırala

-- TODO: Sıralanmış sonuçları görüntüle

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi