Финальное взаимодействие
Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 23 из 61.
Задание
ЛегкоПоздравляем с созданием Virtual Pet! На этом последнем шаге ты объединишь всё вместе, смоделировав полный сеанс взаимодействия со своим pet, чтобы каждый написанный тобой метод работал одновременно с остальными.
Модуль pet.rs предоставлен тебе полностью: new, геттеры, set_energy, set_hunger, feed, play и status. Тебе нужно написать только main.rs.
Ты получишь три входных значения — те же три, что и на предыдущих шагах:
- имя pet
- количество энергии, с которым начинает pet
- уровень голода, с которым начинает pet
В main.rs выполни следующую последовательность:
- Создай pet с указанным именем, затем установи его энергию и голод на основе входных данных
- Выведи отчёт о состоянии
- Поиграй со своим pet дважды
- Покорми своего pet один раз
- Выведи строку-разделитель
--- After Activities --- - Снова выведи отчёт о состоянии
Помни, как изменяются характеристики: игра отнимает 20 энергии и добавляет 15 голода, кормление уменьшает голод на 30, энергия никогда не опускается ниже 0, а голод никогда не поднимается выше 100. Настроение равно happy, когда энергия равна 50 или больше, а голод равен 50 или меньше; в противном случае настроение равно tired, поэтому pet может начать сеанс в хорошем настроении, а закончить его уставшим.
Например, при входных данных Luna, 50 и 50:
--- Status Report ---
Name: Luna
Energy: 50
Hunger: 50
Mood: happy
Luna had fun playing!
Luna had fun playing!
Luna enjoyed the meal!
--- After Activities ---
--- Status Report ---
Name: Luna
Energy: 10
Hunger: 50
Mood: tiredВ этом последнем испытании показана полностью созданная тобой система Virtual Pet: модуль с приватными полями, геттерами, сеттерами и методами, которые работают вместе в рамках одного интерактивного сеанса.
Попробуйте сами
mod pet;
use pet::Pet;
fn main() {
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut energy_input = String::new();
std::io::stdin().read_line(&mut energy_input).expect("Failed to read line");
let initial_energy: u32 = energy_input.trim().parse().expect("Failed to parse energy");
let mut hunger_input = String::new();
std::io::stdin().read_line(&mut hunger_input).expect("Failed to read line");
let initial_hunger: u32 = hunger_input.trim().parse().expect("Failed to parse hunger");
// TODO: создайте питомца и установите его energy и hunger из ввода
// TODO: print the first status report
// TODO: play дважды, затем feed один раз
// TODO: print the separator "--- After Activities ---"
// TODO: print the final status report
}
Все уроки раздела Объектно-ориентированное программирование
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media PlayerПотренируйтесь самостоятельно: Онлайн-компилятор Rust