Ejercicios de C# · Parte 4
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.
- Crea un script vacío (Assets → Create → Scripting → Empty C# Script) con el nombre
Radio. - Edita el fichero y escribe un constructor sin argumentos que simplemente muestre por pantalla el texto “La radio ha sido inicializada”.
- Crea un script “normal” (Assets → Create → Scripting → MonoBehaviour Script) llamado
Ejercicio4_1y asígnalo a tu nave. - En el método
Start, crea una instancia del objetoRadioy comprueba en la consola que la radio se inicializa cuando pones el juego en play.
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.
- Crea tres propiedades en la clase
Radio:volumen(tipoint),encendida(tipobool) yfrecuencia(tipofloat). Escoge la visibilidad adecuada para proteger el valor de las variables. - Modifica el constructor por defecto para que asigne un valor a cada propiedad:
encendida→truevolumen→5frecuencia→90.2f
- 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.
- 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.
- Crea un script
Ejercicio4_3y asígnalo a la nave. - 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.
- Añade un par de métodos que sirvan para subir y bajar el volumen:
SubirVolumensumará una unidad a la propiedadvolumen.BajarVolumenrestará una unidad.- Ambos métodos mostrarán en consola el valor conseguido tras la operación.
- 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.
- Crea un script
Ejercicio4_4y asígnalo a la nave. - 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.
- En lugar de dos métodos, crea sólo uno llamado
Sintonizarpara establecer la nueva frecuencia de sintonización, recibiendo como parámetro la frecuencia deseada. - Establece también un mínimo (87.5) y un máximo (108.0).
- Crea un script
Ejercicio4_5y asígnalo a la nave. - 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.
- Crea dos nuevos métodos (
EncenderyApagar) que permitan modificar la variableencendida. Deben mostrar en pantalla el estado de la radio tras la operación. - Crea un script
Ejercicio4_6y asígnalo a la nave. - 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.
- Crea un nuevo script vacío (Assets → Create → Scripting → Empty C# Script) con el nombre
RadioAnsible. - Haz que esta clase herede de la clase
Radioy 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”. - Crea un script
Ejercicio4_7y asígnalo a la nave. - En el método
Start, crea un objeto de la claseRadioAnsibley 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.
- Crea un nuevo script vacío (Assets → Create → Scripting → Empty C# Script) con el nombre
MP3Player. - Añade un método llamado
Playque reciba el nombre de la canción que quieres reproducir. El método mostrará en consola el nombre de la canción. - En la clase
Radio, añade un nuevo miembro de la claseMP3Player(elige bien la visibilidad de la variable). - Añade a
Radioun métodoPlayque simplemente llame al métodoPlaydel objetoMP3Player. - Crea un script
Ejercicio4_8y asígnalo a la nave. - En el método
Start, crea un objeto de la claseRadio. Después, utiliza el métodoPlaypara 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.