예제 #1
0
        public Asiento SeleccionarAsiento(Cine cine)
        {
            int  fila                = -2;
            int  col                 = -2;
            bool esNumerico1         = false;
            bool esNumerico2         = false;
            bool asientoSeleccionado = false;

            bool filaValida = false;
            bool colValida  = false;

            int maxFilas = this.Sala.Asientos.GetLength(0);
            int maxCols  = this.Sala.Asientos.GetLength(1);

            while (!filaValida || !colValida || !asientoSeleccionado)
            {
                Console.Clear();

                Console.WriteLine($"Pelicula: {this.Pelicula.Titulo}");
                Console.WriteLine($"Funcion: {this.FechaYHora.ToString("dd/MM/yyyy HH:mm")}");

                this.MostrarAsientos();

                float precioEntrada    = cine.PrecioEntrada;
                float precioEntradaVip = cine.PrecioEntradaVip;

                string libre = $"[ ] = Libre ${precioEntrada}";
                string vip   = $"[ V ] = VIP Libre ${precioEntradaVip}";

                if (this.FechaYHora.DayOfWeek == DayOfWeek.Wednesday || this.FechaYHora.DayOfWeek == DayOfWeek.Thursday)
                {
                    precioEntrada    = cine.PrecioEntrada / 2;
                    precioEntradaVip = cine.PrecioEntradaVip / 2;

                    libre = $"[ ] = Libre ${precioEntrada} (precio promo)";
                    vip   = $"[ V ] = VIP Libre ${precioEntradaVip} (precio promo)";
                }

                Console.WriteLine("Referencias: ");
                Console.WriteLine(libre);
                Console.WriteLine(vip);
                Console.WriteLine($"[ O ] = Ocupado");

                string mensajeError = $"Opcion invalida\nDebe elegir una opcion entre el -1 y el {maxFilas - 1}.";

                Console.Write("Ingrese Fila (-1 para cancelar): ");
                esNumerico1 = int.TryParse(Console.ReadLine(), out fila);

                if (esNumerico1)
                {
                    if (fila == -1)
                    {
                        return(null);
                    }

                    filaValida = Program.ValidarOpcion(-1, maxFilas, fila, mensajeError);

                    if (!filaValida)
                    {
                        continue;
                    }
                }

                Console.Write("Ingrese Columna (-1 para cancelar): ");
                esNumerico2 = int.TryParse(Console.ReadLine(), out col);

                if (esNumerico2)
                {
                    if (col == -1)
                    {
                        return(null);
                    }

                    mensajeError = $"Opcion invalida\nDebe elegir una opcion entre el -1 y el {maxCols - 1}.";
                    colValida    = Program.ValidarOpcion(-1, maxCols, col, mensajeError);

                    if (!colValida)
                    {
                        continue;
                    }
                }

                if (filaValida && colValida)
                {
                    if (!IntentarOcuparAsiento(this.Sala.Asientos[fila, col]))
                    {
                        Program.MostrarMensaje("El asiento ya esta ocupado.", ConsoleColor.Red);
                        continue;
                    }
                    else
                    {
                        asientoSeleccionado = true;
                    }
                }
                else
                {
                    Program.MostrarMensaje("Datos invalidos.", ConsoleColor.Red);
                }
            }

            return(this.Sala.Asientos[fila, col]);
        }