Zabawa ze zwierzątkiem
Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 21 z 61.
Wyzwanie
ŁatwyTwój zwierzak jest najedzony i szczęśliwy — teraz zapewnijmy mu trochę ruchu! W tym kroku dodasz metodę play, która pozwoli ci wchodzić w interakcje z twoim wirtualnym towarzyszem.
Zabawa ze zwierzakiem powinna kosztować go energię, ale także zwiększać jego głód. Gdy zwierzak się bawi, jego energy zmniejsza się o 20, a jego hunger zwiększa się o 15. Energia nie powinna jednak nigdy spaść poniżej 0, a głód nigdy nie powinien przekroczyć 100.
Potrzebujesz też metody pobierającej energy, aby sprawdzić, jak bardzo twój zwierzak zmęczył się podczas zabawy.
W pliku main.rs wczytaj imię zwierzaka oraz początkowe wartości energii i głodu. Po skonfigurowaniu zwierzaka wywołaj raz metodę play i wyświetl poziomy energii i głodu.
Metoda play powinna wyświetlić komunikat informujący, że twój zwierzak dobrze się bawił:
{name} had fun playing!Następnie plik główny powinien wyświetlić statystyki:
Energy: {energy_level}
Hunger: {hunger_level}Na przykład, jeśli dane wejściowe to:
Buddy
50
30Wynik powinien być następujący:
Buddy had fun playing!
Energy: 30
Hunger: 45Jeśli początkowa energia wynosi 10, zabawa zmniejszy ją do 0 (nie do wartości ujemnej). Jeśli początkowy głód wynosi 90, podczas zabawy zostanie ograniczony do 100.
Dodaj metodę set_energy obok istniejącej metody set_hunger, aby zainicjować obie wartości na potrzeby testowania.
Spróbuj swoich sił
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());
}Wszystkie lekcje w sekcji Programowanie obiektowe
1Metody i zachowanie
Wprowadzenie do bloków implementacjiParametr selfMetody modyfikująceFunkcje powiązaneWiele bloków implementacjiŁańcuchowe wywoływanie metodPowtórzenie — działania na prostokącie4Projekt: Wirtualne zwierzątko
Definiowanie zwierzątkaKarmienie zwierzątka7Standardowe cechy
Cecha DebugCecha DisplayClone i CopyCechy równościPowtórka – punkt do wydrukowania10Projekt: System dokumentów
Trait DrawKomponent tekstowy2Hermetyzacja i moduły
Podstawy modułówSłowo kluczowe publicPola prywatneGetterySetteryPodsumowanie — bezpieczna skrytka5Typy generyczne
Struktury generyczneMetody generyczneWiele typów generycznychFunkcje generycznePodsumowanie – punkt współrzędnych8Cechy jako ograniczenia
Składnia ograniczeń cechWiele ograniczeńKlauzula whereZwracanie typów z użyciem cechPodsumowanie — generyczna drukarka11Wzorce projektowe w Rust
Wzorzec NewtypeKompozycjaTrait DropFrom i IntoPodsumowanie — atrapowy inteligentny wskaźnik3Zaawansowane typy wyliczeniowe
Typy wyliczeniowe z danymiMetody typów wyliczeniowychDopasowywanie wariantów danychTyp wyliczeniowy Option — powtórzeniePodsumowanie — typ wyliczeniowy Shape6Definiowanie cech
Czym jest cecha?Implementowanie cechImplementacje domyślneNadpisywanie wartości domyślnychCechy z parametramiPowtórzenie — odtwarzacz multimedialnyPoćwicz samodzielnie: Kompilator Rust online