Повторение: Трекер счета
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 69 из 70.
Задание
ЛегкоДавайте создадим систему отслеживания очков для игровой таблицы лидеров! Вы создадите два класса, которые работают вместе: один представляет отдельные записи очков, а другой управляет таблицей лидеров с возможностью сортировки, реализованной с помощью перегрузки операторов.
Вы организуете свой код в трех файлах:
ScoreEntry.lua: Создайте класс ScoreEntry, который представляет результат одного игрока. Каждая запись имеетplayerNameиscore. Включите метод:getInfo(), который возвращает строку в формате"{playerName}: {score} points". Ключевой особенностью здесь является реализация метаметода__lt— но помните, что для сортировки по убыванию (сначала самые высокие баллы) ваше сравнение должно возвращатьtrue, когда балл первой записи больше, чем у второй.Leaderboard.lua: Создайте класс Leaderboard, который управляет коллекцией записей очков. Вашей таблице лидеров необходимы::addEntry(entry)— добавляет ScoreEntry во внутренний список:sort()— сортирует записи от самого высокого до самого низкого балла с помощьюtable.sort:display()— выводит информацию для каждой записи, по одной на строку
main.lua: Соберите все вместе! Создайте Leaderboard, добавьте записи очков на основе полученных входных данных, отсортируйте таблицу лидеров и отобразите результаты.
Элегантность этого дизайна заключается в том, что table.sort автоматически использует ваш метаметод __lt для сравнения объектов ScoreEntry. Определив, как записи сравниваются друг с другом, встроенная сортировка Lua просто работает с вашими пользовательскими объектами!
Вы получите шесть входных данных, представляющих трех игроков:
- Имя первого игрока
- Баллы первого игрока (число)
- Имя второго игрока
- Баллы второго игрока (число)
- Имя третьего игрока
- Баллы третьего игрока (число)
В вашем основном файле создайте таблицу лидеров, добавьте все три записи, вызовите :sort(), а затем вызовите :display(), чтобы показать отсортированные результаты.
Например, если входные данные — Alice, 1500, Bob, 2300, Charlie и 1800, вывод должен быть следующим:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsЕсли входные данные — 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: Создать новую таблицу лидеров
-- TODO: Создать объекты ScoreEntry для каждого игрока
-- TODO: Добавить все три записи в таблицу лидеров
-- TODO: Отсортировать таблицу лидеров
-- TODO: Отобразить отсортированные результаты
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур9Композиция и примеси
Отношение "Has-A"ДелегированиеПростые примесиПрименение нескольких примесейПримеси против наследованияИтоги — Сборка робота12Финальные испытания
Повторение: Система инвентаряПовторение: Менеджер пользователейПовторение: Трекер счетаИтоговая проверка ООП