Menu
CoddyTech

Ringkasan: Pelacak Skor

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 69 dari 70.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pelacakan skor untuk papan peringkat game! Kamu akan membuat dua class yang bekerja bersama: satu mewakili entri skor individu, dan satu lagi mengelola papan peringkat dengan kemampuan pengurutan yang didukung oleh operator overloading.

Kamu akan mengatur kodemu dalam tiga file:

  • ScoreEntry.lua: Buat class ScoreEntry yang mewakili skor seorang pemain. Setiap entri memiliki playerName dan score. Sertakan method :getInfo() yang mengembalikan string dengan format "{playerName}: {score} points". Fitur utamanya adalah menerapkan metamethod __lt, tetapi ingat, untuk urutan menurun (skor tertinggi lebih dulu), perbandinganmu harus mengembalikan true ketika skor entri pertama lebih besar daripada skor entri kedua.
  • Leaderboard.lua: Buat class Leaderboard yang mengelola kumpulan entri skor. Papan peringkatmu memerlukan:
    • :addEntry(entry): menambahkan ScoreEntry ke list internal
    • :sort(): mengurutkan entri dari skor tertinggi ke terendah menggunakan table.sort
    • :display(): mencetak informasi setiap entri, satu per baris
  • main.lua: Satukan semuanya! Buat Leaderboard, tambahkan entri skor berdasarkan input yang kamu terima, urutkan papan peringkat, lalu tampilkan hasilnya.

Bagian menarik dari desain ini adalah table.sort secara otomatis menggunakan metamethod __lt milikmu untuk membandingkan object ScoreEntry. Dengan menentukan cara entri dibandingkan satu sama lain, fitur pengurutan bawaan Lua bisa langsung digunakan dengan object kustommu!

Kamu akan menerima enam input yang mewakili tiga pemain:

  1. Nama pemain pertama
  2. Skor pemain pertama (angka)
  3. Nama pemain kedua
  4. Skor pemain kedua (angka)
  5. Nama pemain ketiga
  6. Skor pemain ketiga (angka)

Di file utama, buat papan peringkat, tambahkan ketiga entri, panggil :sort(), lalu panggil :display() untuk menampilkan hasil yang sudah diurutkan.

Misalnya, jika inputnya adalah Alice, 1500, Bob, 2300, Charlie, dan 1800, outputnya seharusnya:

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

Jika inputnya adalah Zara, 500, Max, 750, Luna, dan 600, outputnya seharusnya:

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

Coba sendiri

-- File utama: Gabungkan semuanya
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')

-- Baca input untuk tiga pemain
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: Buat Leaderboard baru

-- TODO: Buat object ScoreEntry untuk setiap pemain

-- TODO: Tambahkan ketiga entri ke leaderboard

-- TODO: Urutkan leaderboard

-- TODO: Tampilkan hasil yang sudah diurutkan

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online