Menu
Coddy logo textTech

Özet - Skor Takipçisi

Coddy'nin Lua Journey'sinin Object Oriented Programming 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ız; biri bireysel puan girişlerini temsil ederken, diğeri operatör aşırı yüklemesi (operator overloading) ile desteklenen sıralama özelliklerine sahip liderlik tablosunu yönetecek.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • ScoreEntry.lua: Tek bir oyuncunun puanını temsil eden bir ScoreEntry sınıfı oluşturun. Her girişin bir playerName ve bir score değeri vardır. "{playerName}: {score} points" formatında bir dize döndüren bir :getInfo() metodu ekleyin. Buradaki temel özellik __lt metametodunu uygulamaktır; ancak unutmayın, azalan düzen için (en yüksek puanlar önce), karşılaştırmanız ilk girişin puanı ikinciden büyük olduğunda true döndürmelidir.
  • Leaderboard.lua: Puan girişlerinden oluşan bir koleksiyonu yöneten bir Leaderboard sınıfı oluşturun. Liderlik tablonuzun şunlara ihtiyacı vardır:
    • :addEntry(entry) — dahili listeye bir ScoreEntry ekler
    • :sort()table.sort kullanarak girişleri en yüksek puandan en düşüğe doğru sıralar
    • :display() — her girişin bilgisini her satıra bir tane gelecek şekilde yazdırır
  • main.lua: Her şeyi bir araya getirin! Bir Leaderboard oluşturun, aldığınız girdilere göre puan girişlerini ekleyin, liderlik tablosunu sıralayın ve sonuçları görüntüleyin.

Bu tasarımın zarif yanı, table.sort fonksiyonunun ScoreEntry nesnelerini karşılaştırmak için otomatik olarak __lt metametodunuzu kullanmasıdır. Girişlerin birbirleriyle nasıl karşılaştırılacağını tanımlayarak, Lua'nın yerleşik sıralama mekanizması özel nesnelerinizle doğrudan çalışır!

Üç oyuncuyu temsil eden altı girdi alacaksınız:

  1. Birinci oyuncunun adı
  2. Birinci 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 dosyanızda bir liderlik tablosu oluşturun, her üç girişi de ekleyin, :sort() metodunu çağırın ve ardından sıralanmış sonuçları göstermek için :display() metodunu çağırın.

Örneğin, girdiler Alice, 1500, Bob, 2300, Charlie ve 1800 ise çıktı şu şekilde olmalıdır:

Bob: 2300 points
Charlie: 1800 points
Alice: 1500 points

Girdiler Zara, 500, Max, 750, Luna ve 600 ise çıktı şu şekilde 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 girişleri 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())

-- YAPILACAK: Yeni bir Liderlik Tablosu oluştur

-- YAPILACAK: Her oyuncu için ScoreEntry nesneleri oluştur

-- YAPILACAK: Üç girişi de liderlik tablosuna ekle

-- YAPILACAK: Liderlik tablosunu sırala

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

Object Oriented Programming bölümündeki tüm dersler