Повторение: Трекер счета
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 69 из 70.
Задание
ЛегкоДавайте создадим систему отслеживания результатов для игрового leaderboard! Вы создадите два класса, которые работают вместе: один представляет отдельные записи о результатах, а другой управляет leaderboard с возможностями сортировки, реализованными с помощью перегрузки операторов.
Вы организуете код в трёх файлах:
ScoreEntry.lua: Создайте класс ScoreEntry, представляющий результат одного игрока. Каждая запись содержитplayerNameиscore. Включите method:getInfo(), который возвращает строку в формате"{playerName}: {score} points". Ключевая особенность здесь — реализация metamethod__lt, но помните: для descending order (сначала highest результаты) ваше сравнение должно возвращатьtrue, когда результат первой записи greater, чем результат второй.Leaderboard.lua: Создайте класс Leaderboard, управляющий набором записей о результатах. Ваш leaderboard должен включать::addEntry(entry): добавляет ScoreEntry во внутренний список:sort(): сортирует entries от highest к lowest результату с помощьюtable.sort:display(): выводит info для каждой записи, по одной на line
main.lua: Объедините всё вместе! Создайте Leaderboard, добавьте записи о результатах на основе полученных inputs, отсортируйте leaderboard и отобразите результаты.
Элегантность этого дизайна заключается в том, что table.sort automatically использует ваш __lt metamethod для сравнения объектов ScoreEntry. Определив, как записи сравниваются друг с другом, встроенная сортировка Lua просто работает с вашими пользовательскими объектами!
Вы получите шесть inputs, представляющих трёх игроков:
- Имя first игрока
- Результат first игрока (число)
- Имя second игрока
- Результат second игрока (число)
- Имя third игрока
- Результат third игрока (число)
В вашем основном файле создайте leaderboard, добавьте все три entries, вызовите :sort(), затем вызовите :display(), чтобы показать отсортированные результаты.
Например, если inputs — это Alice, 1500, Bob, 2300, Charlie и 1800, вывод должен быть таким:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsЕсли inputs — это Zara, 500, Max, 750, Luna и 600, вывод должен быть таким:
Max: 750 points
Luna: 600 points
Zara: 500 pointsПопробуйте сами
-- Основной файл: Объединить всё вместе
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Считать входные данные для трёх игроков
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: Создать новый Leaderboard
-- TODO: Создать объекты ScoreEntry для каждого игрока
-- TODO: Добавить все три записи в leaderboard
-- TODO: Отсортировать leaderboard
-- TODO: Отобразить отсортированные результаты
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур9Композиция и примеси
Отношение "Has-A"ДелегированиеПростые примесиПрименение нескольких примесейПримеси против наследованияИтоги — Сборка робота12Финальные испытания
Повторение: Система инвентаряПовторение: Менеджер пользователейПовторение: Трекер счетаИтоговая проверка ООППотренируйтесь самостоятельно: Онлайн-компилятор Lua