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 tiap pemain, 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 metamethod__lt:a < bharus bernilaitruesaat skoralebih rendah daripada skorb, sama seperti cara kerja<pada angka.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. Secara bawaan,table.sortmenempatkan nilai terkecil di urutan pertama, jadi berikan fungsi pembanding yang membalik urutannya:function(a, b) return b < a end. Fungsi pembanding itu tetap menggunakan__lt-mu.:display(): mencetak info setiap entri, satu entri per baris
main.lua: Satukan semuanya! Buat Leaderboard, tambahkan entri skor berdasarkan input yang kamu terima, urutkan papan peringkat, lalu tampilkan hasilnya.
Membandingkan dua entri dengan < akan memanggil metamethod __lt-mu, sehingga table.sort bisa mengurutkan object ScoreEntry. Pastikan __lt tetap berarti "lebih kecil dari", lalu balik urutannya dalam pemanggilan sort: jika __lt berarti "lebih besar dari", setiap penggunaan < pada dua entri di mana pun dalam program akan memiliki arti terbalik.
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 utamamu, buat leaderboard, tambahkan ketiga entri, panggil :sort(), lalu panggil :display() untuk menampilkan hasil yang sudah diurutkan.
Contohnya, 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