Repaso - Seguimiento de puntuación
Parte de la sección Programación orientada a objetos del Journey de Lua de Coddy. Lección 69 de 70.
Desafío
Fácil¡Vamos a crear un sistema de seguimiento de puntuaciones para una clasificación de videojuegos! Crearás dos clases que trabajan juntas: una representa las puntuaciones individuales y la otra administra la clasificación con capacidades de ordenamiento 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 con el formato"{playerName}: {score} points". La característica clave aquí es el metamétodo__lt:a < bdebe sertruecuando la puntuación deasea menor que la deb, de la misma manera que<funciona con números.Leaderboard.lua: Crea una clase Leaderboard que administre una colección de entradas de puntuación. Tu clasificación necesita::addEntry(entry): agrega un ScoreEntry a la lista interna:sort(): ordena las entradas de la puntuación más alta a la más baja usandotable.sort. Por sí solo,table.sortcoloca primero el valor más pequeño, así que pásale una comparación que invierta el orden:function(a, b) return b < a end. Esa comparación sigue usando tu__lt.:display(): imprime la información de cada entrada, una por línea
main.lua: ¡Júntalo todo! Crea una clasificación, agrega las entradas de puntuación según los datos de entrada que recibas, ordena la clasificación y muestra los resultados.
Comparar dos entradas con < llama a tu metamétodo __lt, así que table.sort puede ordenar los objetos ScoreEntry. Haz que __lt signifique «menor que» e invierte el orden en la llamada de ordenamiento: si __lt significara «mayor que», todas las comparaciones con < entre dos entradas en cualquier parte del programa se interpretarían al revés.
Recibirás seis datos de entrada 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 clasificación, agrega las tres entradas, llama a :sort() y luego llama a :display() para mostrar los resultados ordenados.
Por ejemplo, si los datos de entrada son Alice, 1500, Bob, 2300, Charlie y 1800, el resultado debería ser:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsSi los datos de entrada son Zara, 500, Max, 750, Luna y 600, el resultado debería ser:
Max: 750 points
Luna: 600 points
Zara: 500 pointsPruébalo tú mismo
-- Archivo principal: reúne todo
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Lee los datos de entrada de 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: Crea un nuevo Leaderboard
-- TODO: Crea objetos ScoreEntry para cada jugador
-- TODO: Añade las tres entradas al Leaderboard
-- TODO: Ordena el Leaderboard
-- TODO: Muestra los resultados ordenados
Todas las lecciones de Programación orientada a objetos
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 OOPPractica por tu cuenta: Compilador de Lua online