Wiederholung - Score-Tracker
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 69 von 70.
Aufgabe
EinfachLass uns ein Punktesystem für eine Gaming-Bestenliste erstellen! Du wirst zwei Klassen erstellen, die zusammenarbeiten – eine, die einzelne Punkteinträge repräsentiert, und eine andere, welche die Bestenliste verwaltet und Sortierfunktionen nutzt, die durch Operator-Überladung ermöglicht werden.
Du wirst deinen Code auf drei Dateien verteilen:
ScoreEntry.lua: Erstelle eine ScoreEntry-Klasse, die den Punktestand eines einzelnen Spielers repräsentiert. Jeder Eintrag hat einenplayerNameund einenscore. Füge eine:getInfo()-Methode hinzu, die einen String im Format"{playerName}: {score} points"zurückgibt. Das Hauptmerkmal hier ist die Implementierung der__lt-Metamethode – aber denke daran, für eine absteigende Sortierung (höchste Punktzahlen zuerst) sollte dein Vergleichtruezurückgeben, wenn die Punktzahl des ersten Eintrags größer ist als die des zweiten.Leaderboard.lua: Erstelle eine Leaderboard-Klasse, die eine Sammlung von Punkteinträgen verwaltet. Deine Bestenliste benötigt::addEntry(entry)— fügt einen ScoreEntry zur internen Liste hinzu:sort()— sortiert die Einträge von der höchsten zur niedrigsten Punktzahl unter Verwendung vontable.sort:display()— gibt die Informationen für jeden Eintrag aus, eine pro Zeile
main.lua: Bring alles zusammen! Erstelle ein Leaderboard, füge Punkteinträge basierend auf den erhaltenen Eingaben hinzu, sortiere die Bestenliste und zeige die Ergebnisse an.
Der elegante Teil dieses Designs ist, dass table.sort automatisch deine __lt-Metamethode verwendet, um ScoreEntry-Objekte zu vergleichen. Indem du definierst, wie Einträge miteinander verglichen werden, funktioniert Luas integrierte Sortierung einfach mit deinen benutzerdefinierten Objekten!
Du wirst sechs Eingaben erhalten, die drei Spieler repräsentieren:
- Name des ersten Spielers
- Punktzahl des ersten Spielers (eine Zahl)
- Name des zweiten Spielers
- Punktzahl des zweiten Spielers (eine Zahl)
- Name des dritten Spielers
- Punktzahl des dritten Spielers (eine Zahl)
Erstelle in deiner Hauptdatei eine Bestenliste, füge alle drei Einträge hinzu, rufe :sort() auf und rufe dann :display() auf, um die sortierten Ergebnisse anzuzeigen.
Wenn die Eingaben zum Beispiel Alice, 1500, Bob, 2300, Charlie und 1800 sind, sollte die Ausgabe wie folgt aussehen:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsWenn die Eingaben Zara, 500, Max, 750, Luna und 600 sind, 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: Ein neues Leaderboard erstellen
-- TODO: ScoreEntry-Objekte für jeden Spieler erstellen
-- TODO: Alle drei Einträge zum Leaderboard hinzufügen
-- TODO: Das Leaderboard sortieren
-- TODO: Die sortierten Ergebnisse anzeigen
Alle Lektionen in Object Oriented Programming
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-Klasse2Klassen-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