Игры с питомцем
Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 21 из 61.
Задание
ЛегкоВаш питомец накормлен и счастлив: теперь давайте немного потренируем его! На этом шаге вы добавите метод play, который позволит вам взаимодействовать с вашим виртуальным компаньоном.
Игра с питомцем должна расходовать энергию, но также усиливать его голод. Когда ваш питомец играет, его energy уменьшается на 20, а hunger увеличивается на 15. Однако энергия не должна опускаться ниже 0, а голод не должен превышать 100.
Вам также понадобится метод-геттер energy, чтобы проверять, насколько устал ваш питомец после игры.
В вашем файле main.rs считайте имя питомца, а также начальные значения энергии и голода. Настроив питомца, один раз вызовите play и выведите оба уровня — энергии и голода.
Метод play должен выводить сообщение о том, что ваш питомец весело провёл время:
{name} had fun playing!Затем ваш основной файл должен вывести статистику:
Energy: {energy_level}
Hunger: {hunger_level}Например, если ввод имеет вид:
Buddy
50
30Вывод должен быть таким:
Buddy had fun playing!
Energy: 30
Hunger: 45Если энергия начинается со значения 10, игра уменьшит её до 0 (но не до отрицательного значения). Если голод начинается со значения 90, игра ограничит его значением 100.
Вам нужно добавить метод set_energy рядом с уже существующим set_hunger, чтобы инициализировать оба значения для тестирования.
Попробуйте сами
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.play();
println!("Energy: {}", my_pet.energy());
println!("Hunger: {}", my_pet.hunger());
}Все уроки раздела Объектно-ориентированное программирование
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media PlayerПотренируйтесь самостоятельно: Онлайн-компилятор Rust