Récapitulatif - Suivi des scores
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 69 sur 70.
Défi
FacileCréons 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 les scores de chaque joueur, et l’autre gérant le classement avec des capacités de tri reposant sur la surcharge des opérateurs.
Tu vas répartir ton code dans trois fichiers :
ScoreEntry.lua: crée une classe ScoreEntry qui représente le score d’un seul joueur. Chaque entrée possède unplayerNameet unscore. Inclue une méthode:getInfo()qui renvoie une chaîne au format"{playerName}: {score} points". La fonctionnalité clé ici est la métaméthode__lt:a < bdoit êtretruelorsque le score deaest inférieur à celui deb, comme fonctionne<avec les nombres.Leaderboard.lua: crée une classe Leaderboard qui gère une collection d’entrées de score. Ton classement doit comporter ::addEntry(entry): ajoute un ScoreEntry à la liste interne:sort(): trie les entrées du score le plus élevé au plus faible à l’aide detable.sort. Par défaut,table.sortplace le plus petit en premier ; passe-lui donc une comparaison qui inverse l’ordre :function(a, b) return b < a end. Cette comparaison utilise toujours ton__lt.:display(): affiche les informations de chaque entrée, une par ligne
main.lua: rassemble tout ! Crée un Leaderboard, ajoute les entrées de score à partir des données reçues en entrée, trie le classement et affiche les résultats.
Comparer deux entrées avec < appelle ta métaméthode __lt ; ainsi, table.sort peut trier les objets ScoreEntry. Garde à __lt le sens de « inférieur à » et inverse l’ordre dans l’appel de tri : si __lt signifiait « supérieur à », chaque < entre deux entrées, où que ce soit dans le programme, serait interprété à l’envers.
Tu recevras six entrées représentant trois joueurs :
- Le nom du premier joueur
- Le score du premier joueur (un nombre)
- Le nom du deuxième joueur
- Le score du deuxième joueur (un nombre)
- Le nom du troisième joueur
- Le 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 devrait être :
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsSi les entrées sont Zara, 500, Max, 750, Luna et 600, la sortie devrait être :
Max: 750 points
Luna: 600 points
Zara: 500 pointsEssayez vous-même
-- Fichier principal : assembler le tout
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Lire les données saisies 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
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse RectangleClasse CercleMéthode PérimètreCollection de formesAire totaleFiltrer les formes2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formes9Composition et Mixins
Relation 'A un'DélégationMixins simplesAppliquer plusieurs MixinsMixins vs HéritageRécapitulatif - Assemblage de robots12Défis finaux
Récapitulatif - Système d'inventaireRécapitulatif - Gestionnaire d'utilisateursRécapitulatif - Suivi des scoresVérification finale POOEntraînez-vous par vous-même : Compilateur Lua en ligne