Ringkasan: Pelacak Skor
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 69 dari 70.
Tantangan
MudahMari 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 memilikiplayerNamedanscore. 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 mengembalikantrueketika 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 menggunakantable.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:
- Nama pemain pertama
- Skor pemain pertama (angka)
- Nama pemain kedua
- Skor pemain kedua (angka)
- Nama pemain ketiga
- 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 pointsJika inputnya adalah Zara, 500, Max, 750, Luna, dan 600, outputnya seharusnya:
Max: 750 points
Luna: 600 points
Zara: 500 pointsCoba 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
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki Bentuk9Komposisi & Mixins
Hubungan Has-ADelegasiMixins SederhanaMenerapkan Beberapa MixinsMixins vs PewarisanRangkuman: Perakitan Robot12Tantangan Akhir
Ringkasan: Sistem InventarisRingkasan: Pengelola PenggunaRingkasan: Pelacak SkorPemeriksaan Akhir OOPLatihan sendiri: Compiler Lua online