Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

¡Construyamos un sistema de seguimiento de puntuaciones para una clasificación de videojuegos! Crearás dos clases que trabajan juntas: una que representa entradas de puntuación individuales y otra que gestiona la clasificación con capacidades de ordenación gracias a 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 un playerName y una score. Incluye un método :getInfo() que devuelva una cadena con el formato "{playerName}: {score} points". La característica clave aquí es implementar el método metamágico __lt, pero recuerda que, para ordenar de forma descendente (las puntuaciones más altas primero), tu comparación debe devolver true cuando la puntuación de la primera entrada sea mayor que la de la segunda.
  • Leaderboard.lua: crea una clase Leaderboard que gestione una colección de entradas de puntuación. Tu clasificación necesita:
    • :addEntry(entry): añade un ScoreEntry a la lista interna
    • :sort(): ordena las entradas de la puntuación más alta a la más baja usando table.sort
    • :display(): muestra la información de cada entrada, una por línea
  • main.lua: ¡reúne todo! Crea un Leaderboard, añade las entradas de puntuación basadas en las entradas que recibas, ordena la clasificación y muestra los resultados.

La parte elegante de este diseño es que table.sort utiliza automáticamente tu método metamágico __lt para comparar objetos ScoreEntry. Al definir cómo se comparan las entradas entre sí, ¡la ordenación integrada de Lua funciona directamente con tus objetos personalizados!

Recibirás seis entradas que representan a tres jugadores:

  1. Nombre del primer jugador
  2. Puntuación del primer jugador (un número)
  3. Nombre del segundo jugador
  4. Puntuación del segundo jugador (un número)
  5. Nombre del tercer jugador
  6. Puntuación del tercer jugador (un número)

En tu archivo principal, crea una clasificación, añade las tres entradas, llama a :sort() y después llama a :display() para mostrar los resultados ordenados.

Por ejemplo, si las entradas son Alice, 1500, Bob, 2300, Charlie y 1800, el resultado debería ser:

Bob: 2300 points
Charlie: 1800 points
Alice: 1500 points

Si las entradas son Zara, 500, Max, 750, Luna y 600, el resultado debería ser:

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

Pruébalo tú mismo

-- Archivo principal: Reúne todo
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')

-- Lee 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: 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

Practica por tu cuenta: Compilador de Lua online