Wiederholung - Score-Tracker
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 69 von 70.
Aufgabe
EinfachErstellen wir ein System zur Verfolgung von Punkteständen für eine Gaming-Rangliste! Du erstellst zwei Klassen, die zusammenarbeiten: eine, die einzelne Punkteeinträge darstellt, und eine weitere, die die Rangliste mit Sortierfunktionen verwaltet, die durch Operatorüberladung ermöglicht werden.
Du organisierst deinen Code über drei Dateien:
ScoreEntry.lua: Erstelle eine ScoreEntry-Klasse, die den Punktestand eines einzelnen Spielers darstellt. Jeder Eintrag hat einenplayerNameund einenscore. Füge eine:getInfo()-Methode hinzu, die eine Zeichenkette im Format"{playerName}: {score} points"zurückgibt. Das wichtigste Merkmal ist hier die Implementierung der__lt-Metamethode. Denke jedoch daran: Für eine absteigende Reihenfolge (höchste Punktestände zuerst) sollte dein Vergleichtruezurückgeben, wenn der Punktestand des ersten Eintrags größer als der des zweiten ist.Leaderboard.lua: Erstelle eine Leaderboard-Klasse, die eine Sammlung von Punkteeinträgen verwaltet. Deine Rangliste benötigt::addEntry(entry): fügt der internen Liste einen ScoreEntry hinzu:sort(): sortiert die Einträge mithilfe vontable.sortvom höchsten zum niedrigsten Punktestand:display(): gibt die Informationen für jeden Eintrag aus, einen pro Zeile
main.lua: Führe alles zusammen! Erstelle eine Leaderboard-Klasse, füge anhand der erhaltenen Eingaben Punkteeinträge hinzu, sortiere die Rangliste und zeige die Ergebnisse an.
Das Elegante an diesem Entwurf ist, dass table.sort automatisch deine __lt-Metamethode verwendet, um ScoreEntry-Objekte zu vergleichen. Indem du festlegst, wie Einträge miteinander verglichen werden, funktioniert Luas integrierte Sortierung einfach mit deinen benutzerdefinierten Objekten!
Du erhältst sechs Eingaben, die drei Spieler darstellen:
- Name des ersten Spielers
- Punktestand des ersten Spielers (eine Zahl)
- Name des zweiten Spielers
- Punktestand des zweiten Spielers (eine Zahl)
- Name des dritten Spielers
- Punktestand des dritten Spielers (eine Zahl)
Erstelle in deiner Hauptdatei eine Rangliste, füge alle drei Einträge hinzu, rufe :sort() auf und rufe anschließend :display() auf, um die sortierten Ergebnisse anzuzeigen.
Wenn die Eingaben beispielsweise Alice, 1500, Bob, 2300, Charlie und 1800 lauten, sollte die Ausgabe wie folgt aussehen:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsWenn die Eingaben Zara, 500, Max, 750, Luna und 600 lauten, sollte die Ausgabe wie folgt aussehen:
Max: 750 points
Luna: 600 points
Zara: 500 pointsProbier es selbst
-- Hauptdatei: Alles zusammenführen
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Eingaben für drei Spieler lesen
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: Erstelle ein neues Leaderboard
-- TODO: Erstelle ScoreEntry-Objekte für jeden Spieler
-- TODO: Füge alle drei Einträge zum Leaderboard hinzu
-- TODO: Sortiere das Leaderboard
-- TODO: Zeige die sortierten Ergebnisse an
Alle Lektionen in Objektorientierte Programmierung
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-KlasseKreis-KlasseUmfang-MethodeFormen-SammlungGesamtflächeFormen filtern2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-CheckÜbe selbstständig: Online-Lua-Compiler