Финальное взаимодействие
Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 23 из 61.
Задание
ЛегкоПоздравляем с созданием вашего виртуального питомца! На этом последнем этапе вы объедините все части воедино, симулируя полный сеанс взаимодействия с вашим питомцем. Именно здесь все ваши методы начинают работать в гармонии!
В вашем модуле питомца уже есть все необходимое: кормление, игры и отчеты о состоянии. Теперь вы создадите симуляцию, которая покажет один день из жизни вашего виртуального компаньона.
В файле main.rs вы прочитаете имя вашего питомца, а затем выполните последовательность взаимодействий:
- Создайте нового питомца с заданным именем
- Отобразите начальный отчет о состоянии (status report)
- Поиграйте с питомцем дважды
- Покормите питомца один раз
- Отобразите финальный отчет о состоянии
Между двумя отчетами о состоянии выведите разделительную линию, чтобы показать переход:
--- After Activities ---Например, если на вход подается:
BuddyВывод должен быть следующим:
--- Status Report ---
Name: Buddy
Energy: 100
Hunger: 0
Mood: happy
Buddy had fun playing!
Buddy had fun playing!
Buddy enjoyed the meal!
--- After Activities ---
--- Status Report ---
Name: Buddy
Energy: 60
Hunger: 0
Mood: happyВспомните, как меняются показатели: игра каждый раз стоит 20 единиц энергии и добавляет 15 единиц голода, а кормление уменьшает голод на 30. После двух игровых сессий и одного кормления энергия вашего питомца упадет со 100 до 60, а голод изменится с 0 до 30, а затем снова до 0.
Это финальное испытание демонстрирует созданную вами полную систему 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");
let mut my_pet = Pet::new(name);
my_pet.set_energy(initial_energy);
my_pet.set_hunger(initial_hunger);
my_pet.status();
}
Все уроки раздела Object Oriented Programming
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media Player