Jugar con la mascota
Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 21 de 61.
Desafío
FácilTu mascota está alimentada y feliz—¡ahora vamos a darle algo de ejercicio! En este paso, añadirás un método play que te permitirá interactuar con tu compañero virtual.
Jugar con tu mascota debería costar energía pero también darle más hambre. Cuando tu mascota juega, su energy disminuye en 20 y su hunger aumenta en 15. Sin embargo, la energía nunca debe bajar de 0, y el hambre nunca debe exceder 100.
También necesitarás un método getter energy para comprobar qué tan cansada está tu mascota después de jugar.
En tu main.rs, lee el nombre de la mascota junto con los valores iniciales de energía y hambre. Después de configurar a tu mascota, llama a play una vez y muestra tanto los niveles de energía como los de hambre.
El método play debe imprimir un mensaje mostrando que tu mascota se divirtió:
{name} had fun playing!Luego, tu archivo principal debe mostrar las estadísticas:
Energy: {energy_level}
Hunger: {hunger_level}Por ejemplo, si la entrada es:
Buddy
50
30La salida debería ser:
Buddy had fun playing!
Energy: 30
Hunger: 45Si la energía comienza en 10, jugar la llevaría a 0 (no negativo). Si el hambre comienza en 90, jugar la limitaría a 100.
Necesitarás añadir un método set_energy junto con tu set_hunger existente para inicializar ambos valores para las pruebas.
Pruébalo tú mismo
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());
}Todas las lecciones de Object Oriented Programming
1Métodos y Comportamiento
Intro a Bloques de ImplementaciónEl Parámetro SelfMétodos MutablesFunciones AsociadasMúltiples Bloques de ImplementaciónEncadenamiento de MétodosResumen - Acciones de Rectángulo4Proyecto: Mascota virtual
Definir la mascotaAlimentar a la mascota7Traits estándar
El trait DebugEl trait DisplayClone y CopyTraits de igualdadResumen - Punto imprimible10Proyecto: Sistema de documentos
El Trait DrawComponente de texto2Encapsulamiento y módulos
Conceptos básicos de módulosLa palabra clave PublicCampos privadosGettersSettersRepaso - Casillero seguro5Genéricos
Estructuras genéricasMétodos genéricosMúltiples tipos genéricosFunciones genéricasResumen - Punto de coordenadas8Traits como límites
Sintaxis de límites de traitsLímites múltiplesLa cláusula whereRetornar tipos con traitsResumen: Impresora genérica11Patrones de diseño en Rust
Patrón NewtypeComposiciónEl Trait DropFrom e IntoResumen - Mock de Smart Pointer3Enums avanzados
Enums con datosMétodos en EnumsCoincidencia de variantes de datosEl Enum Option revisitadoResumen - Enum Shape6Definición de Traits
¿Qué es un Trait?Implementación de TraitsImplementaciones por defectoSobrescribir valores por defectoTraits con parámetrosResumen - Reproductor multimedia