7.7. Proyectos completos propuestos
Curso: Programación en C# (2015), por Nacho Cabanes
7.7. Proyectos completos propuestos
La mejor forma de aplicar todos los conocimientos sobre clases y de ponerlos a prueba es crear algún proyecto de una cierta complejidad, que incluya diferentes clases, herencia, arrays de objetos, comunicación entre dichos objetos, etc. Aquí tienes unos cuantos ejercicios propuestos, sin solución (y para los que no existirá una solución única):
Ejercicio propuesto 7.7.1: Crea un proyecto "Space Invaders" con todas las clases que vimos al principio del tema 6. El proyecto no será jugable, pero deberá compilar correctamente.
Ejercicio propuesto 7.7.2: Crea un proyecto "PersonajeMovil", que será un esqueleto sobre el que se podría ampliar para crear un juego de plataformas. Existirá una pantalla de bienvenida, una pantalla de créditos y una partida, en la que el usuario podrá mover a un personaje (que puede ser representado por una letra X). Las teclas de movimiento quedan a tu criterio, pero podrían ser "wasd" o las flechas del cursor. Si quieres que el movimiento sea más suave, puedes investigar sobre Console.Readkey (que posiblemente habrás usado ya en el proyecto ConsoleInvaders) como alternativa a Console.ReadLine.
Ejercicio propuesto 7.7.3: Crea un proyecto "Laberinto", a partir del proyecto "PersonajeMovil", añadiendo tres enemigos que se muevan de lado a lado de forma autónoma y un laberinto de fondo, cuyas paredes no se puedan "pisar" (la clase Laberinto puede tener métodos que informen sobre si el jugador podría moverse a ciertas coordenadas X e Y). Si el personaje toca a un enemigo, acabará la partida y se regresará a la pantalla de bienvenida.
Ejercicio propuesto 7.7.4: Crea un proyecto "Laberintos", a partir del proyecto "Laberinto", añadiendo premios que recoger, tres vidas para nuestro personaje y varios laberintos distintos que recorrer.
Ejercicio propuesto 7.7.5: Crea un proyecto "SistemaDomotico", que simule un sistema domótico para automatizar ciertas funciones en una casa: apertura y cierre de ventanas y puertas, encendido de calefacción, etc. Además de esos elementos físicos de la casa, también existirá un panel de control, desde el que el usuario podría controlar el resto de elementos, así como programar el comportamiento del sistema (por ejemplo, subir una persiana inmediatamente o hacer que la calefacción se encienda todos los días desde las 19h hasta las 23h, a una cierta temperatura).
Ejercicio propuesto 7.7.6: Completa el proyecto Libro (ejercicio 7.4.3), para que las clases de datos tengan un método "Contiene", que reciba un texto y devuelva el valor booleano "true" cuando ese texto esté contenido en el título o en el autor (y en la procedencia, para los artículos). El Main deberá permitir al usuario realizar búsquedas, aprovechando esta nueva funcionalidad.
Ejercicio propuesto 7.7.7: Añade al proyecto Libro cualquier otra funcionalidad que te parezca interesante, como la de modificar datos, borrarlos u ordenarlos.
Ejercicio propuesto 7.7.8: Crea en el proyecto Libro una clase ListaDeDocumentos, que oculte a Main los detalles de que internamente se trata de un array: deberá permitir opciones como añadir un documento, obtener los datos de uno de ellos, buscar entre la lista de todos ellos, etc. Los criterios de diseño quedan a tu criterio. Por ejemplo, puedes hacer que la búsqueda devuelve un array con los números de ficha encontrados, o un array con el contenido de esas fichas, o el contenido la siguiente ficha que cumpla con esos criterios.
Ejercicio propuesto 7.7.9: Amplía el esqueleto de ConsoleInvaders (7.5.4), con una clase "BloqueDeEnemigos", que será la que contenga el array de enemigos, de modo que se simplifique la lógica de la clase Partida. Esta clase tendrá un método Dibujar, que mostrará todo el array en pantalla, y un método Mover, que moverá todo el bloque hacia la derecha y la izquierda de forma alternativa (deberás comprobar la posición inicial del primer enemigo y la posición final del último enemigo). En cada pasada por el bucle de juego deberás llamar a Mover.
Ejercicio propuesto 7.7.10: Crea una clase Disparo en ConsoleInvaders. Cuando el usuario pulse cierta tecla (Espacio, por ejemplo), aparecerá un disparo encima de la nave, y se moverá hacia arriba hasta que desaparezca por la parte superior de la pantalla. Existirá un único disparo, y no se podrá volver a disparar si está activo (en pantalla). Inicialmente estará desactivado, y lo volverá a estar cuando llegue al margen de la pantalla.
Ejercicio propuesto 7.7.11: En ConsoleInvaders, crea un método "ColisionaCon" en la clase Sprite, que reciba otro Sprite como parámetro y devuelva el valor booleano "true" si ambos sprites están "chocando" o "false" en caso contrario. Tendrás que pensar qué relación habrá entre las coordenadas X e Y de ambos sprites para que "choquen".
Ejercicio propuesto 7.7.12: En ConsoleInvaders, crea una clase Ovni, con un nuevo tipo de Enemigo que no estará siempre activo. Su método Mover hará que se mueva hacia la derecha si ya está activo o, en caso contrario, que genere un número al azar para decidir si debe activarse.
Ejercicio propuesto 7.7.13: En ConsoleInvaders, comprueba colisiones entre el disparo y el Ovni. Si hay colisión, desaparecerán ambos y el jugador obtendrá 50 puntos.
Ejercicio propuesto 7.7.14: En ConsoleInvaders, comprueba colisiones entre el disparo y el bloque de enemigos. Si el disparo toca algún enemigo, ambos desaparecerán y el jugador obtendrá 10 puntos.
Ejercicio propuesto 7.7.15: En ConsoleInvaders, añade una clase "Marcador", que muestre la puntuación y la cantidad de vidas restantes (que por ahora, siempre será 3).
Ejercicio propuesto 7.7.16: En ConsoleInvaders, añade la posibilidad de que algunos enemigos al azar puedan disparar (los disparos de los enemigos "va hacia abajo"; piensa si crear una nueva clase o ampliar las funcionalidades de la clase Disparo que ya tienes). Ajusta la frecuencia de disparos, de modo que el juego continúe siendo jugable. Si uno de esos disparos impacta con la nave, se perderá una vida y el disparo desaparecerá. Si se pierden las 3 vidas, acaba la partida y se volverá a la pantalla de presentación.
Ejercicio propuesto 7.7.17: En ConsoleInvaders, crea la estructura que sea necesaria para almacenar las "mejores puntuaciones", que se actualizarán al terminar cada partida y se mostrarán en la pantalla de bienvenida.
Ejercicio propuesto 7.7.18: En ConsoleInvaders, añade las "torres defensivas", que protegen al jugador y que se van rompiendo poco a poco cada vez que un disparo impacta con ellas.
Actualizado el: 29-01-2015 23:29