Repaso - Seguimiento de puntuación
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 69 de 70.
Desafío
Fácil¡Vamos a construir un sistema de seguimiento de puntuaciones para una tabla de clasificación de juegos! Crearás dos clases que trabajan juntas: una que representa entradas de puntuación individuales y otra que gestiona la tabla de clasificación con capacidades de ordenación potenciadas por la sobrecarga de operadores.
Organizarás tu código en tres archivos:
ScoreEntry.lua: Crea una clase ScoreEntry que represente la puntuación de un solo jugador. Cada entrada tiene unplayerNamey unscore. Incluye un método:getInfo()que devuelva una cadena en el formato"{playerName}: {score} points". La característica clave aquí es implementar el metamétodo__lt; pero recuerda, para el orden descendente (puntuaciones más altas primero), tu comparación debe devolvertruecuando la puntuación de la primera entrada sea mayor que la de la segunda.Leaderboard.lua: Construye una clase Leaderboard que gestione una colección de entradas de puntuación. Tu tabla de clasificación necesita::addEntry(entry)— añade un ScoreEntry a la lista interna:sort()— ordena las entradas de mayor a menor puntuación usandotable.sort:display()— imprime la información de cada entrada, una por línea
main.lua: ¡Une todo! Crea un Leaderboard, añade entradas de puntuación basadas en las entradas que recibas, ordena la tabla de clasificación y muestra los resultados.
La parte elegante de este diseño es que table.sort utiliza automáticamente tu metamétodo __lt para comparar objetos ScoreEntry. ¡Al definir cómo se comparan las entradas entre sí, la ordenación integrada de Lua simplemente funciona con tus objetos personalizados!
Recibirás seis entradas que representan a tres jugadores:
- Nombre del primer jugador
- Puntuación del primer jugador (un número)
- Nombre del segundo jugador
- Puntuación del segundo jugador (un número)
- Nombre del tercer jugador
- Puntuación del tercer jugador (un número)
En tu archivo principal, crea una tabla de clasificación, añade las tres entradas, llama a :sort() y luego llama a :display() para mostrar los resultados ordenados.
Por ejemplo, si las entradas son Alice, 1500, Bob, 2300, Charlie y 1800, la salida debería ser:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsSi las entradas son Zara, 500, Max, 750, Luna y 600, la salida debería ser:
Max: 750 points
Luna: 600 points
Zara: 500 pointsPruébalo tú mismo
-- Archivo principal: Reunir todo
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Leer las entradas para tres jugadores
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: Crear una nueva Leaderboard
-- TODO: Crear objetos ScoreEntry para cada jugador
-- TODO: Añadir las tres entradas al leaderboard
-- TODO: Ordenar el leaderboard
-- TODO: Mostrar los resultados ordenados
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas9Composición y Mixins
Relación "Tiene-Un"DelegaciónMixins simplesAplicación de múltiples MixinsMixins vs. HerenciaResumen - Ensamblaje de robots12Desafíos finales
Repaso - Sistema de inventarioRepaso - Gestor de usuariosRepaso - Seguimiento de puntuaciónVerificación final de OOP