Powtórka — śledzenie wyników
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 69 z 70.
Wyzwanie
ŁatwyZbudujmy system śledzenia wyników dla rankingu graczy! Utworzysz dwie współpracujące ze sobą klasy: jedną reprezentującą pojedyncze wpisy z wynikami, a drugą zarządzającą rankingiem i umożliwiającą sortowanie dzięki przeciążaniu operatorów.
Podzielisz swój kod na trzy pliki:
ScoreEntry.lua: Utwórz klasę ScoreEntry reprezentującą wynik pojedynczego gracza. Każdy wpis maplayerNameiscore. Dodaj metodę:getInfo(), która zwraca ciąg znaków w formacie"{playerName}: {score} points". Kluczową funkcją jest tu implementacja metody metatabeli__lt. Pamiętaj jednak, że aby uzyskać kolejność malejącą (najwyższe wyniki na początku), porównanie powinno zwracaćtrue, gdy wynik pierwszego wpisu jest większy niż wynik drugiego.Leaderboard.lua: Utwórz klasę Leaderboard, która zarządza kolekcją wpisów z wynikami. Twój ranking powinien obsługiwać::addEntry(entry): dodaje ScoreEntry do wewnętrznej listy:sort(): sortuje wpisy od najwyższego do najniższego wyniku za pomocątable.sort:display(): wyświetla informacje o każdym wpisie, po jednym w wierszu
main.lua: Połącz wszystko w całość! Utwórz ranking, dodaj wpisy z wynikami na podstawie otrzymanych danych wejściowych, posortuj ranking i wyświetl wyniki.
Elegancką cechą tego projektu jest to, że table.sort automatycznie korzysta z metody metatabeli __lt, aby porównywać obiekty ScoreEntry. Określ, jak wpisy mają być porównywane ze sobą, a wbudowane sortowanie w Lua będzie działać z Twoimi niestandardowymi obiektami!
Otrzymasz sześć danych wejściowych reprezentujących trzech graczy:
- Imię pierwszego gracza
- Wynik pierwszego gracza (liczba)
- Imię drugiego gracza
- Wynik drugiego gracza (liczba)
- Imię trzeciego gracza
- Wynik trzeciego gracza (liczba)
W pliku głównym utwórz ranking, dodaj wszystkie trzy wpisy, wywołaj :sort(), a następnie wywołaj :display(), aby wyświetlić posortowane wyniki.
Na przykład, jeśli danymi wejściowymi są Alice, 1500, Bob, 2300, Charlie i 1800, wynikiem powinno być:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsJeśli danymi wejściowymi są Zara, 500, Max, 750, Luna i 600, wynikiem powinno być:
Max: 750 points
Luna: 600 points
Zara: 500 pointsSpróbuj swoich sił
-- Główny plik: Połącz wszystko w całość
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Wczytaj dane trzech graczy
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: Utwórz nowy obiekt Leaderboard
-- TODO: Utwórz obiekty ScoreEntry dla każdego gracza
-- TODO: Dodaj wszystkie trzy wpisy do rankingu
-- TODO: Posortuj ranking
-- TODO: Wyświetl posortowane wyniki
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtów9Kompozycja i mixiny
Relacja Has-ADelegowanieProste mixinyStosowanie wielu mixinówMixiny a dziedziczeniePodsumowanie — składanie robota12Końcowe wyzwania
Powtórka — system magazynowyPowtórka — menedżer użytkownikówPowtórka — śledzenie wynikówKońcowy sprawdzian z OOPPoćwicz samodzielnie: Kompilator Lua online