Wiederholung - Score-Tracker
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 69 von 70.
Aufgabe
EinfachErstellen wir ein Punktesystem für eine Gaming-B Bestenliste! Du erstellst zwei Klassen, die zusammenarbeiten: eine, die einzelne Punkteeinträge darstellt, und eine weitere, die die Bestenliste mit Sortierfunktionen verwaltet, die durch Operatorüberladung ermöglicht werden.
Du verteilst deinen Code auf drei Dateien:
ScoreEntry.lua: Erstelle eine ScoreEntry-Klasse, die die Punktzahl eines einzelnen Spielers darstellt. Jeder Eintrag hat einenplayerNameund einenscore. Füge eine:getInfo()-Methode hinzu, die einen String im Format"{playerName}: {score} points"zurückgibt. Das wichtigste Merkmal ist hier die__lt-Metamethode:a < bsolltetruesein, wenn die Punktzahl vonaniedriger ist als die vonb, genauso wie<bei Zahlen funktioniert.Leaderboard.lua: Erstelle eine Leaderboard-Klasse, die eine Sammlung von Punkteeinträgen verwaltet. Deine Bestenliste benötigt::addEntry(entry): fügt der internen Liste einen ScoreEntry hinzu:sort(): sortiert die Einträge mittable.sortvon der höchsten zur niedrigsten Punktzahl. Für sich genommen ordnettable.sortdie kleinsten Werte zuerst an. Übergib ihm daher einen Vergleich, der die Reihenfolge umkehrt:function(a, b) return b < a end. Dieser Vergleich verwendet weiterhin dein__lt.:display(): gibt die Informationen zu jedem Eintrag aus, einen pro Zeile
main.lua: Füge alles zusammen! Erstelle eine Leaderboard, füge anhand der Eingaben, die du erhältst, Punkteeinträge hinzu, sortiere die Bestenliste und zeige die Ergebnisse an.
Der Vergleich zweier Einträge mit < ruft deine __lt-Metamethode auf, sodass table.sort ScoreEntry-Objekte ordnen kann. Lass __lt „kleiner als“ bedeuten und kehre die Reihenfolge im Sortieraufruf um: Wenn __lt „größer als“ bedeuten würde, wäre jeder Vergleich mit < zwischen zwei Einträgen im gesamten Programm verkehrt herum.
Du erhältst sechs Eingaben, die drei Spieler darstellen:
- 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() und anschließend :display() auf, um die sortierten Ergebnisse anzuzeigen.
Wenn die Eingaben beispielsweise Alice, 1500, Bob, 2300, Charlie und 1800 lauten, sollte die Ausgabe folgendermaßen aussehen:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsWenn die Eingaben Zara, 500, Max, 750, Luna und 600 lauten, sollte die Ausgabe folgendermaßen 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 einlesen
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 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