public Batalha IniciarBatalha(int id) { var usuario = Utils.Utils.ObterUsuarioLogado(db); var batalha = db.Batalhas .Include(b => b.ExercitoPreto) .Include(b => b.ExercitoBranco) .Include(b => b.Tabuleiro) .Include(b => b.Turno) .Include(b => b.Turno.Usuario) .Where(b => (b.ExercitoBranco.Usuario.Email == usuario.Email || b.ExercitoPreto.Usuario.Email == usuario.Email) && (b.ExercitoBranco != null && b.ExercitoPreto != null) && b.Id == id).FirstOrDefault(); if (batalha == null) { var resp = new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent(String.Format("Não foi possível carregar a Batalha.")), ReasonPhrase = "Não foi possível carregar a batalha." }; throw new HttpResponseException(resp); } if (batalha.Tabuleiro == null) { batalha.Tabuleiro = new Tabuleiro { Altura = 8, Largura = 8 }; } if (batalha.Estado == Batalha.EstadoBatalhaEnum.NaoIniciado) { batalha.Tabuleiro.IniciarJogo(batalha.ExercitoBranco, batalha.ExercitoPreto); Random r = new Random(); batalha.Turno = r.Next(100) < 50 ? batalha.ExercitoPreto : batalha.ExercitoBranco; batalha.Estado = Batalha.EstadoBatalhaEnum.Iniciado; db.SaveChanges(); var firebaseTabuleiro = new FirebaseTabuleiro(batalha.Tabuleiro, batalha.TurnoId); firebase.Add(firebaseTabuleiro, firebaseTabuleiro.Id); } return(batalha); }
public Batalha Jogar(Movimento movimento) { movimento.Elemento = db.ElementosDoExercitos.Find(movimento.ElementoId); if (movimento.Elemento == null) { ErroResponse(HttpStatusCode.BadRequest, "O Elemento não existe.", "O elemento informado para movimento não existe."); } movimento.Batalha = db.Batalhas.Find(movimento.BatalhaId); var usuario = Utils.Utils.ObterUsuarioLogado(db); if (usuario.Id != movimento.AutorId) { ErroResponse(HttpStatusCode.Forbidden, "O usuário tentou executar uma ação como se fosse outro usuário.", "Você não tem permissão para executar esta ação."); } Batalha batalha = Get(movimento.BatalhaId); if (movimento.AutorId != movimento.Elemento.Exercito.UsuarioId) { ErroResponse(HttpStatusCode.Forbidden, "A peça não pertence ao usuário.", "Não foi possível executar o movimento."); } if (movimento.AutorId != batalha.Turno.UsuarioId) { ErroResponse(HttpStatusCode.Forbidden, "O turno atual é do adversário.", "Você não tem permissão para executar esta ação."); } if (!batalha.JogarMovimento(movimento)) { ErroResponse(HttpStatusCode.BadRequest, "Não foi possível executar o movimento.", "Não foi possível executar o movimento."); } batalha.Turno = null; batalha.TurnoId = batalha.TurnoId == batalha.ExercitoBrancoId ? batalha.ExercitoPretoId : batalha.ExercitoBrancoId; db.SaveChanges(); var firebaseTabuleiro = new FirebaseTabuleiro(batalha.Tabuleiro, batalha.TurnoId); firebase.Update(firebaseTabuleiro, firebaseTabuleiro.Id); return(batalha); }