Versión: 0.47, de 10-Jul-2011


32. Colisiones con enemigos. Perder vidas. Aplicación a MiniMiner (versión 5) (*)

La comprobación de colisiones no es difícil, y además ya tenemos un esqueleto en la clase "Elemento Gráfico": la forma más sencilla es comprobar si se solapan el rectángulo que contiene un elemento gráfico y el rectángulo que contiene a otro:

El fragmento de fuente que se encarga de esto es simplemente así:

/** colisionCon: devuelve si hay colision del ElementoGraf con
 *  un rectangulo dado por sus coordenadas
 */
bool ElementoGraf::colisionCon(int x, int y, int ancho, int alto)
{
    if ((this->posX+this->anchura > x)
        && (this->posY+this->altura > y)
        && (x+ancho > this->posX)
        && (y+alto > this->posY))
      return true;
    else
      return false;
}
 
/** colisionCon: devuelve si hay colision del ElementoGraf con otro
 */
bool ElementoGraf::colisionCon(ElementoGraf e2)
{
    return colisionCon(e2.posX, e2.posY, e2.anchura, e2.altura);
}

Cuando veamos que colisionan el personaje y el enemigo (lo único que vamos a comprobar por ahora), deberemos hacer varias cosas:

Eso se convertiría en una función como esta:

void comprobarColisiones() {
  // Colisiones de personaje con enemigo: recolocar y perder vida
  if (personaje->colisionCon( *enemigo ))
  {
    personaje->disminuirVidas();
    marcador->indicarVidas(personaje->getVidas());
    personaje->reiniciarPosicion();
    enemigo->reiniciarPosicion();    
    hard.pausa(100);
    if (personaje->getVidas() == 0)
    {
      partidaTerminada = true;
      personaje->reiniciarVidas();  // Para la siguiente partida
    }
  }  
}

La apariencia ahora sería así:

Y aquí puedes descargar toda esta versión, en un fichero ZIP, que incluye todos los fuentes, las imágenes, el proyecto de Dev-C++ listo para compilar en Windows, y un fichero "compila.sh" para compilar en Linux.

Anterior Siguiente