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