// remueve la entidad pasada
 public void RemoverEntidad(Entidad entidad)
 {
     entidad.Destruir();
     this.entidades.Remove(entidad);
 }
 // agrega una entidad a la casilla
 public void AgregarEntidad(Entidad entidad)
 {
     this.entidades.Add(entidad);
 }
        public virtual void CargarseGuardado(Casilla posicionBombita, Entidad ObstaculoDeSalida, List<Entidad> listaEntidades)
        {
            this.tablero.Reiniciar();
            this.tablero = new Tablero();

            this.bombita.Reiniciar();
            this.bombita = new Bombita();
            this.tablero.AgregarEntidad(bombita, posicionBombita.X, posicionBombita.Y);

            this.inicializarGuardado(ObstaculoDeSalida, listaEntidades);
        }
        private void inicializarGuardado(Entidad ObstaculoDeSalida, List<Entidad> listaEntidades)
        {
            foreach (Entidad entidad in listaEntidades)
            {
                if (entidad is Cecilio && this.tablero.Casillas[entidad.PosicionActual.X,entidad.PosicionActual.Y].Entidades != null ) this.tablero.AgregarEntidad(new Cecilio(), entidad.PosicionActual.X, entidad.PosicionActual.Y);
                else if (!entidad.EsBombita()) this.tablero.AgregarEntidad(entidad, entidad.PosicionActual.X, entidad.PosicionActual.Y);
            }

            this.tablero.AgregarEntidad(ObstaculoDeSalida,ObstaculoDeSalida.PosicionActual.X,ObstaculoDeSalida.PosicionActual.Y);
            this.tablero.ObstaculoQueOcultaSalida = ObstaculoDeSalida;
        }
 // remueve la entidad pasada de la casilla pasada
 public void RemoverEntidad(Entidad entidad)
 {
     entidad.Destruir();
     int X = entidad.Posicion().X;
     int Y = entidad.Posicion().Y;
     Casilla posicionAModificar = this.Casilla(X, Y);
     posicionAModificar.RemoverEntidad(entidad);
     this.entidades.Remove(entidad);
 }
 // este metodo genera posiciones aleatorias para la entidad pasada
 // hasta que la misma es posicionada en una casilla vacia
 private void GenerarPosicionPara(Entidad entidad)
 {
     bool fueUbicado = false;
     while(!fueUbicado)
     {
         try
         {
             Casilla casilla = this.Casilla(this.FilaSorteada(), this.ColumnaSorteada());
             if(casilla.EstaVacia())
             {
                 entidad.PosicionarEn(casilla);
                 fueUbicado = true;
             }
         }
         catch (CasillaFueraDeRangoError e)
         {
             e.NoHacerNada();
         }
     }
 }
 // agrega la salida
 public void AgregarSalida()
 {
     if (!seAgregoLaSalida)
     {
         if (this.obstaculoQueOcultaSalida.FueDestruido())
         {
             this.seAgregoLaSalida = true;
             int X = this.obstaculoQueOcultaSalida.PosicionActual.X;
             int Y = this.obstaculoQueOcultaSalida.PosicionActual.Y;
             this.AgregarEntidad(new Salida(), X, Y);
             this.obstaculoQueOcultaSalida = null;
         }
     }
 }
        // agrega la salida que estara oculta por un obstaculo de ladrillo o de cemento
        public void AgregarObstaculoQueOcultaSalida()
        {
            Random rand = new Random();
            int prioridadDeSalida = rand.Next(OBSTACULOS_QUE_ADMITEN_SALIDA);
            Entidad obstaculoQueOcultaSalida = null;

            if (prioridadDeSalida == SALIDA_DE_LADRILLO)
                obstaculoQueOcultaSalida = new ObstaculoDeLadrillo(true);
            if (prioridadDeSalida == SALIDA_DE_CEMENTO)
                obstaculoQueOcultaSalida = new ObstaculoDeCemento(true);

            this.AgregarEntidad(obstaculoQueOcultaSalida);
            this.obstaculoQueOcultaSalida = obstaculoQueOcultaSalida;
        }
 // permite agregar una entidad al tablero
 // Se agrega a la entidad en la casilla correspondiente a las coordenadas pasadas
 public void AgregarEntidad(Entidad entidad, int fila, int columna)
 {
     try
     {
         entidad.PosicionarEn(this.Casilla(fila, columna));
         this.entidades.Add(entidad);
     }
     catch (CasillaFueraDeRangoError e)
     {
         e.NoHacerNada();
     }
 }
 // agrega la entidad en una posicion generada aleatoriamente
 public void AgregarEntidad(Entidad entidad)
 {
     this.GenerarPosicionPara(entidad);
     this.entidades.Add(entidad);
 }
 // retorna si esta en la misma posicion que la entidad pasada
 public bool MismaPosicionQue(Entidad entidad)
 {
     return (this.posicion == entidad.Posicion());
 }