public string SelecionarSuspeito(int idSala, int idJogadorSala, int idSuspeito) { try { var sala = _salaBusiness.Obter(idSala); if (sala == default) { return(JsonConvert.SerializeObject(new Operacao("Sala não encontrada.", false))); } var jogadorSala = _jogadorSalaBusiness.Obter(idJogadorSala); if (jogadorSala == default) { return(JsonConvert.SerializeObject(new Operacao("Jogador Sala não encontrado.", false))); } var suspeito = _suspeitoBusiness.Obter(idSuspeito); if (suspeito == default) { return(JsonConvert.SerializeObject(new Operacao("Suspeito não encontrado.", false))); } if (jogadorSala.IdSala != sala.Id) { return(JsonConvert.SerializeObject(new Operacao("Jogador Sala não pertence a sala passada.", false))); } var suspeitoDesconsiderado = jogadorSala.IdSuspeito == null ? null : _suspeitoBusiness.Obter(jogadorSala.IdSuspeito.Value); jogadorSala.AlterarSuspeito(suspeito.Id); _jogadorSalaBusiness.Alterar(jogadorSala); var jogador = _jogadorBusiness.Obter(jogadorSala.IdJogador); var retorno = Json(new { DescricaoJogador = jogador.Descricao, DescricaoSuspeitoSelecionado = suspeito.Descricao, DescricaoSuspeitoDesconsiderado = suspeitoDesconsiderado == null ? "" : suspeitoDesconsiderado.Descricao }, "json"); var operacao = new Operacao(JsonConvert.SerializeObject(retorno), true); return(JsonConvert.SerializeObject(operacao)); } catch (Exception ex) { return(JsonConvert.SerializeObject(new Operacao(ex.Message, false))); } }
public List <AnotacaoSuspeito> Listar(int idJogadorSala) { var lista = _anotacaoSuspeitoRepository.Listar(idJogadorSala); lista.ForEach(_ => _.Suspeito = _suspeitoBusiness.Obter(_.IdSuspeito)); return(lista); }
private Operacao RealizarPalpite(int idSala, int idJogadorSala, int idLocal, int idSuspeito, int idArma) { var jogadorSala = _jogadorSalaBusiness.Obter(idJogadorSala); if (jogadorSala == default && jogadorSala.IdSala != idSala) { return(new Operacao("Jogador não encontrado", false)); } var jogadoresSala = _jogadorSalaBusiness.Listar(idSala); if (jogadoresSala.Count(_ => _.Jogando) <= 1) { return(new Operacao("Não é possível realizar mais palpites, pois há apenas 1 jogador", false)); } var crime = _crimeBusiness.Obter(idSala); if (crime == default) { return(new Operacao("Crime da sala informada não encontrado", false)); } if (crime.Solucionado()) { return(new Operacao("A partida acabou, o caso já foi solucionado", false)); } if (!jogadorSala.Jogando) { return(new Operacao("Jogador não está mais jogando", false)); } if (!jogadorSala.MinhaVez()) { return(new Operacao("Não está na vez desse jogador.", false)); } if (jogadorSala.RealizouPalpite) { return(new Operacao("Só é permitido realizar 1 palpite por rodada.", false)); } MoverJogadorSalaParaLocal(idSuspeito, idSala, idLocal); var armaPaupite = _armaBusiness.Obter(idArma); var localPaupite = _localBusiness.Obter(idLocal); var suspeitoPaupite = _suspeitoBusiness.Obter(idSuspeito); // Registra palpite no histórico da sala. var jogador = _jogadorBusiness.Obter(jogadorSala.IdJogador); _historicoBusiness.Adicionar(new Historico(idSala, $"O jogador {jogador.Descricao} palpitou as seguintes as cartas {armaPaupite.Descricao} (arma), {suspeitoPaupite.Descricao} (suspeito) e {localPaupite.Descricao} (local)")); jogadorSala.PalpiteRealizado(); _jogadorSalaBusiness.Alterar(jogadorSala); // Ordena jogadores à esquerda do jogador var jogadoresSalaOrdenado = jogadoresSala.Where(_ => _.NumeroOrdem > jogadorSala.NumeroOrdem && _.Jogando) .OrderBy(_ => _.NumeroOrdem).ToList(); jogadoresSalaOrdenado.AddRange(jogadoresSala.Where(_ => _.NumeroOrdem < jogadorSala.NumeroOrdem && _.Jogando) .OrderBy(_ => _.NumeroOrdem).ToList()); foreach (var jogadorSalaEsquerda in jogadoresSalaOrdenado) { var arma = _armaJogadorSalaBusiness.Obter(idArma, jogadorSalaEsquerda.Id); var local = _localJogadorSalaBusiness.Obter(idLocal, jogadorSalaEsquerda.Id); var suspeito = _suspeitoJogadorSalaBusiness.Obter(idSuspeito, jogadorSalaEsquerda.Id); if (arma == default && local == default && suspeito == default) { continue; } List <TipoCarta> tiposcarta = new List <TipoCarta>(); if (arma != default) { tiposcarta.Add(TipoCarta.Arma); } if (local != default) { tiposcarta.Add(TipoCarta.Local); } if (suspeito != default) { tiposcarta.Add(TipoCarta.Suspeito); } var jogadorComCarta = _jogadorBusiness.Obter(jogadorSalaEsquerda.IdJogador); _historicoBusiness.Adicionar(new Historico(idSala, $"O jogador {jogadorComCarta.Descricao} mostrou uma carta ao jogador {jogador.Descricao}")); // Sorteia a carta que que será revelado por conta do palpite switch (tiposcarta[new Random().Next(0, tiposcarta.Count)]) { case TipoCarta.Arma: return(new Operacao($"O jogador {jogadorComCarta.Descricao} lhe mostrou a carta {armaPaupite.Descricao}")); case TipoCarta.Local: return(new Operacao($"O jogador {jogadorComCarta.Descricao} lhe mostrou a carta {localPaupite.Descricao}")); case TipoCarta.Suspeito: return(new Operacao($"O jogador {jogadorComCarta.Descricao} lhe mostrou a carta {suspeitoPaupite.Descricao}")); } } Historico historico = _historicoBusiness.Adicionar(new Historico(idSala, "Nenhum jogador possui as cartas palpitadas")); return(new Operacao(historico.Descricao)); }