public void PruebaQueSePosicioneCorrectamenteEnUnTablero()
        {
            BloqueDeAcero bloque = new BloqueDeAcero(new Casillero(12, 12));

            Assert.AreEqual(12, bloque.Posicion.Fila);
            Assert.AreEqual(12, bloque.Posicion.Columna);
        }
        public void PruebaAgregarUnaEntidadAUnaCasillaDelTableroYVerificarQueEstaVacioDevuelvaFalse()
        {
            Tablero tablero = new Tablero();
            BloqueDeAcero bloque = new BloqueDeAcero();
            tablero.AgregarEntidadEnCasillero(bloque, 0, 0);

            Assert.IsFalse(bloque.Posicion.EstaVacio());
            Assert.IsFalse(tablero.ObtenerCasillero(0, 0).EstaVacio());
        }
        public void QueElBloqueSeaDañandoPorUnaToleToleYSeaDestruido()
        {
            BloqueDeAcero bloque = new BloqueDeAcero(new Casillero(1,1));
            int resistenciaAnterior = bloque.Resistencia;

            ToleTole toleTole = new ToleTole();

            bloque.DaniarConToleTole(toleTole);

            Assert.IsTrue(bloque.FueDestruido());
            Assert.AreNotEqual(resistenciaAnterior, bloque.Resistencia);
        }
        public void QueElBloqueNoSeaDañandoPorUnProyectil()
        {
            BloqueDeAcero bloque = new BloqueDeAcero();
            int resistenciaAnterior = bloque.Resistencia;

            Proyectil proyectil = new Proyectil();

            bloque.DaniarConProyectil(proyectil);

            Assert.IsFalse(bloque.FueDestruido());
            Assert.AreEqual(resistenciaAnterior, bloque.Resistencia);
        }
        public void QueElBloqueNoSeaDañandoPorUnaMolotov()
        {
            BloqueDeAcero bloque = new BloqueDeAcero();
            int resistenciaAnterior = bloque.Resistencia;

            Molotov molotov = new Molotov();

            bloque.DaniarConMolotov(molotov);

            Assert.IsFalse(bloque.FueDestruido());
            Assert.AreEqual(resistenciaAnterior, bloque.Resistencia);
        }
        // Carga un obstaculo en una posicion segun su probabilidad.
        private void CargarBloqueDeAcero(int i, int j)
        {
            // Los obstaculos fijos del bomberman original son de acero en esta version.
            BloqueDeAcero bloque = new BloqueDeAcero();
            if (i % 2 == 1 && j % 2 == 1)
            {
                AgregarEntidadEnCasillero(bloque, i, j);
                listaBloqueDeAcero.Add(bloque);
            }

            // Evita encerrar a bombita.
            else if (i < 3 && j < 3) return;

            else SortearObstaculoEnCasillero(i, j);
        }
        public void PruebaQueUnProyectilNoPuedaMoverseAUnCasilleroConUnaEntidad()
        {
            Tablero tablero = new Tablero();
            Proyectil proyectil = new Proyectil();
            BloqueDeAcero bloque = new BloqueDeAcero();
            tablero.AgregarEntidadEnCasillero(proyectil, 0, 0);
            tablero.AgregarEntidadEnCasillero(bloque, 0, 1);

            Assert.IsFalse(proyectil.PuedeMoverseA(proyectil.Posicion.ObtenerCasilleroAdyacenteEnLaDireccionYElTablero(Entidad.ESTE, tablero)));
            Assert.IsTrue(proyectil.PuedeMoverseA(proyectil.Posicion.ObtenerCasilleroAdyacenteEnLaDireccionYElTablero(Entidad.SUR, tablero)));
        }
        public void QueLopezRAladoPuedaMoversePorArribaDeLosObstaculos()
        {
            Tablero tablero = new Tablero();
            LopezRAlado lopez = new LopezRAlado();
            tablero.AgregarEntidadEnCasillero(lopez, 0, 0);
            BloqueDeAcero bloque = new BloqueDeAcero();
            tablero.AgregarEntidadEnCasillero(bloque, 0, 1);

            lopez.MoverDerecha();
            lopez.MoverDerecha();

            Assert.AreEqual(2, lopez.Posicion.Columna);
        }
        public void TratarDeSeguirDaniandoAUnBloqueDestruidoLanceUnaExcepcion()
        {
            BloqueDeAcero bloque = new BloqueDeAcero(new Casillero(1, 1));
            ToleTole toleTole = new ToleTole();
            bloque.DaniarConToleTole(toleTole); //Ya lo destruyo

            Assert.Throws<EntidadYaDestruidaException>(() => bloque.DaniarConToleTole(toleTole));
        }
        public void PruebaQueCasilleroEstaVacioDevuelvaFalseCuandoTieneUnBloqueDeAceroAdentroCuandoSeLoPasoEnUnSetter()
        {
            Casillero casillero = new Casillero(5, 6);
            Obstaculo bloque = new BloqueDeAcero();
            casillero.Entidad = bloque;

            Assert.IsFalse(casillero.EstaVacio());
            Assert.AreEqual(5, bloque.Posicion.Fila);
            Assert.AreEqual(6, bloque.Posicion.Columna);
        }
        public void PruebaLaCreacionDeUnBloqueDeAcero()
        {
            BloqueDeAcero bloque = new BloqueDeAcero();

            Assert.IsNotNull(bloque);
        }
        public void PruebaQueCasilleroEstaVacioDevuelvaFalseCuandoTieneUnBloqueDeAceroAdentroCuandoLePasoLaPosicionDesdeElBloque()
        {
            Casillero casillero = new Casillero(5, 4);
            Obstaculo bloque = new BloqueDeAcero(casillero);

            Assert.IsFalse(casillero.EstaVacio());
            Assert.AreEqual(5, bloque.Posicion.Fila);
            Assert.AreEqual(4, bloque.Posicion.Columna);
        }
        public void PruebaPosicionarUnObstaculoEnLaCasilla()
        {
            Casillero casillero = new Casillero(0, 0);

            Obstaculo bloque = new BloqueDeAcero();

            casillero.Entidad = bloque;

            Assert.IsNotNull(casillero.Entidad);
        }
        public void PruebaPosicionarUnBloqueEnLaCasillaYQueTienePersonajeDevuelvaFalse()
        {
            Casillero casillero = new Casillero(0, 0);

            BloqueDeAcero bloque = new BloqueDeAcero();

            casillero.Entidad = bloque;

            Assert.IsFalse(casillero.TienePersonaje());
        }
        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 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);
        }