(Tiempo orientativo: 3 h – Lenguaje objetivo: C# 7.0)
ENUNCIADO
1. (4 puntos) Las criaturas elementales
Desarrolla, usando POO correcta (encapsulación, properties, herencia, XML-comments), las clases de un juego con criaturas elementales.
a. El Mundo ocupa la malla rectangular cuyas esquinas opuestas son (0, 0) y (XMax, YMax).
b. La clase Elemental almacena posición (x, y), vitalidad (int) y una referencia al Mundo.
- Se crea con 150 puntos de vitalidad y en una posición aleatoria válida.
- Método
Desplazar()→ mueve x e y entre –5 y 5 sin salir del Mundo y resta 3 puntos de vitalidad. - Método virtual
Accion()devuelve la cadena vacía.
c. ElementalFuego hereda de Elemental. Sobrescribe Accion() devolviendo aleatoriamente “¡Fiuuu!”, “crack-crack” o “💥” si vitalidad > 0; en caso contrario devuelve “”.
d. ElementalAgua hereda de Elemental y mantiene una lista de Gema (no implementes la clase).
- Método
Colectar()(no programarlo) añade una gema cercana a la lista. Accion()elimina al azar una gema y devuelve su representación textual; si no hay gemas, devuelve “”.
e. Método estático Impacto(List<Elemental> els,int x0,int y0,int r,int d) que resta d puntos de vitalidad a los elementales cuya distancia manhattan a (x0, y0) sea < r. Elimina de la lista los que queden con vitalidad ≤ 0.
f. Método MensajesAgua(Elemental[] els) que concatene los resultados de Accion() de todos los ElementalAgua del array.
2. (2 puntos) Los K más poderosos
Elemental añadirá una segunda característica poder (int, editable). Implementa el método genérico
Elemental[] MaximosK(Elemental[] els,int k,
Comparison<Elemental> criterio)
que devuelva hasta k elementales con mejor puntuación según el criterio recibido, sin alterar el array original.
3. (2 puntos) Análisis de complejidad
a) Para N ≥ 1 analiza el siguiente método: cuenta cada acceso a matriz como 1 operación.
void Fusionar(bool[,] matriz)
{
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
if(matriz[i,j]) break;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
for(int k=0;k<i;k++)
matriz[i,k] = matriz[i,k] || matriz[j,k];
}
Escribe la función de coste (peor caso) y su orden Big-Θ indicando el procedimiento.
b) Verdadero / Falso (razona brevemente):
- «Un algoritmo cuyo mejor caso es Θ(N) puede ser asintóticamente peor que otro cuyo peor caso es Θ(N log N)».
- «Si T(N)=2 T(N⁄2)+N log N, entonces T(N) es Θ(N log N)».
4. (2 puntos) Recursión sobre árboles
Declara:
class NodoElem {
public Elemental valor;
public List<NodoElem> hijos = new List<NodoElem>();
}
Programa recursivamente List<ElementalFuego> FuegosHoja(NodoElem raiz) que devuelva una lista con los ElementalFuego que sean hoja del árbol (nodo sin hijos).
5. (2 puntos) Cola genérica con dos pilas
Implementa ColaDosPilas<T> usando internamente dos objetos Stack<T> de System.Collections.Generic. Métodos:
void Encolar(T item)T Desencolar()(lanzaInvalidOperationExceptionsi está vacía)- Propiedad
int Count { get; }
La complejidad amortizada de Encolar y Desencolar debe ser O(1). Explica brevemente por qué.
6. (2 puntos) Extensión LINQ
Crea un método de extensión PromedioSeguro(this IEnumerable<int> origen) que devuelva la media entera de la secuencia o 0 si está vacía, sin lanzar excepciones y sin recorrer la colección más de una vez.
SOLUCIÓN PROPUESTA

Uso recomendado del simulacro
- Intenta primero resolver el enunciado sin mirar la solución; date 3 h.
- Compila y testea tu código con casos sencillos (crea Mundo, varios Elemental*, aplica Impacto, etc.).
- Tras comparar, revisa diferencias de diseño, claridad y eficiencia.
¡Mucho ánimo con la preparación!
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- ¡VOLVEMOS A NUESTROS HORARIOS HABITUALES!

- Especificadores de formato en C (printf/sprintf y scanf)

- Propuestas de actividades avanzadas con XML, DTD, XPath y XSLT

- Apuntes extensos de XML y XSLT

- El momento IDEAL para impulsar tu FORMACIÓN y alcanzar tus Metas Académicas: LAS NAVIDADES.

- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)

- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)

- 60 ejercicios de funciones recursivas en Python para la carrera de Informática

- SIMULACRO 2 – FP Programación de Videojuegos

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed