Revisão - Rastreador de Pontuação
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 69 de 70.
Desafio
FácilVamos construir um sistema de rastreamento de pontuação para um placar de jogos! Você criará duas classes que trabalham juntas — uma representando entradas de pontuação individuais e outra gerenciando o placar com recursos de ordenação alimentados por sobrecarga de operadores.
Você organizará seu código em três arquivos:
ScoreEntry.lua: Crie uma classe ScoreEntry que representa a pontuação de um único jogador. Cada entrada possui umplayerNamee umscore. Inclua um método:getInfo()que retorna uma string no formato"{playerName}: {score} points". O recurso principal aqui é implementar o metamétodo__lt— mas lembre-se, para ordem decrescente (maiores pontuações primeiro), sua comparação deve retornartruequando a pontuação da primeira entrada for maior que a da segunda.Leaderboard.lua: Construa uma classe Leaderboard que gerencia uma coleção de entradas de pontuação. Seu placar precisa de::addEntry(entry)— adiciona um ScoreEntry à lista interna:sort()— ordena as entradas da maior para a menor pontuação usandotable.sort:display()— imprime as informações de cada entrada, uma por linha
main.lua: Junte tudo! Crie um Leaderboard, adicione entradas de pontuação com base nas entradas que você receber, ordene o placar e exiba os resultados.
A parte elegante deste design é que o table.sort usa automaticamente seu metamétodo __lt para comparar objetos ScoreEntry. Ao definir como as entradas se comparam entre si, a ordenação integrada do Lua simplesmente funciona com seus objetos personalizados!
Você receberá seis entradas representando três jogadores:
- Nome do primeiro jogador
- Pontuação do primeiro jogador (um número)
- Nome do segundo jogador
- Pontuação do segundo jogador (um número)
- Nome do terceiro jogador
- Pontuação do terceiro jogador (um número)
No seu arquivo principal, crie um placar, adicione todas as três entradas, chame :sort() e, em seguida, chame :display() para mostrar os resultados ordenados.
Por exemplo, se as entradas forem Alice, 1500, Bob, 2300, Charlie e 1800, a saída deve ser:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsSe as entradas forem Zara, 500, Max, 750, Luna e 600, a saída deve ser:
Max: 750 points
Luna: 600 points
Zara: 500 pointsExperimente você mesmo
-- Arquivo principal: Reúne tudo
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Lê as entradas para três jogadores
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: Criar um novo Leaderboard
-- TODO: Criar objetos ScoreEntry para cada jogador
-- TODO: Adicionar todas as três entradas ao leaderboard
-- TODO: Ordenar o leaderboard
-- TODO: Exibir os resultados ordenados
Todas as lições de Object Oriented Programming
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse Retângulo2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de Formas9Composição e Mixins
Relacionamento Tem-UmDelegaçãoMixins SimplesAplicando Múltiplos MixinsMixins vs HerançaRecapitulação - Montagem de Robô12Desafios Finais
Revisão - Sistema de InventárioRevisão - Gerenciador de UsuáriosRevisão - Rastreador de PontuaçãoVerificação Final de POO