Ripasso - Tracciamento punteggi
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 69 di 70.
Sfida
FacileCostruiamo un sistema per tenere traccia dei punteggi in una classifica di videogiochi! 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 unoscore. Includi un metodo:getInfo()che restituisce una stringa nel formato"{playerName}: {score} points". La caratteristica principale è implementare il metametodo__lt, ma ricorda: per l’ordinamento decrescente (con i punteggi più alti per primi), il confronto deve restituiretruequando il punteggio della prima voce è maggiore di quello della seconda.Leaderboard.lua: crea una classe Leaderboard che gestisce una raccolta di voci dei punteggi. La classifica deve avere::addEntry(entry): aggiunge una ScoreEntry all’elenco interno:sort(): ordina le voci dal punteggio più alto al più basso usandotable.sort:display(): stampa le informazioni di ciascuna voce, una per riga
main.lua: unisci tutte le parti! Crea una Leaderboard, aggiungi le voci dei punteggi in base agli input ricevuti, ordina la classifica e mostra i risultati.
L’aspetto elegante di questo progetto è che table.sort usa automaticamente il metametodo __lt per confrontare gli oggetti ScoreEntry. Definendo come si confrontano tra loro le voci, l’ordinamento integrato di Lua funziona subito con i tuoi oggetti personalizzati!
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() e poi chiama :display() per mostrare i risultati ordinati.
Per 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 di 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 classifica
-- TODO: Ordina la classifica
-- 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