public Operacao Iniciar(int idJogadorSala, int idSala)
        {
            var sala = _salaBusiness.Obter(idSala);

            if (sala == default)
            {
                return(new Operacao("Sala não encontrada.", false));
            }

            var crimeSala = _crimeBusiness.Obter(idSala);

            if (crimeSala != default)
            {
                return(new Operacao("A sala já foi iniciada.", false));
            }

            if (sala.IdJogadorSala != idJogadorSala)
            {
                return(new Operacao("Esse jogador não pode iniciar a partida", false));
            }

            var jogadoresSala = _jogadorSalaBusiness.Listar(idSala);

            if (jogadoresSala == null || jogadoresSala.Count < 3)
            {
                return(new Operacao("Para iniciar a partida, é necessário que haja pelo menos 3 jogadores.", false));
            }

            return(IniciarPartida(sala, jogadoresSala));
        }
        public ActionResult Jogar(int idJogadorSala)
        {
            var jogadorSala = _jogadorSalaBusiness.Obter(idJogadorSala);

            if (jogadorSala.IdSuspeito == null)
            {
                return(RedirectToAction("Manter", "Sala"));
            }

            int idSala = jogadorSala.IdSala;

            var operacao = _partidaBusiness.Iniciar(idJogadorSala, idSala);

            ViewBag.ID_Sala = idSala;

            var jogadoresSala = _jogadorSalaBusiness.Listar(idSala);

            ViewBag.JogadoresSuspeitos = Mapper.Map <List <JogadorSala>, List <JogadorSuspeitoViewModel> >(jogadoresSala);

            var locais = _localBusiness.Listar();

            ViewBag.Locais = Mapper.Map <List <Local>, List <LocalViewModel> >(locais);

            this.CarregarAnotacoes(jogadorSala.Id);
            this.CarregarCartas(jogadorSala.Id);

            var jogadorSalaViewModel      = Mapper.Map <JogadorSala, JogadorSalaViewModel>(_jogadorSalaBusiness.Obter(idJogadorSala));
            var historicoPartidaViewModel = Mapper.Map <List <Historico>, List <HistoricoViewModel> >(_historicoBusiness.Listar(idSala));

            Local localAtual;

            ViewBag.PassagemSecreta = false;
            if (jogadorSala.IdLocal != null)
            {
                localAtual = _localBusiness.Obter(jogadorSala.IdLocal.Value);
                if (localAtual.IdLocalPassagemSecreta != null)
                {
                    ViewBag.PassagemSecreta = true;
                }
            }


            ViewBag.JogadorSala = jogadorSalaViewModel;
            ViewBag.Historicos  = historicoPartidaViewModel;

            return(View());
        }
        public ActionResult Listar(int idSala, int idJogadorSala)
        {
            var sala = _salaBusiness.Obter(idSala);

            if (sala == default)
            {
                return(RedirectToAction("Manter", "Sala", new Operacao("Sala não encontrada.", false)));
            }

            var jogadoresSala = _jogadorSalaBusiness.Listar(idSala);
            var jogadorSala   = jogadoresSala.SingleOrDefault(_ => _.Id == idJogadorSala);

            if (jogadorSala == default || jogadorSala.IdSala != sala.Id)
            {
                return(RedirectToAction("Manter", "Sala", new Operacao("Jogador não encontrada.", false)));
            }

            var jogador = _jogadorBusiness.Obter(jogadorSala.IdJogador);

            ViewBag.Sala            = Mapper.Map <Sala, SalaViewModel>(sala);
            ViewBag.ID_JOGADOR_SALA = idJogadorSala;
            ViewBag.NomeJogador     = jogador.Descricao;
            var jogadorSalaDono = _jogadorSalaBusiness.Obter(sala.IdJogadorSala.Value);

            ViewBag.NomeJogadorDono = _jogadorBusiness.Obter(jogadorSalaDono.IdJogador).Descricao;

            var suspeitosViewModel = Mapper.Map <List <Suspeito>, List <SuspeitoViewModel> >(_suspeitoBusiness.Listar());

            suspeitosViewModel.ForEach(suspeitoViewModel =>
            {
                jogadorSala = jogadoresSala.FirstOrDefault(_ => _.IdSuspeito == suspeitoViewModel.Id);

                if (jogadorSala != default)
                {
                    suspeitoViewModel.IdJogadorSala = jogadorSala.Id;
                    suspeitoViewModel.NickJogador   = jogadorSala != null ? _jogadorBusiness.Obter(jogadorSala.IdJogador).Descricao : "";
                }
            });

            ViewBag.QtdeJogadorPronto = suspeitosViewModel.Where(x => x.IdJogadorSala != null).Count();

            ViewBag.Suspeitos = suspeitosViewModel;

            return(View());
        }