Death Pit Remake
Un remake parcial de un juego... paso a paso
20.- Varios tipos de enemigos
El trabajo propuesto
En nuestro juego, tenemos tres tipos de enemigos mortales: el escorpión, la araña y el murciélago. Esto ocurre en la mayoría de juegos, por lo que vamos a ver ya cómo crear varios tipos de enemigos.
Se deberá crear otras dos subclases "Murcielago" y "Aranya". La intención es que en el cuerpo del juego (en la clase "Partida", aparezcan cosas como "enemigo.Mover()", que se comporten correctamente, independientemente del tipo de enemigo que estemos mostrando en este momento.
Además (y esto ya es una particularidad de nuestro juego, no ocurre en la mayoría), cuando recoloquemos al enemigo en pantalla, deberá aparecer un enemigo al azar de estos tres.
Forma de conseguirlo
Crear los nuevos enemigos es sencillo: imitamos la estructura que tiene el escorpión, para crear de la misma forma (pero con distintas imágenes) una araña:
public class Aranya: EnemigoMortal { public Aranya(Partida p) { miPartida = p; direccion = IZQUIERDA; CargarSecuencia( DERECHA, new string[] {"imagenes/aranyad1.png", "imagenes/aranyad1.png","imagenes/aranyad1.png", "imagenes/aranyad2.png", "imagenes/aranyad2.png","imagenes/aranyad2.png"} ); CargarSecuencia( IZQUIERDA, new string[] {"imagenes/aranyai1.png", "imagenes/aranyai1.png","imagenes/aranyai1.png", "imagenes/aranyai2.png", "imagenes/aranyai2.png","imagenes/aranyai2.png"} ); CargarSecuencia( MURIENDO, new string[] {"imagenes/aranyam1.png", "imagenes/aranyam1.png"} ); ancho = 70; alto = 50; } } /* fin de la clase Aranya */
Y también un murciélago:
public class Murcielago: EnemigoMortal { public Murcielago(Partida p) { miPartida = p; direccion = IZQUIERDA; CargarSecuencia( DERECHA, new string[] {"imagenes/murcielago.png", "imagenes/murcielago.png","imagenes/murcielago.png", "imagenes/murcielago2.png", "imagenes/murcielago2.png","imagenes/murcielago2.png"} ); CargarSecuencia( IZQUIERDA, new string[] {"imagenes/murcielago.png", "imagenes/murcielago.png","imagenes/murcielago.png", "imagenes/murcielago2.png", "imagenes/murcielago2.png","imagenes/murcielago2.png"} ); CargarSecuencia( MURIENDO, new string[] {"imagenes/murcielagom1.png", "imagenes/murcielagom1.png"} ); ancho = 70; alto = 50; } } /* fin de la clase Murcielago */
Y los cambios en el juego no son grandes: ya no declararemos a nuestro enemigo como perteneciente a la clase Escorpión, sino a EnemigoMortal, en el constructor le daremos un valor inicial (por ejemplo, que sea un Murciélago), y cada vez que recolocamos al enemigo (por ejemplo, cuando cambiamos de pantalla) escogeremos un nuevo enemigo al azar:
public class Partida { ... private EnemigoMortal enemigo; public Partida() { enemigo = new Murcielago(this); ... } // --- Recolocar enemigo (llamado al cambiar de habit. p.ej.) --- public void RecolocarEnemigo() { // Elijo un n�mero del 0 al 2 Random numAleatorio = new Random( DateTime.Now.Millisecond ); int numeroAzar = (int) numAleatorio.Next(0,3); // Cambio el tipo de enemigo al azar if (numeroAzar == 0) enemigo = new Murcielago(this); else if (numeroAzar == 1) enemigo = new Escorpion(this); else enemigo = new Aranya(this); // Y recoloco enemigo.Recolocar(); }
Esta no es la forma más eficiente, porque va gastando memoria cada vez que el enemigo cambia, pero es la más fácil de entender, porque es repetir lo mismo que hemos hecho en el constructor. Sería más eficiente crear en el constructor un Murciélago, un Escorpión y una Araña, y limitarnos aquí a dar un valor al enemigo, sin usar "new": enemigo = murcielago;
Siguiente entrega...Acceso rápido
- 00.- Motivo
- 01.- Esqueleto vacío
- 02.- Un personaje que se mueve solo
- 03.- Personaje que se mueve con teclado. Enemigo simultáneo
- 04.- Presentación. Dos enemigos con distinto comportamiento
- 05.- Varios enemigos iguales
- 06.- Un fondo formado por "casillas" repetitivas (tiles)
- 07.- El personaje se mueve por el laberinto
- 08.- Un fuente más modular
- 09.- Varias pantallas conectadas
- 10.- Un enemigo que se mueve por el laberinto
- 11.- Varias vidas
- 12.- Distintas imágenes según la dirección. Matar enemigos y obtener puntos.
- 13.- Volver a empezar una partida.
- 14.- Rediseño usando objetos
- 15.- Pantalla de créditos
- 16.- Movimiento suave del personaje
- 17.- Personaje "animado"
- 18.- Leyendo el mapa desde fichero
- 19.- Animación al morir un enemigo
- 20.- Varios tipos de enemigos
- 21.- Un mapa más grande
- 22.- Animación al morir el personaje (Aún no)
- 23.- Tabla de records (Aún no)
- 24.- Recoger "premios" (Aún no)
- 25.- Gastar aire y "energía" (Aún no)
- Orig.- Algunos datos sobre el juego original