public Sala(int n, int x, int y)
        {
            Numero   = n;
            Asientos = new Asiento[x, y];

            for (int i = 0; i < Asientos.GetLength(0); i++)
            {
                for (int j = 0; j < Asientos.GetLength(1); j++)
                {
                    Asientos[i, j] = new Asiento(i, j);
                }
            }
        }
        static void PedirFilaColumnaDeAsiento(Funcion funcion, DB db)
        {
            /*-------Validacion Min y Max de input Fila y Col-------*/ // HORRIBLE
            Console.WriteLine("Ingrese Fila:");
            if (!Int32.TryParse(Console.ReadLine(), out int fila))
            {
                Console.WriteLine("Seleccion Incorrecta");
                PedirFilaColumnaDeAsiento(funcion, db);
            }

            if (fila == -1)
            {
                Reiniciar(db);
            }

            Console.WriteLine("Ingrese Columna:");
            if (!Int32.TryParse(Console.ReadLine(), out int columna))
            {
                Console.WriteLine("Seleccion Incorrecta");
                PedirFilaColumnaDeAsiento(funcion, db);
            }

            if (columna == -1)
            {
                Reiniciar(db);
            }

            if (fila < -1 || fila > funcion.Sala.Asientos.GetLength(1) + 1 || columna < -1 || columna > funcion.Sala.Asientos.GetLength(0))
            {
                Console.WriteLine("Seleccion Incorrecta");
                PedirFilaColumnaDeAsiento(funcion, db);
            }
            /*-------Fin Validacion Min y Max de input Fila y Col-------*/

            Asiento AsientoNuevo = funcion.Sala.Asientos[fila, columna];

            if (!funcion.IntentarOcuparAsiento(AsientoNuevo))
            {
                Console.WriteLine("Asiento Ocupado");
                PedirFilaColumnaDeAsiento(funcion, db);
            }

            GenerarEntrada(AsientoNuevo, funcion, db);
        }
        public bool IntentarOcuparAsiento(Asiento a)
        {
            if (Estado_Asientos[a] == EstadoAsiento.Ocupado)
            {
                return(false);
            }

            if (Estado_Asientos[a] == EstadoAsiento.Libre)
            {
                Estado_Asientos[a] = EstadoAsiento.Ocupado;
                return(true);
            }

            if (this.Sala.Asientos[a.Fila, a.Columna] != a)
            {
                throw new Exception("El asiento no se corresponde con la sala");
            }
            else
            {
                throw new NullReferenceException();
            }
        }
 static bool EsVip(Funcion f, Asiento a)
 {
     return(f.Sala.Asientos[a.Fila, a.Columna].EsVip);
 }
 public Entrada(Funcion f, Asiento a)
 {
     Funcion      = f;
     Asiento      = a;
     FechaEmision = DateTime.Now;
 }