Ripasso - Tracciamento punteggi
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 69 di 70.
Sfida
FacileCreiamo un sistema per tenere traccia dei punteggi in una classifica di gioco! Creerai due classi che collaborano: una rappresenta le singole voci dei punteggi e l’altra gestisce la classifica con funzionalità di ordinamento basate sull’overloading degli operatori.
Organizzerai il codice in tre file:
ScoreEntry.lua: crea una classe ScoreEntry che rappresenta il punteggio di un singolo giocatore. Ogni voce ha unplayerNamee unscore. Includi un metodo:getInfo()che restituisce una stringa nel formato"{playerName}: {score} points". La caratteristica principale è il metametodo__lt:a < bdovrebbe esseretruequando il punteggio diaè inferiore a quello dib, proprio come funziona<con i numeri.Leaderboard.lua: crea una classe Leaderboard che gestisce una raccolta di voci dei punteggi. La classifica deve avere::addEntry(entry): aggiunge una voce ScoreEntry all’elenco interno:sort(): ordina le voci dal punteggio più alto a quello più basso usandotable.sort. Da solo,table.sortmette prima l’elemento più piccolo, quindi passagli un confronto che inverte l’ordine:function(a, b) return b < a end. Questo confronto usa comunque il tuo__lt.:display(): stampa le informazioni di ogni voce, una per riga
main.lua: unisci il tutto! Crea una classifica, aggiungi le voci dei punteggi in base agli input ricevuti, ordina la classifica e mostra i risultati.
Confrontare due voci con < richiama il metametodo __lt, così table.sort può ordinare gli oggetti ScoreEntry. Mantieni il significato di “minore di” per __lt e inverti l’ordine nella chiamata di ordinamento: se __lt significasse “maggiore di”, ogni < applicato a due voci in qualsiasi punto del programma avrebbe il significato invertito.
Riceverai sei input che rappresentano tre giocatori:
- Nome del primo giocatore
- Punteggio del primo giocatore (un numero)
- Nome del secondo giocatore
- Punteggio del secondo giocatore (un numero)
- Nome del terzo giocatore
- Punteggio del terzo giocatore (un numero)
Nel file principale, crea una classifica, aggiungi tutte e tre le voci, chiama :sort(), quindi chiama :display() per mostrare i risultati ordinati.
Ad esempio, se gli input sono Alice, 1500, Bob, 2300, Charlie e 1800, l’output dovrebbe essere:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsSe gli input sono Zara, 500, Max, 750, Luna e 600, l’output dovrebbe essere:
Max: 750 points
Luna: 600 points
Zara: 500 pointsProvalo tu
-- File principale: metti tutto insieme
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Leggi gli input dei tre giocatori
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: crea una nuova Leaderboard
-- TODO: crea oggetti ScoreEntry per ogni giocatore
-- TODO: aggiungi tutte e tre le voci alla leaderboard
-- TODO: ordina la leaderboard
-- TODO: mostra i risultati ordinati
Tutte le lezioni di Programmazione orientata agli oggetti
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle forme9Composizione e mixin
Relazione Has-ADelegaMixin sempliciApplicare più mixinMixin vs ereditarietàRiepilogo - Assemblaggio di robot12Sfide finali
Ripasso - Sistema di inventarioRipasso - Gestore utentiRipasso - Tracciamento punteggiVerifica finale di OOPEsercitati da solo: Compilatore Lua online