Menu
Coddy logo textTech

Wiederholung - Score-Tracker

Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 69 von 70.

challenge icon

Aufgabe

Einfach

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

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

Wenn die Eingaben Zara, 500, Max, 750, Luna und 600 sind, 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: 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