Menu
Coddy logo textTech

Ripasso - Tracciamento punteggi

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 69 di 70.

challenge icon

Sfida

Facile

Costruiamo 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 un playerName e uno score. 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 restituire true quando 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 usando table.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:

  1. Nome del primo giocatore
  2. Punteggio del primo giocatore (un numero)
  3. Nome del secondo giocatore
  4. Punteggio del secondo giocatore (un numero)
  5. Nome del terzo giocatore
  6. 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 points

Se gli input sono Zara, 500, Max, 750, Luna e 600, l’output dovrebbe essere:

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

Provalo 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

Esercitati da solo: Compilatore Lua online