Menu
Coddy logo textTech

Récapitulatif - Suivi des scores

Fait partie de la section Programmation orientée objet 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 vidéo ! Tu vas créer deux classes qui fonctionnent ensemble : l'une représentant des entrées de score individuelles, et l'autre gérant le classement avec des capacités de tri reposant sur la surcharge d'opérateurs.

Tu organiseras ton code sur trois fichiers :

  • ScoreEntry.lua : crée une classe ScoreEntry qui représente le score d'un joueur. Chaque entrée possède un playerName et un score. Inclus une méthode :getInfo() qui renvoie une chaîne au format "{playerName}: {score} points". La fonctionnalité essentielle consiste ici à implémenter la méthode métamétaméthode __lt, mais n'oublie pas que, pour un ordre décroissant (scores les plus élevés en premier), ta comparaison doit renvoyer true lorsque le score de la première entrée est supérieur à celui de la seconde.
  • Leaderboard.lua : construis une classe Leaderboard qui gère une collection d'entrées de score. Ton classement doit inclure :
    • :addEntry(entry) : ajoute un ScoreEntry à la liste interne
    • :sort() : trie les entrées du score le plus élevé au plus faible à l'aide de table.sort
    • :display() : affiche les informations de chaque entrée, une par ligne
  • main.lua : assemble tout ! Crée un Leaderboard, ajoute les entrées de score correspondant aux entrées reçues, trie le classement, puis affiche les résultats.

La partie élégante de cette conception est que table.sort utilise automatiquement ta méthode métamétaméthode __lt pour comparer les objets ScoreEntry. En définissant la manière dont les entrées se comparent entre elles, le tri intégré de Lua fonctionne simplement avec tes objets personnalisés !

Tu recevras 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 ton fichier principal, crée un classement, ajoute les trois entrées, appelle :sort(), puis appelle :display() pour afficher les résultats triés.

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

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

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

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

Essayez vous-même

-- Fichier principal : Rassembler tout
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 leaderboard

-- TODO: Trier le leaderboard

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

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Lua en ligne