public void BombitaAgarreUnBombaToleToleYCambieElTipoDeBombaQueLanza()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            BombaToleTole articulo = new BombaToleTole();
            tablero.AgregarEntidadEnCasillero(articulo, 0, 1);

            bombita.MoverAbajo();
            bombita.LanzarBomba();
            bombita.MoverDerecha();
            bombita.MoverAbajo();

            bombita.Bomba.CuandoPaseElTiempo(1);
            Assert.IsInstanceOf<Molotov>(bombita.Bomba);

            bombita.MoverArriba();
            bombita.MoverArriba();
            bombita.MoverDerecha();
            bombita.LanzarBomba();
            bombita.MoverDerecha();
            bombita.MoverAbajo();
            bombita.Bomba.CuandoPaseElTiempo(10);
            Assert.IsTrue(bombita.Bomba.FueDestruido());
            Assert.IsInstanceOf<ToleTole>(bombita.Bomba);

            bombita.LanzarBomba();
            bombita.MoverDerecha();
            bombita.MoverAbajo();
            bombita.Bomba.CuandoPaseElTiempo(5);
            Assert.IsInstanceOf<ToleTole>(bombita.Bomba);
        }
        public void BombitaAgarreUnTimerYSusBombasTardenMasEnExplotar()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Timer articulo = new Timer();
            tablero.AgregarEntidadEnCasillero(articulo, 0, 1);

            bombita.MoverAbajo();
            bombita.LanzarBomba();
            bombita.MoverDerecha();
            bombita.MoverAbajo();

            bombita.Bomba.CuandoPaseElTiempo(1);
            Assert.IsTrue(bombita.Bomba.FueDestruido());

            bombita.MoverArriba();
            bombita.MoverArriba();
            Assert.AreEqual(0.85,bombita.PorcentajeDeRetardo);
            bombita.MoverDerecha();
            bombita.LanzarBomba();
            bombita.MoverDerecha();
            bombita.MoverAbajo();
            bombita.Bomba.CuandoPaseElTiempo(0.9);

            Assert.IsTrue(bombita.Bomba.FueDestruido());

            Assert.AreEqual(3, bombita.Vidas);
        }
        public void PruebaQueSeGuardeCorrectamenteLaPosicionDeBombita()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 5, 6);

            Casillero casillero = tablero.PosicionBombita;

            Assert.AreEqual(5, casillero.Fila);
            Assert.AreEqual(6, casillero.Columna);
        }
        public void CuandoUnBombitaUtiliceUnHabanoAumenteSuVelocidad()
        {
            Habano articulo = new Habano();
            Bombita bombita = new Bombita();
            int velocidadInicial = bombita.Velocidad;

            articulo.UtilizarArticuloEn(bombita);
            int velocidadFinal = bombita.Velocidad;

            Assert.Greater(velocidadFinal, velocidadInicial);
        }
        public void CuandoSeMueveBombitaALaDerechaCambiaSuPosicionEnElTablero()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);

            bombita.MoverDerecha();

            Assert.AreEqual(1, bombita.Posicion.Columna);
            Assert.AreEqual(0, bombita.Posicion.Fila);
        }
        public void CuandoUnBombitaUtiliceUnTimerSusBombasTenganUnRetardoQuincePorcientoMenor()
        {
            Timer articulo = new Timer();
            Bombita bombita = new Bombita();
            double porcentajeInicial = bombita.PorcentajeDeRetardo;

            articulo.UtilizarArticuloEn(bombita);
            double porcentajeFinal = bombita.PorcentajeDeRetardo;

            Assert.AreEqual(porcentajeFinal, porcentajeInicial*0.85  );
        }
        public void CuandoUnBombitaUtiliceUnBombaToleToleSusBombasSeanDelTipoToleTole()
        {
            BombaToleTole articulo = new BombaToleTole();
            Bombita bombita = new Bombita();
            int destruccionInicial = bombita.Bomba.Destruccion;

            articulo.UtilizarArticuloEn(bombita);

            int destruccionFinal = bombita.Bomba.Destruccion;

            Assert.Greater(destruccionFinal, destruccionInicial);
        }
        public void PruebaQueCuandoBombitaLoAgarrePaseDeNivel()
        {
            Tablero tablero = new Tablero();
            Salida salida = new Salida();
            tablero.AgregarEntidadEnCasillero(salida, 5, 5);
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 6, 5);

            bombita.MoverArriba();

            Assert.AreEqual(2, tablero.NivelActual);
        }
        public void PruebaQueSeGuardeCorrectamenteLaPosicionDeBombitaCuandoSeMueve()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);

            bombita.MoverAbajo();
            Casillero casillero = tablero.PosicionBombita;

            Assert.AreEqual(1, casillero.Fila);
            Assert.AreEqual(0, casillero.Columna);
        }
        public void PruebaPosicionarUnPersonajeEnLaCasillaYQueTienePersonajeDevuelvaTrue()
        {
            Casillero casillero = new Casillero(0, 0);

            Bombita personaje = new Bombita();

            casillero.Entidad = personaje;

            Assert.IsTrue(casillero.TienePersonaje());
        }
        public void CreaUnTableroConBombitaYUnBombaToleToleYMueveABombitaHastaAgarrarlo()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            BombaToleTole articulo = new BombaToleTole();
            tablero.AgregarEntidadEnCasillero(articulo, 0, 2);

            bombita.MoverDerecha();
            bombita.MoverDerecha();
            //Con un articulo, bombita debe agarrarlo y avanzar a su posicion. El articulo no debe estar mas en el tablero
            Assert.IsNull(articulo.Posicion);
            Assert.AreEqual(0, bombita.Posicion.Fila);
            Assert.AreEqual(2, bombita.Posicion.Columna);
            Assert.IsInstanceOf<ToleTole>(bombita.Bomba);
        }
        public void BombitaIntentaLanzarDosBombasALaVez()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Bomba bomba = bombita.Bomba;

            bombita.LanzarBomba();
            bombita.MoverAbajo();
            bombita.MoverDerecha();

            bombita.LanzarBomba();
            bombita.MoverDerecha();

            bomba.CuandoPaseElTiempo(3);

            Assert.AreEqual(3, bombita.Vidas);
        }
        public void PruebaPosicionarUnPersonajeEnLaCasilla()
        {
            Casillero casillero = new Casillero(0, 0);

            Personaje personaje = new Bombita();

            casillero.Entidad = personaje;

            Assert.IsNotNull(casillero.Entidad);
        }
        public void CreaUnTableroConBombitaYUnObstaculoYMueveABombitaHastaChocarse()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            BloqueDeAcero bloque = new BloqueDeAcero();
            tablero.AgregarEntidadEnCasillero(bloque, 0, 2);

            bombita.MoverDerecha();
            bombita.MoverDerecha();
            //Cuando trata de ir a donde hay un bloque no pasa nada
            Assert.AreEqual(0, bloque.Posicion.Fila);
            Assert.AreEqual(2, bloque.Posicion.Columna);
            Assert.AreEqual(0, bombita.Posicion.Fila);
            Assert.AreEqual(1, bombita.Posicion.Columna);
        }
        public void CreaUnTableroConBombitaYUnHabanoYMueveABombitaHastaAgarrarlo()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Habano habano = new Habano();
            tablero.AgregarEntidadEnCasillero(habano, 0, 2);

            bombita.MoverDerecha();
            bombita.MoverDerecha();
            //Con un articulo, bombita debe agarrarlo y avanzar a su posicion. El articulo no debe estar mas en el tablero
            Assert.IsNull(habano.Posicion);
            Assert.AreEqual(0, bombita.Posicion.Fila);
            Assert.AreEqual(2, bombita.Posicion.Columna);
            Assert.AreEqual(10, bombita.Velocidad);
        }
        public void CreaUnTableroConBombitaYUnLopezRAladoYLosMueveHastaChocarseYQueBombitaPierdaUnaVida()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 29, 29);// Arranca en (0,0)
            LopezRAlado lopez = new LopezRAlado();
            tablero.AgregarEntidadEnCasillero(lopez, 1, 29);

            for (int i = 0; i < 28; i++)
            {
                bombita.MoverArriba();
            }
            lopez.MoverAbajo();

            Assert.IsTrue(bombita.Vidas == 2);
            Assert.AreEqual(1, lopez.Posicion.Fila);
            Assert.AreEqual(29, lopez.Posicion.Columna);
            Assert.AreEqual(2, bombita.Posicion.Fila);
            Assert.AreEqual(29, bombita.Posicion.Columna);
        }
        public void PruebaQueCuandoUnProyectilExploteDanieAUnBombitaQueEsteAlLado()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 4, 1);// Arranca en (0,0)
            Proyectil bomba = new Proyectil();
            tablero.AgregarEntidadEnCasillero(bomba, 0, 2);

            bomba.MoverAbajo();
            bomba.MoverAbajo();
            bomba.MoverAbajo();
            bomba.MoverAbajo();

            Assert.AreEqual(4, bomba.Posicion.Fila);
            Assert.AreEqual(2, bomba.Posicion.Columna);

            bomba.CuandoPaseElTiempo(0);

            Assert.AreEqual(2, bombita.Vidas);
        }
        public void PruebaQueElEfectoDelBombaToleToleLeDureHastaQueMuera()
        {
            BombaToleTole articulo = new BombaToleTole();
            Bombita bombita = new Bombita();
            Assert.IsInstanceOf<Molotov>(bombita.Bomba);

            bombita.AgarrarArticulo(articulo);
            Assert.IsInstanceOf<ToleTole>(bombita.Bomba);

            bombita.DaniarConToleTole(new ToleTole());

            Assert.IsInstanceOf<Molotov>(bombita.Bomba);
        }
 public void Reiniciar(Bombita bombita)
 {
     tablero = new Casillero[MAXIMO_FILA, MAXIMO_COLUMNA];
     listaCecilios = new List<Cecilio>();
     listaLopezR = new List<LopezR>();
     listaLopezRAlado = new List<LopezRAlado>();
     listaBloqueDeAcero = new List<BloqueDeAcero>();
     listaBloqueDeCemento = new List<BloqueDeCemento>();
     listaBloqueDeLadrillos = new List<BloqueDeLadrillos>();
     listaTimer = new List<Timer>();
     listaHabano = new List<Habano>();
     listaBombaToleTole = new List<BombaToleTole>();
     InicializarTablero(true);
     AgregarEntidadEnCasillero(bombita, 0, 0);
 }
        public void CreaUnTableroConUnBombitaYUnCecilioYLosMueve()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Cecilio cecilio = new Cecilio();
            tablero.AgregarEntidadEnCasillero(cecilio, 5, 0);

            bombita.MoverAbajo();
            cecilio.MoverArriba();
            cecilio.MoverArriba();
            cecilio.MoverArriba();

            Assert.AreEqual(1, bombita.Posicion.Fila);
            Assert.AreEqual(2, cecilio.Posicion.Fila);
        }
        public void CreaUnTableroConBombitaYUnTimerYMueveABombitaHastaAgarrarlo()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Timer articulo = new Timer();
            tablero.AgregarEntidadEnCasillero(articulo, 0, 2);

            bombita.MoverDerecha();
            bombita.MoverDerecha();
            //Con un articulo, bombita debe agarrarlo y avanzar a su posicion. El articulo no debe estar mas en el tablero
            Assert.IsNull(articulo.Posicion);
            Assert.AreEqual(0, bombita.Posicion.Fila);
            Assert.AreEqual(2, bombita.Posicion.Columna);
            Assert.AreEqual(0.85, bombita.PorcentajeDeRetardo);
        }
        public void CreaUnTableroConBombitaYUnProyectilYSeColisionanEntoncesBombitaPierdeUnaVida()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Proyectil bomba = new Proyectil();
            tablero.AgregarEntidadEnCasillero(bomba, 0, 2);

            bomba.MoverIzquierda();
            bomba.MoverIzquierda();

            bomba.CuandoPaseElTiempo(0);

            Assert.AreEqual(0, bombita.Posicion.Fila);
            Assert.AreEqual(0, bombita.Posicion.Columna);
            Assert.AreEqual(2, bombita.Vidas);
            Assert.IsNull(bomba.Posicion);
        }
        public void PruebaQueUnProyectilCuandoSeEncuentraUnPersonajeLoDania()
        {
            Tablero tablero = new Tablero();
            Proyectil proyectil = new Proyectil();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(proyectil, 0, 0);
            tablero.AgregarEntidadEnCasillero(bombita, 1, 0);

            proyectil.MoverAbajo();
            proyectil.CuandoPaseElTiempo(0);

            Assert.AreEqual(2, bombita.Vidas);
        }
        public void QueBombitaNoSeaDaniadoCuandoSeLeLanzaUnProyectilYEstaAtrasDeUnBloque()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 1, 2);// Arranca en (0,0)
            LopezR enemigo = new LopezR();
            tablero.AgregarEntidadEnCasillero(enemigo, 1, 5);
            BloqueDeAcero bloque = new BloqueDeAcero();
            tablero.AgregarEntidadEnCasillero(bloque, 1, 3);

            Bomba bomba = enemigo.Bomba;

            enemigo.LanzarBomba();

            bomba.CuandoPaseElTiempo(5);

            Assert.AreEqual(3, bombita.Vidas);
        }
        public void CreaUnTableroConUnBombitaYUnCecilioYLosMueveHastaChocarse()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            Cecilio cecilio = new Cecilio();
            tablero.AgregarEntidadEnCasillero(cecilio, 5, 0);

            bombita.MoverAbajo();
            cecilio.MoverArriba();
            cecilio.MoverArriba();
            cecilio.MoverArriba();
            bombita.MoverAbajo();

            Assert.IsTrue(bombita.Vidas == 2);
            Assert.AreEqual(2, cecilio.Posicion.Fila);
            Assert.AreEqual(0, cecilio.Posicion.Columna);
            Assert.AreEqual(1, bombita.Posicion.Fila);//bombita pierde una vida y no avanza
            Assert.AreEqual(0, bombita.Posicion.Columna);
        }
        public void CreaUnTableroConBombitaYUnLopezRYLosMueveHastaChocarseYQueBombitaPierdaUnaVida()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            LopezR lopez = new LopezR();
            tablero.AgregarEntidadEnCasillero(lopez, 0, 3);

            bombita.MoverAbajo();
            lopez.MoverIzquierda();
            lopez.MoverIzquierda();
            lopez.MoverIzquierda();
            bombita.MoverArriba();

            Assert.IsTrue(bombita.Vidas == 2);
            Assert.AreEqual(0, lopez.Posicion.Fila);
            Assert.AreEqual(0, lopez.Posicion.Columna);
            Assert.AreEqual(1, bombita.Posicion.Fila);//bombita pierde una vida y no avanza
            Assert.AreEqual(0, bombita.Posicion.Columna);
        }
 //Metodos para agregar entidad en el tablero
 public void AgregarEntidadEnCasillero(Entidad entidad, int x, int y)
 {
     try
     {
         Casillero casillero = ObtenerCasillero(x, y);
         casillero.Entidad = entidad;
         entidad.Posicion = casillero;
         entidad.Tablero = this;
         if (entidad.EsBombita()) bombita = (Bombita)entidad;
     }
     catch (CasilleroFueraDeRangoException e)
     {
         throw e;
     }
 }
        public void LopezRIntentaLanzarDosProyectilesALaVezYNoPuede()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            LopezR enemigo = new LopezR();
            tablero.AgregarEntidadEnCasillero(enemigo, 0, 3);

            Bomba bomba = enemigo.Bomba;

            enemigo.LanzarBomba();
            enemigo.MoverDerecha();
            enemigo.LanzarBomba();

            bomba.CuandoPaseElTiempo(5);

            Assert.AreEqual(2, bombita.Vidas);
        }
 private void AgregarBombita()
 {
     Bombita bombita = new Bombita();
     AgregarEntidadEnCasillero(bombita,0,0);
 }
        public void PruebaQueBombitaLanceUnaBombaAlLadoDeUnBloquesDeLadrillosYLosDestruya()
        {
            Tablero tablero = new Tablero();
            Bombita bombita = new Bombita();
            tablero.AgregarEntidadEnCasillero(bombita, 0, 0);// Arranca en (0,0)
            BloqueDeLadrillos bloque = new BloqueDeLadrillos();
            tablero.AgregarEntidadEnCasillero(bloque, 0, 2);
            Bomba bomba = bombita.Bomba;

            bombita.MoverDerecha();
            bombita.LanzarBomba();

            bombita.MoverAbajo();
            bombita.MoverIzquierda();

            bomba.CuandoPaseElTiempo(5);

            Assert.IsTrue(bloque.FueDestruido());
        }