Saltar a contenido

Ejercicios de C# · Parte 4

La radio de a bordo de la Odiseus muestra su espectro de frecuencias

Ejercicio 4-1. Música para mis oídos

clases constructores Dificultad ★☆☆

Diario de a bordo

Decides añadir una radio a la nave, para ir entretenidos en el viaje, porque las distancias entre las estrellas son muy largas y no es cuestión de ir aburridos por el universo.

  1. Crea un script vacío (Assets → Create → Scripting → Empty C# Script) con el nombre Radio.
  2. Edita el fichero y escribe un constructor sin argumentos que simplemente muestre por pantalla el texto “La radio ha sido inicializada”.
  3. Crea un script “normal” (Assets → Create → Scripting → MonoBehaviour Script) llamado Ejercicio4_1 y asígnalo a tu nave.
  4. En el método Start, crea una instancia del objeto Radio y comprueba en la consola que la radio se inicializa cuando pones el juego en play.
Salida esperada
La radio ha sido inicializada
Pista

Un constructor se llama igual que la clase y no tiene tipo de retorno: public Radio() { ... }. La clase Radio no debe heredar de MonoBehaviour: si lo hace, Unity no deja crearla con new Radio().

Ejercicio 4-2. Volumen y frecuencia

propiedades visibilidad ToString Dificultad ★★☆

Diario de a bordo

Una radio sin volumen es como una pistola láser sin baterías: mola para enseñarla, pero no funciona.

  1. Crea tres propiedades en la clase Radio: volumen (tipo int), encendida (tipo bool) y frecuencia (tipo float). Escoge la visibilidad adecuada para proteger el valor de las variables.
  2. Modifica el constructor por defecto para que asigne un valor a cada propiedad:
    • encendida → true
    • volumen → 5
    • frecuencia → 90.2f
  3. Modifica el mensaje del constructor para que pinte en la consola el valor de todas las variables.

Opcional

Implementa el método ToString() para facilitar tu tarea.

Pista

Si las variables son private, solo los métodos de la propia clase pueden cambiarlas. Para el opcional, el método se declara como public override string ToString().

Ejercicio 4-3. Nuevo constructor con argumentos

constructores argumentos Dificultad ★★☆

Diario de a bordo

Estás obsesionado con maximizar la eficiencia de tu nave y te fastidia que no puedas iniciar la radio en otras emisoras y otros volúmenes.

  1. Añade un constructor que reciba como argumentos el volumen y la frecuencia de inicio. Este constructor, además de establecer los valores indicados, también debe mostrar en la consola un mensaje de inicialización con los valores recibidos.
  2. Crea un script Ejercicio4_3 y asígnalo a la nave.
  3. En el método Start, crea una nueva instancia de la radio utilizando el nuevo constructor.

Opcional

Haz que el antiguo constructor llame al nuevo para evitar duplicar código.

Un constructor puede llamar a otro de la misma clase escribiendo, tras sus paréntesis, dos puntos y la palabra this con los argumentos que recibe el otro constructor. Por ejemplo, en la clase Posicion de los apuntes podríamos añadir un constructor sin argumentos que coloque el objeto en el origen:

public Posicion() : this(0, 0, 0)
{
}

Al hacer new Posicion(), primero se ejecuta el constructor de tres argumentos y después el cuerpo de este (aquí vacío, pero podría tener más instrucciones).

Pista

Una clase puede tener varios constructores siempre que reciban argumentos distintos.

Ejercicio 4-4. Métodos para modificar volumen

métodos constantes if Dificultad ★★☆

Diario de a bordo

Aunque has encontrado el volumen perfecto para iniciar la radio, a veces te llama el vago de Telémaco desde su habitación y no alcanzas a escucharle bien. Sin embargo, tu radio no tiene forma de cambiar de volumen. Decides solucionarlo lo antes posible.

  1. Añade un par de métodos que sirvan para subir y bajar el volumen:
    • SubirVolumen sumará una unidad a la propiedad volumen.
    • BajarVolumen restará una unidad.
    • Ambos métodos mostrarán en consola el valor conseguido tras la operación.
  2. Crea un par de constantes para establecer el volumen mínimo (0) y el volumen máximo (10). Los métodos que has creado no deben permitir sobrepasar los límites.
  3. Crea un script Ejercicio4_4 y asígnalo a la nave.
  4. En el método Start, crea una nueva instancia de la radio y luego utiliza los métodos de bajar y subir volumen para probar que funcionan.

Cuidado

Recuerda comprobar que funcionan bien los límites.

Opcional

Investiga la función Mathf.Clamp para intentar resolver el ejercicio de una forma elegante.

Pista

Declara las constantes con const int VolumenMinimo = 0;. Antes de sumar o restar, comprueba con un if que no te sales de los límites.

Ejercicio 4-5. Métodos para modificar frecuencia

métodos float if Dificultad ★★☆

Diario de a bordo

Sientes un gran orgullo por lo bien que has resuelto el tema del volumen de la radio, así que decides hacer lo mismo con la frecuencia, porque tener que apagar y encender la radio para poder cambiar de emisora no sería del agrado ni del peor alienígena de la galaxia.

  1. En lugar de dos métodos, crea sólo uno llamado Sintonizar para establecer la nueva frecuencia de sintonización, recibiendo como parámetro la frecuencia deseada.
  2. Establece también un mínimo (87.5) y un máximo (108.0).
  3. Crea un script Ejercicio4_5 y asígnalo a la nave.
  4. En el método Start, crea una nueva instancia de la radio y luego utiliza el método para sintonizar la radio.

Cuidado

Recuerda comprobar que funcionan bien los límites.

Pista

Si la frecuencia recibida está fuera de los límites, puedes ignorarla o ajustarla al límite más cercano. Recuerda la f en los valores float: 87.5f.

Ejercicio 4-6. Métodos para apagar y encender

métodos bool Dificultad ★☆☆

Diario de a bordo

De nuevo has triunfado con el tema de la frecuencia y decides continuar tu progresión meteórica añadiendo un control para encender y apagar la radio sin necesidad de destruir la anterior e inicializar una nueva.

  1. Crea dos nuevos métodos (Encender y Apagar) que permitan modificar la variable encendida. Deben mostrar en pantalla el estado de la radio tras la operación.
  2. Crea un script Ejercicio4_6 y asígnalo a la nave.
  3. En el método Start, crea una nueva instancia de la radio y luego utiliza el método para apagar la radio. Después prueba el método para volver a encenderla.
Pista

Cada método solo tiene que poner encendida a true o a false y mostrar el nuevo estado.

Ejercicio 4-7. Herencia. Radio Ansible-Compatible

herencia base Dificultad ★★★

Diario de a bordo

Estás a punto de pasar por una zona del espacio sin cobertura. Decides crear una nueva radio que pueda funcionar vía “Ansible” (un método de comunicación interespacial). Para no tener que rehacer todo tu trabajo, decides utilizar el método de la herencia.

  1. Crea un nuevo script vacío (Assets → Create → Scripting → Empty C# Script) con el nombre RadioAnsible.
  2. Haz que esta clase herede de la clase Radio y escribe un constructor que reciba los parámetros iniciales de frecuencia y volumen. Además de los mensajes en consola que mostraba el anterior constructor, este debe mostrar uno nuevo que diga “Esta radio es Ansible-Compatible”.
  3. Crea un script Ejercicio4_7 y asígnalo a la nave.
  4. En el método Start, crea un objeto de la clase RadioAnsible y comprueba que se inicializa correctamente al arrancar la nave.

Opcional

El constructor de esta clase puede llamar al de la clase base para reaprovechar el código de inicialización. Comprueba desde el script Ejercicio4_7 que los métodos de Radio también están disponibles para RadioAnsible.

Pista

Una clase hereda de otra con public class RadioAnsible : Radio. Para llamar al constructor de la clase padre se usa la palabra clave base.

Ejercicio 4-8. Composición. Reproductor MP3

composición clases Dificultad ★★★

Diario de a bordo

Estás hasta el gorro de los anuncios de concesionarios que venden naves más rápidas, molonas (y caras) que la tuya. Decides hacer que tu radio pueda reproducir música en formato MP3 que tengas almacenada en la memoria interna de la nave.

  1. Crea un nuevo script vacío (Assets → Create → Scripting → Empty C# Script) con el nombre MP3Player.
  2. Añade un método llamado Play que reciba el nombre de la canción que quieres reproducir. El método mostrará en consola el nombre de la canción.
  3. En la clase Radio, añade un nuevo miembro de la clase MP3Player (elige bien la visibilidad de la variable).
  4. Añade a Radio un método Play que simplemente llame al método Play del objeto MP3Player.
  5. Crea un script Ejercicio4_8 y asígnalo a la nave.
  6. En el método Start, crea un objeto de la clase Radio. Después, utiliza el método Play para reproducir la canción “Don’t You (Forget About Me)”, de Simple Minds.

Opcional

Comprueba que un objeto RadioAnsible también tiene disponible el método para reproducir MP3.

Pista

Radio tiene una variable de tipo MP3Player que hay que crear con new (por ejemplo, en el constructor): si no, vale null y el programa falla al llamar a Play.