Menu
Coddy logo textTech

Wiederholung - Score-Tracker

Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 69 von 70.

challenge icon

Aufgabe

Einfach

Erstellen 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 einen playerName und einen score. 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 Vergleich true zurü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 von table.sort vom 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:

  1. Name des ersten Spielers
  2. Punktestand des ersten Spielers (eine Zahl)
  3. Name des zweiten Spielers
  4. Punktestand des zweiten Spielers (eine Zahl)
  5. Name des dritten Spielers
  6. 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 points

Wenn die Eingaben Zara, 500, Max, 750, Luna und 600 lauten, sollte die Ausgabe wie folgt aussehen:

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

Probier 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

Übe selbstständig: Online-Lua-Compiler