Interacción final
Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 23 de 61.
Desafío
Fácil¡Felicidades por construir tu mascota virtual! En este último paso, reúnes todo simulando una sesión completa de interacción con tu mascota, para que cada método que escribiste funcione junto a los demás.
Tu módulo pet.rs se te proporciona completo: new, los getters, set_energy, set_hunger, feed, play y status. Solo escribirás main.rs.
Recibirás tres entradas, las mismas tres que en los pasos anteriores:
- El nombre de la mascota
- La energía con la que comienza la mascota
- El hambre con la que comienza la mascota
En main.rs, realiza esta secuencia:
- Crea la mascota con el nombre indicado y después establece su energía y hambre a partir de la entrada
- Muestra el informe de estado
- Juega con tu mascota dos veces
- Alimenta a tu mascota una vez
- Imprime la línea separadora
--- After Activities --- - Vuelve a mostrar el informe de estado
Recuerda cómo cambian las estadísticas: jugar cuesta 20 de energía y añade 15 de hambre, alimentar resta 30 al hambre, la energía nunca baja de 0 y el hambre nunca sube de 100. El estado de ánimo es happy cuando la energía es 50 o más y el hambre es 50 o menos, y es tired en cualquier otro caso, por lo que una mascota puede comenzar feliz y terminar la sesión cansada.
Por ejemplo, con las entradas Luna, 50 y 50:
--- Status Report ---
Name: Luna
Energy: 50
Hunger: 50
Mood: happy
Luna had fun playing!
Luna had fun playing!
Luna enjoyed the meal!
--- After Activities ---
--- Status Report ---
Name: Luna
Energy: 10
Hunger: 50
Mood: tiredEste último desafío muestra el sistema completo de mascota virtual que has construido: un módulo con campos privados, getters, setters y métodos que funcionan juntos como una sesión interactiva.
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");
// TODO: crea la mascota y establece su energy y hunger a partir de la entrada
// TODO: print the first status report
// TODO: juega dos veces, luego alimenta una vez
// TODO: print the separator "--- After Activities ---"
// TODO: print the final status report
}
Todas las lecciones de Programación Orientada a Objetos
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 multimediaPractica por tu cuenta: Compilador de Rust online