Mit dem Haustier spielen
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 21 von 61.
Aufgabe
EinfachDein Haustier ist gefüttert und glücklich: Jetzt wollen wir ihm etwas Bewegung geben! In diesem Schritt fügst du eine play-Methode hinzu, mit der du mit deinem virtuellen Begleiter interagieren kannst.
Das Spielen mit deinem Haustier sollte Energie kosten, es aber auch hungriger machen. Wenn dein Haustier spielt, nimmt seine energy um 20 ab und sein hunger nimmt um 15 zu. Die Energie sollte jedoch niemals unter 0 fallen und der Hunger niemals über 100 steigen.
Außerdem benötigst du eine energy-Getter-Methode, um zu prüfen, wie müde dein Haustier nach dem Spielen ist.
Lies in deiner main.rs den Namen des Haustiers sowie die anfänglichen Energie- und Hungerwerte ein. Nachdem du dein Haustier eingerichtet hast, rufe play einmal auf und gib sowohl den Energie- als auch den Hungerwert aus.
Die play-Methode sollte eine Nachricht ausgeben, die zeigt, dass dein Haustier Spaß hatte:
{name} had fun playing!Anschließend sollte deine Hauptdatei die Werte anzeigen:
Energy: {energy_level}
Hunger: {hunger_level}Wenn die Eingabe beispielsweise lautet:
Buddy
50
30
Buddy had fun playing!
Energy: 30
Hunger: 45Wenn die Energie bei 10 beginnt, würde das Spielen sie auf 0 reduzieren (nicht auf einen negativen Wert). Wenn der Hunger bei 90 beginnt, würde das Spielen ihn auf 100 begrenzen.
Du musst zusätzlich zu deinem bestehenden set_energy eine set_hunger-Methode hinzufügen, um beide Werte für Tests zu initialisieren.
Probier es selbst
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());
}Alle Lektionen in Objektorientierte Programmierung
1Methoden und Verhalten
Einführung in ImplementierungsblöckeDer Self-ParameterVeränderliche MethodenAssoziierte FunktionenMehrere ImplementierungsblöckeMethod ChainingRückblick – Rechteck-Aktionen4Projekt: Virtuelles Haustier
Das Haustier definierenDas Haustier füttern7Standard-Traits
Das Debug-TraitDas Display-TraitClone und CopyGleichheits-TraitsZusammenfassung – Druckbarer Punkt10Projekt: Dokumentensystem
Das Draw-TraitText-Komponente2Kapselung und Module
Grundlagen der ModuleDas Public-SchlüsselwortPrivate FelderGetterSetterWiederholung – Sicherer Tresor5Generics
Generische StructsGenerische MethodenMehrere generische TypenGenerische FunktionenZusammenfassung - Koordinatenpunkt8Traits als Einschränkungen
Syntax für Trait BoundsMehrfache BoundsDie Where-KlauselTypen mit Traits zurückgebenRückblick – Generischer Drucker11Design Patterns in Rust
Newtype-PatternKompositionDas Drop-TraitFrom und IntoZusammenfassung – Smart Pointer Mock3Fortgeschrittene Enums
Enums mit DatenMethoden für EnumsMatching von DatenvariantenDas Option-Enum erneut betrachtetZusammenfassung – Shape-Enum6Definition von Traits
Was ist ein Trait?Traits implementierenStandardimplementierungenStandardimplementierungen überschreibenTraits mit ParameternZusammenfassung – Media PlayerÜbe selbstständig: Online-Rust-Compiler