Saltar a contenido

Ejercicios de C# · Parte 2

La Odiseus vira para esquivar un agujero negro

Instrucciones generales

Procede del mismo modo que para la actividad anterior. Puedes reutilizar el mismo proyecto.

Ejercicio 2-1. Huye del agujero negro

Random.Range if Dificultad ★☆☆

Diario de a bordo

La Odiseus se está acercando peligrosamente al campo gravitatorio de un agujero negro. Debes tomar una decisión para virar el rumbo de la nave hacia la derecha o hacia la izquierda.

  1. Crea una variable de tipo int y asígnale un valor aleatorio que vaya del 0 al 100 (ambos incluidos) con el siguiente método:

    Random.Range(0, 101)
    
  2. Después, utilizando una sentencia if, opera tu nave para esquivar un aciago destino:

    • Si el número es menor de 50, gira a la izquierda:

      transform.Rotate(new Vector3(0, 0, 45));
      
    • Si el número es mayor o igual a 50, gira a la derecha:

      transform.Rotate(new Vector3(0, 0, -45));
      
Pista

Random.Range con enteros no incluye el segundo número: por eso se usa 101 para llegar hasta 100. Para los dos casos te basta un if con su else.

Ejercicio 2-2. Despega en el momento correcto

Random.Range operador ternario Dificultad ★★☆

Diario de a bordo

Tras pasar unos días en el planeta Dagobah, por fin ha llegado el momento de abandonar las apestosas ciénagas. Debes calcular el momento justo para despegar y así evitar los monstruos voladores que coronan el pestilente cielo.

  1. Crea una variable de tipo int y asígnale un valor aleatorio que vaya del 0 al 50 (ambos incluidos), del mismo modo que en el ejercicio anterior.
  2. Crea otra variable llamada altura y dale un valor de 1.
  3. Utiliza un operador ternario (el modo abreviado de escribir un if) para cambiar la altura de la nave:
    • Si el número es menor o igual a 25, multiplica la altura por 2.
    • Si el número es mayor a 25, multiplica la altura por 4.
  4. Modifica la altura de la nave con el siguiente comando:

    transform.Translate(new Vector2(0, altura));
    
Pista

El operador ternario tiene la forma condicion ? valorSiSeCumple : valorSiNo. Por ejemplo, int mayor = a > b ? a : b; guarda el mayor de dos números.

Ejercicio 2-3. Alimenta a tu tripulación

if división entera Dificultad ★★☆

Diario de a bordo

Los recursos de la nave empiezan a escasear. Como te has cansado de hacer viajes a la bodega de la Odiseus, se te ocurre escribir un programa para poder preguntarle si hay suficientes ingredientes para hacerle un bocadillo de salchichón a cada miembro de la tripulación (3 tripulantes, porque Nono el robot se alimenta de chatarra).

  1. Crea una variable de tipo int y dale un valor aleatorio entre 0 y 6 (ambos incluidos): será el número de bocatas que quedan congelados en la bodega.
  2. Calcula el número de bocadillos que puede comer cada tripulante dividiendo ese número por el número de tripulantes.
  3. Antes de mostrar el resultado en el HUD de la nave, comprueba si quedan bocadillos:
    • Si no quedan, muestra un mensaje de disculpa.
    • Si quedan, muestra el número de bocatas que se puede zampar cada afortunado miembro de tu querida tripulación.
Salida esperada (con 0 bocatas)
Lo siento, no quedan bocadillos
Salida esperada (con 6 bocatas)
Cada tripulante puede comer 2 bocadillos
Pista

Comprueba primero si quedan bocatas (si el número es 0). Fíjate en que dividir dos int da un int: con 5 bocatas, cada tripulante come 1.

Ejercicio 2-4. Elecciones a capitán de la nave

if operadores lógicos Dificultad ★★☆

Diario de a bordo

Estás un poco cansado de estar mandando todo el rato, así que decides ceder el control de la Odiseus a otro tripulante. Te parece una buena idea que Shirka, la IA de la Odiseus, encuentre al mejor candidato o candidata. Sus sistemas indican que el tripulante de mayor edad debe tomar el control.

  1. Crea tres variables con la edad de los otros tres tripulantes de la nave (Telémaco, Thais y Nono).
  2. Utiliza sentencias if para mostrar el nombre del tripulante de mayor edad.
Pista

Para saber quién es el mayor, compara la edad de cada tripulante con la de los otros dos. Los operadores lógicos te permiten comprobar varias condiciones en un mismo if.

Ejercicio 2-5. Vacía el cargador

while Dificultad ★☆☆

Diario de a bordo

Una flotilla de naves enemigas se aproxima a la posición de tu nave. La única forma de salir airoso de este enfrentamiento es vaciar el cargador de todos los cañones de la nave.

  1. Crea una variable de tipo int con el número de proyectiles disponibles (puedes poner un número aleatorio entre 10 y 15).
  2. Utiliza un bucle while para disparar todos los proyectiles hasta que no quede ninguno.

Consejo

De momento, para saber que has disparado un proyectil simplemente muestra “BOOM!” en la consola ;)

Salida esperada (con 10 proyectiles)
BOOM!
BOOM!
BOOM!
BOOM!
BOOM!
BOOM!
BOOM!
BOOM!
BOOM!
BOOM!
Pista

En cada vuelta del bucle, muestra el mensaje y resta uno a los proyectiles. La condición del while debe dejar de cumplirse cuando lleguen a 0.

Ejercicio 2-6. Maniobra de esquive

