Ejercicios de C# · Parte 3
Instrucciones generales
Procede del mismo modo que para la actividad anterior. Puedes reutilizar el mismo proyecto.
Ejercicio 3-1. Reservas de energía
arrays for Random.Range Dificultad ★★☆
Diario de a bordo
Es el momento de hacer un resumen de las reservas de energía disponibles en la nave. La Odiseus cuenta con 10 baterías de 600 kWh para distintos usos.
- Crea un array de enteros con una capacidad de 10 valores (un valor para cada batería) sin inicializarlo.
- Recorre el array para asignar a cada batería un número aleatorio entre 0 y 600.
-
Recorre de nuevo el array, esta vez en orden inverso, para mostrar el valor de cada batería en la consola con un mensaje de este tipo:
Bateria 2 al 30 % de capacidad
Pista
Para recorrer un array al revés, piensa en qué índice empieza (el último no es Length) y en qué sentido cambia el índice en cada vuelta. El porcentaje es una regla de tres con la capacidad máxima de 600 kWh.
Ejercicio 3-2. Estadísticas de ruta
arrays float for Dificultad ★★☆
Diario de a bordo
En el vacío interestelar el tiempo pasa muy despacio y te aburres más que Nobita en el colegio. Decides entretenerte un rato calculando algunas métricas sobre tus últimos viajes.
- Crea un array de
floatcon una capacidad de 5 valores para almacenar los años luz de distancia de los últimos 5 viajes de la nave. - Asigna los 5 valores en la inicialización con números entre 5 y 20.
- Utilizando un bucle, calcula y muestra por consola los siguientes datos:
- Años luz recorridos en total.
- Media de años luz en cada viaje.
- Viaje más largo realizado.
- Viaje más corto realizado.
Total: 60.5 años luz
Media: 12.1 años luz
Viaje más largo: 20 años luz
Viaje más corto: 5 años luz
Pista
Guarda el viaje más largo y el más corto en dos variables que empiecen con el primer valor del array, y en cada vuelta compáralas con el valor actual.
Ejercicio 3-3. Nuevos pasajeros
List foreach null Dificultad ★★☆
Diario de a bordo
En el último puerto espacial has decidido transportar a varios pasajeros: autoestopistas galácticos. Para llevar un control, debes introducir sus datos en el ordenador central de la nave.
- Crea una lista pública de tipo
stringllamadapasajeroscomo atributo de la clase (hay que declararla fuera del métodoStart). - Al hacerla pública, te aparecerá en el interfaz de Unity, como propiedad del componente del script. Añade 3 o 4 pasajeros desde allí.
- En el método
Start, recorre la lista y muestra el nombre de cada pasajero en la consola.
¡Ojo!
Comprueba que la lista haya sido inicializada (pasajeros != null) para evitar problemas si no se ha dado de alta ningún pasajero en el interfaz de Unity. Te recomiendo que pruebes este caso explícitamente, eliminando todos los elementos de la lista en Unity.
Pista
Repasa en los apuntes qué using necesitas para trabajar con listas. Una lista que no se ha inicializado vale null: compruébalo antes de recorrerla.
Ejercicio 3-4. Cálculo de trayectoria
List Add media Dificultad ★★☆
Diario de a bordo
Para atravesar el cinturón de Kuiper, debes calcular la próxima trayectoria de la nave con extremo cuidado.
- Crea una lista pública de enteros llamada
datos. - Desde el interfaz de Unity, mete 3 valores entre 0 y 4.
- En el método
Start, añade dos valores más a la lista asignando un número aleatorio entre 0 y 4. -
Recorre la lista calculando el valor medio y mueve la nave a la izquierda con el resultado:
transform.Translate(new Vector2(-valorMedio, 0));
Pista
Random.Range con enteros no incluye el segundo número. Para la media necesitas la suma de los elementos y cuántos hay en la lista; ¡cuidado con la división entera!
Ejercicio 3-5. Posición inicial aleatoria
arrays bidimensionales for anidados Dificultad ★★★
Diario de a bordo
Para distraer a los enemigos, decides emplear una técnica de posicionamiento pseudoaleatoria.
- Crea un array bidimensional de enteros de 10x10 posiciones. Utilizaremos esta matriz para almacenar posiciones aleatorias para la nave.
- Recorre el array con un bucle
fordoble para asignar valores aleatorios entre 0 y 10. Es decir, un buclefordentro de un buclefor(el primero para recorrer las “filas” y el segundo para recorrer las “columnas” del array bidimensional). - Posiciona tu nave con los valores almacenados en las siguientes posiciones:
- Posición en x: valor del array en
[5, 5]. - Posición en y: valor del array en
[3, 8].
- Posición en x: valor del array en
Nota
Utiliza transform.Translate como en el ejercicio anterior para posicionar tu nave.
Pista
Repasa en los apuntes cómo se declara un array de dos dimensiones y cómo se accede a una posición: se usan dos índices dentro de los mismos corchetes. Cada uno de los dos bucles recorre una dimensión.
Ejercicio 3-6. Mensajes vía Ansible
métodos argumentos Dificultad ★☆☆
Diario de a bordo
Para evitar conflictos diplomáticos, debes programar un nuevo sistema para enviar mensajes a otras naves.
- Crea un método que no devuelva ningún resultado y que acepte dos argumentos de tipo
stringllamadossaludoynombre. Piensa un buen nombre para tu método. - El método simplemente debe mostrar en la consola la combinación del saludo y el nombre.
- Desde el método
Start, realiza una llamada a tu nuevo método.
Buenos días Ícaro
Pista
Un método que no devuelve nada se declara con void: void NombreDelMetodo(string saludo, string nombre) { ... }. Desde Start, llámalo con dos textos entre comillas.
Ejercicio 3-7. La ruta más corta
métodos return arrays Dificultad ★★★
Diario de a bordo
Andas algo corto de combustible y debes elegir la ruta más corta para llegar a la próxima estación de servicio espacial.
- Crea un método que devuelva un resultado de tipo entero y acepte un array de
floatcomo argumento. El array contendrá las distancias de cada una de las rutas y el método debe devolver la posición del array de la ruta más corta. Piensa un buen nombre para tu método. - Desde el método
Start, crea un array de distancias con varios valores y lanza una llamada a tu nuevo método. - Imprime en pantalla:
- Cada uno de los valores del array.
- El resultado de la llamada al método, que debe devolver el índice del array que contiene el valor más pequeño.
12.5
3.2
8
La ruta más corta es la 1
Pista
Guarda en una variable el índice de la distancia más pequeña encontrada hasta el momento (empieza en 0) y cámbialo cuando encuentres una menor. Al final, devuélvelo con return.
Ejercicio 3-8. Atraque con el ángulo correcto
métodos return float Dificultad ★★☆
Diario de a bordo
Has encontrado una nave-supermercado que vende de todo, desde pan recién horneado hasta videoconsolas retro. No puedes desperdiciar esta oportunidad, así que decides atracar en el pequeño puerto espacial que ofrece la nave. Para ello, debes calcular el ángulo correcto de atraque, o corres el riesgo de estrellar la Odiseus contra el puerto. El problema es que el ordenador de la nave de destino te ofrece el ángulo en radianes y la Odiseus sólo entiende de grados.
La nave-supermercado te dice que rotes 2,5 radianes “clockwise” (en el sentido de las agujas del reloj).
- Crea un método para convertir de radianes a grados.
- Utiliza el resultado para rotar tu nave (con el método
Rotate, como en ejercicios anteriores).
Pista
grados = radianes × 180 / π. En Unity tienes π en Mathf.PI. Para girar en el sentido de las agujas del reloj, el ángulo que pasas a Rotate debe ser negativo.
Ejercicio 3-9. Comandos por voz
métodos switch string Dificultad ★★☆
Diario de a bordo
Shirka, la IA de tu nave, debe apagarse durante unas horas para realizar un mantenimiento rutinario. Decides crear un método rudimentario para poder maniobrar la nave con comandos de voz.
Crea un método que reciba una cadena de texto (el comando por voz) y que mueva la nave en consecuencia:
- Si el método recibe
"Derecha", moverá la nave una unidad a la derecha. - Si el método recibe
"Izquierda", moverá la nave una unidad a la izquierda. - Lo mismo para
"Arriba"y"Abajo". "Rotación"hará rotar la nave 10° en sentido antihorario.
Pista
Puedes comparar el texto con == o hacer un switch sobre la cadena: case "Derecha":.
Ejercicio 3-10. Luces automáticas
bool métodos if Dificultad ★☆☆
Diario de a bordo
Shirka sigue fuera de servicio, así que decides automatizar el estado de las luces de la nave (te da mucha pereza levantarte a apagar todas las luces cuando ya estás acostado leyendo).
- Crea una variable pública de tipo
boola nivel de clase llamadaestadoLuces. - Crea dos métodos, uno para apagar las luces (que pone la variable
estadoLucesafalse) y otro para encenderlas (pone la variableestadoLucesatrue). - Desde el método
Start, comprueba el estado de la variable y llama al método correspondiente para modificar su estado. Es decir:- Si
estadoLucesesfalsedebes llamar al método para encenderlas. - Si
estadoLucesestruedebes llamar al método para apagarlas.
- Si
Consejo
Como la variable es pública, puedes modificar su estado inicial desde Unity. Comprueba que el sistema funciona correctamente.
Pista
Declara public bool estadoLuces; fuera de Start. Escribir if (estadoLuces) es lo mismo que if (estadoLuces == true).