Menu
Coddy logo textTech

Récapitulatif - Suivi des scores

Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 69 sur 70.

challenge icon

Défi

Facile

Construisons un système de suivi des scores pour un classement de jeu ! Vous allez créer deux classes qui fonctionnent ensemble : l'une représentant les entrées de score individuelles, et l'autre gérant le classement avec des capacités de tri alimentées par la surcharge d'opérateurs.

Vous organiserez votre code sur trois fichiers :

  • ScoreEntry.lua : Créez une classe ScoreEntry qui représente le score d'un seul joueur. Chaque entrée possède un playerName et un score. Incluez une méthode :getInfo() qui renvoie une chaîne de caractères au format "{playerName}: {score} points". La fonctionnalité clé ici est l'implémentation de la métaméthode __lt — mais n'oubliez pas que pour un ordre décroissant (les scores les plus élevés en premier), votre comparaison doit renvoyer true lorsque le score de la première entrée est supérieur à celui de la seconde.
  • Leaderboard.lua : Construisez une classe Leaderboard qui gère une collection d'entrées de score. Votre classement a besoin de :
    • :addEntry(entry) — ajoute un ScoreEntry à la liste interne
    • :sort() — trie les entrées du score le plus élevé au plus bas en utilisant table.sort
    • :display() — affiche les informations de chaque entrée, une par ligne
  • main.lua : Rassemblez le tout ! Créez un Leaderboard, ajoutez des entrées de score basées sur les entrées que vous recevez, triez le classement et affichez les résultats.

L'aspect élégant de cette conception est que table.sort utilise automatiquement votre métaméthode __lt pour comparer les objets ScoreEntry. En définissant comment les entrées se comparent entre elles, le tri intégré de Lua fonctionne tout simplement avec vos objets personnalisés !

Vous recevrez six entrées représentant trois joueurs :

  1. Nom du premier joueur
  2. Score du premier joueur (un nombre)
  3. Nom du deuxième joueur
  4. Score du deuxième joueur (un nombre)
  5. Nom du troisième joueur
  6. Score du troisième joueur (un nombre)

Dans votre fichier principal, créez un classement, ajoutez les trois entrées, appelez :sort(), puis appelez :display() pour afficher les résultats triés.

Par exemple, si les entrées sont Alice, 1500, Bob, 2300, Charlie, et 1800, la sortie devrait être :

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

Si les entrées sont Zara, 500, Max, 750, Luna, et 600, la sortie devrait être :

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

Essayez vous-même

-- Fichier principal : Rassembler tous les éléments
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')

-- Lire les entrées pour trois joueurs
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: Créer un nouveau Leaderboard

-- TODO: Créer des objets ScoreEntry pour chaque joueur

-- TODO: Ajouter les trois entrées au classement

-- TODO: Trier le classement

-- TODO: Afficher les résultats triés

Toutes les leçons de Object Oriented Programming