Пример #1
0
        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);
        }
Пример #2
0
        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);
        }