for % if Dificultad ★★☆

Diario de a bordo

Tienes a una nave enemiga en la cola: implementa una maniobra de esquive para evitar daños en la estructura de la nave.

  1. Utiliza un bucle for que vaya de 1 a 10 (ambos incluidos).
  2. En cada iteración del bucle, mueve la nave del siguiente modo:

    • Si el valor del índice es par, mueve la nave a la derecha (con el valor del índice):

      transform.Translate(new Vector2(indice, 0));
      
    • Si el valor del índice es impar, mueve la nave hacia arriba:

      transform.Translate(new Vector2(0, indice));
      

Nota

La nave debe acabar en la posición x = 30, y = 25, fuera de cámara. Es normal que no veas el “movimiento”, porque todo el cálculo (y por tanto todo el movimiento) se hace en el mismo momento.

Pista

El operador % da el resto de una división. ¿Qué resto deja un número par al dividirlo entre 2?

Ejercicio 2-7. Maniobra de esquive (II)

for switch Dificultad ★★☆

Diario de a bordo

Tienes otra nave enemiga junto a tu ala derecha: implementa una maniobra de esquive para evitar daños en la estructura de la nave.

  1. Utiliza un bucle for que vaya de 1 a 10 (ambos incluidos).
  2. En cada iteración del bucle, utiliza una sentencia switch para maniobrar según las siguientes reglas:

    • Si el número es múltiplo de 3 (casos 3, 6 y 9), rota 15 grados en el sentido de las agujas del reloj:

      transform.Rotate(new Vector3(0, 0, -15));
      
    • Si el número es múltiplo de 5 (casos 5 y 10), aumenta la coordenada x en 0.5 unidades:

      transform.Translate(new Vector2(0.5f, 0));
      
    • En cualquier otro caso (default), disminuye la coordenada y en 0.5 unidades:

      transform.Translate(new Vector2(0, -0.5f));
      

Nota

La nave no acabará en unas coordenadas “exactas” porque rotar también modifica las coordenadas x e y.

Pista

En un switch puedes agrupar varios casos que hacen lo mismo escribiéndolos seguidos (case 3: case 6: case 9:) antes de las instrucciones y el break.

Ejercicio 2-8. Cuenta atrás para el despegue

while String.Format Dificultad ★★☆

Diario de a bordo

Debes iniciar la maniobra de despegue en el momento exacto para utilizar la ventana de apertura en la densa atmósfera de Tatooine. Programa una cuenta atrás que te ayude en el proceso.

  1. Crea una variable de tipo int llamada contador con un valor de 10 segundos.
  2. Utiliza un bucle while para pintar en pantalla la cuenta atrás (un número en cada iteración del bucle).
  3. Utiliza el método estático String.Format para componer la cadena de texto que se mostrará en la consola.

Consejo

Puedes consultar la documentación de String.Format. Fíjate en los ejemplos y pregunta al profesor si necesitas ayuda.

Salida esperada
Tiempo para el despegue: 10 segundos
Tiempo para el despegue: 9 segundos
Tiempo para el despegue: 8 segundos
Tiempo para el despegue: 7 segundos
Tiempo para el despegue: 6 segundos
Tiempo para el despegue: 5 segundos
Tiempo para el despegue: 4 segundos
Tiempo para el despegue: 3 segundos
Tiempo para el despegue: 2 segundos
Tiempo para el despegue: 1 segundos
Pista

String.Format("Quedan {0} vidas", vidas) sustituye {0} por el valor de vidas. No olvides restar uno al contador en cada vuelta.

Ejercicio 2-9. Calcula las coordenadas de destino

for % && concatenación Dificultad ★★☆

Diario de a bordo

Para llegar a tu próximo destino, debes calcular correctamente las coordenadas del salto interestelar. Si cometes un error, puedes acabar perdido en un remoto lugar de la galaxia. Para hallar las coordenadas, necesitas calcular los números del 1 al 200 que son a la vez múltiplos de 3 y múltiplos de 7.

  1. Crea una variable de tipo string para almacenar las coordenadas de salida.
  2. Crea un bucle que vaya del 1 al 200 (ambos incluidos) y en cada iteración calcule si el índice es múltiplo de 3 y de 7.
  3. Cuando el índice sea múltiplo de 3 y 7, añade el número a la variable de tipo string donde guardas las coordenadas.
  4. Al terminar de recorrer el bucle, pinta en pantalla la variable con las coordenadas.

Consejo

Para saber si un número es múltiplo de otro, puedes mirar si el resto de la división (%) es 0.

Salida esperada
21 42 63 84 105 126 147 168 189
Pista

El operador % da el resto de una división: si el resto es 0, el número es múltiplo. Un string puede ir creciendo a medida que le concatenas texto.

Ejercicio 2-10. Dispara en todas direcciones

for % Dificultad ★☆☆

Diario de a bordo

Una vez más, estás rodeado de enemigos. Necesitas girar la nave e ir disparando cada 5 grados.

  1. Crea un bucle que vaya de 0 a 360 (ambos incluidos).
  2. Gira la nave en cada iteración con el siguiente comando:

    transform.Rotate(new Vector3(0, 0, -1));
    
  3. Para disparar un proyectil cada 5 grados, calcula si el índice del bucle es múltiplo de 5 y dispara mostrando este mensaje por consola:

    ¡Muerte y destrucción!
    
Pista

Fíjate en que el 360 también está incluido. Rotar se hace en todas las vueltas, pero disparar solo en algunas: el operador % te dice en cuáles.