Ejercicios de C# · Parte 2
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.
-
Crea una variable de tipo
inty asígnale un valor aleatorio que vaya del 0 al 100 (ambos incluidos) con el siguiente método:Random.Range(0, 101) -
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.
- Crea una variable de tipo
inty asígnale un valor aleatorio que vaya del 0 al 50 (ambos incluidos), del mismo modo que en el ejercicio anterior. - Crea otra variable llamada
alturay dale un valor de 1. - 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.
-
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).
- Crea una variable de tipo
inty dale un valor aleatorio entre 0 y 6 (ambos incluidos): será el número de bocatas que quedan congelados en la bodega. - Calcula el número de bocadillos que puede comer cada tripulante dividiendo ese número por el número de tripulantes.
- 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.
Lo siento, no quedan bocadillos
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.
- Crea tres variables con la edad de los otros tres tripulantes de la nave (Telémaco, Thais y Nono).
- Utiliza sentencias
ifpara 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.
- Crea una variable de tipo
intcon el número de proyectiles disponibles (puedes poner un número aleatorio entre 10 y 15). - Utiliza un bucle
whilepara 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 ;)
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.
- Utiliza un bucle
forque vaya de 1 a 10 (ambos incluidos). -
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.
- Utiliza un bucle
forque vaya de 1 a 10 (ambos incluidos). -
En cada iteración del bucle, utiliza una sentencia
switchpara 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.
- Crea una variable de tipo
intllamadacontadorcon un valor de 10 segundos. - Utiliza un bucle
whilepara pintar en pantalla la cuenta atrás (un número en cada iteración del bucle). - Utiliza el método estático
String.Formatpara 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.
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.
- Crea una variable de tipo
stringpara almacenar las coordenadas de salida. - 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.
- Cuando el índice sea múltiplo de 3 y 7, añade el número a la variable de tipo
stringdonde guardas las coordenadas. - 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.
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.
- Crea un bucle que vaya de 0 a 360 (ambos incluidos).
-
Gira la nave en cada iteración con el siguiente comando:
transform.Rotate(new Vector3(0, 0, -1)); -
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.