Saltar a contenido

Ejercicios de C# · Parte 3

La Odiseus se aproxima a una estación espacial para atracar

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.

  1. Crea un array de enteros con una capacidad de 10 valores (un valor para cada batería) sin inicializarlo.
  2. Recorre el array para asignar a cada batería un número aleatorio entre 0 y 600.
  3. 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.

  1. Crea un array de float con una capacidad de 5 valores para almacenar los años luz de distancia de los últimos 5 viajes de la nave.
  2. Asigna los 5 valores en la inicialización con números entre 5 y 20.
  3. 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.
Salida esperada (con 12, 5, 20, 8.5 y 15)
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.

  1. Crea una lista pública de tipo string llamada pasajeros como atributo de la clase (hay que declararla fuera del método Start).
  2. 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í.
  3. 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.

  1. Crea una lista pública de enteros llamada datos.
  2. Desde el interfaz de Unity, mete 3 valores entre 0 y 4.
  3. En el método Start, añade dos valores más a la lista asignando un número aleatorio entre 0 y 4.
  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.

  1. Crea un array bidimensional de enteros de 10x10 posiciones. Utilizaremos esta matriz para almacenar posiciones aleatorias para la nave.
  2. Recorre el array con un bucle for doble para asignar valores aleatorios entre 0 y 10. Es decir, un bucle for dentro de un bucle for (el primero para recorrer las “filas” y el segundo para recorrer las “columnas” del array bidimensional).
  3. 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].

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.

  1. Crea un método que no devuelva ningún resultado y que acepte dos argumentos de tipo string llamados saludo y nombre. Piensa un buen nombre para tu método.
  2. El método simplemente debe mostrar en la consola la combinación del saludo y el nombre.
  3. Desde el método Start, realiza una llamada a tu nuevo método.
Salida esperada (con «Buenos días» e «Ícaro»)
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.

  1. Crea un método que devuelva un resultado de tipo entero y acepte un array de float como 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.
  2. Desde el método Start, crea un array de distancias con varios valores y lanza una llamada a tu nuevo método.
  3. 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.
Salida esperada (con 12.5, 3.2 y 8)
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).

  1. Crea un método para convertir de radianes a grados.
  2. 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).

  1. Crea una variable pública de tipo bool a nivel de clase llamada estadoLuces.
  2. Crea dos métodos, uno para apagar las luces (que pone la variable estadoLuces a false) y otro para encenderlas (pone la variable estadoLuces a true).
  3. Desde el método Start, comprueba el estado de la variable y llama al método correspondiente para modificar su estado. Es decir:
    • Si estadoLuces es false debes llamar al método para encenderlas.
    • Si estadoLuces es true debes llamar al método para apagarlas.

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).