예제 #1
0
        //Atualiza os pontos de vida do herói
        public void AtualizarPontosVida(GameApiResponse resposta)
        {
            if ((NrAtaques > 7 || NrPassos > 7 || NrExaminacoesArea > 7 || NrPocoesUsadas > 7))
            {
                PontosVida -= 0.5;
                Cansaco     = true;
            }

            //Caso o herói esteja na última área e na posse de chave, não lhe deve ser retirado os 0.5 PV
            if (PosicaoHeroi == 7 && PosseChave && Cansaco)
            {
                PontosVida += 0.5;
                Cansaco     = false; //Para que na view não apareça -0.5 à frente dos PV
            }

            PontosVida -= resposta.EnemyDamageSuffered; //Dano causado pelo inimigo
            PontosVida += resposta.ItemHealthEffect;    //Mini poção ou veneno

            if (PontosVida < 0)
            {
                PontosVida = 0;
            }
            else if (PontosVida > 5)
            {
                PontosVida = 5;
            }
        }
예제 #2
0
 //Conta quantos vezes o herói avançou
 public void Avancos(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.GoForward)
     {
         NrAvancos++;
     }
 }
예제 #3
0
 //Método que atualiza o dados do jogo
 public void AtualizarJogo(GameApiResponse resposta)
 {
     ID                  = resposta.GameID;
     Item                = resposta.FoundItem;
     MoedasOuro         += resposta.GoldFound;
     Inimigo             = resposta.FoundEnemy;
     PontosVidaInimigo   = resposta.EnemyHealthPoints;
     PontosSorteInimigo  = resposta.EnemyLuckPoints;
     PontosAtaqueInimigo = resposta.EnemyAttackPoints;
     DanoInimigo         = resposta.EnemyDamageSuffered;
     ItemSurpresa(resposta);
     ChaveGuardada(resposta);
     NumeroJogadas = resposta.RoundNumber;
     AtualizarPosicao(resposta);
     InimigosVencidos(resposta);
     ItensEncontrados(resposta);
     Avancos(resposta);
     Recuos(resposta);
     FugasInimigo(resposta);
     NrPassos = NrRecuos + NrAvancos + NrFugasInimigo;
     Ataques(resposta);
     ExaminarArea(resposta);
     Resultado = resposta.Result;
     Acao      = resposta.Action;
     AtualizarPontosVida(resposta);
     AtualizarPocoes(resposta);
     AtualizarPontosSorte(resposta);
     AtualizarPontosAtaque(resposta);
     AtualizarArrayAreasExaminadas(resposta);                 //De forma a que o botão Examinar Área não apareça numa posição em que já foi examinada
     AreaExaminada           = AreasExaminadas[PosicaoHeroi - 1];
     PercentagemInvestigacao = (NrExaminacoesArea * 100) / 7; //Calcula a percentagem de areas examinadas
 }
예제 #4
0
 //Atualiza para true cada elemento/casa se a área já foi examinada
 public void AtualizarArrayAreasExaminadas(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.SearchArea && resposta.Result == RoundResult.Success)
     {
         AreasExaminadas[PosicaoHeroi - 1] = true;
     }
 }
예제 #5
0
 //Calcula o número de fugas do inimigo
 public void FugasInimigo(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.Flee && resposta.Result == RoundResult.Success)
     {
         NrFugasInimigo++;
     }
 }
예제 #6
0
 //Calcula o número de examinações de área
 public void ExaminarArea(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.SearchArea && resposta.Result == RoundResult.Success)
     {
         NrExaminacoesArea++;
     }
 }
예제 #7
0
 //Conta quantos vezes o herói recuou
 public void Recuos(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.GoBack)
     {
         NrRecuos++;
     }
 }
예제 #8
0
 //Conta quantas vezes o herói atacou
 public void Ataques(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.Attack)
     {
         NrAtaques++;
     }
 }
예제 #9
0
 //Conta quantos intens foram encontrados
 public void ItensEncontrados(GameApiResponse resposta)
 {
     if (resposta.FoundItem)
     {
         NrItensEncontrados++;
     }
 }
예제 #10
0
        //Atualiza o número de poções e os pontos de vida quando se bebe poções
        public void AtualizarPocoes(GameApiResponse resposta)
        {
            if (resposta.FoundPotion)
            {
                PocaoEncontrada = true;
                if (PocoesVida < 3)
                {
                    PocoesVida++;
                    PocoesTotais++;
                }
            }
            else
            {
                PocaoEncontrada = false;
            }
            if (resposta.Action == PlayerAction.DrinkPotion && resposta.Result == RoundResult.Success)
            {
                PocoesVida--;
                NrPocoesUsadas++;

                if (Perfil == "B")
                {
                    PontosVida = 4;
                }
                else if (Perfil == "S")
                {
                    PontosVida = 3;
                }
                else
                {
                    PontosVida = 3;
                }
            }
        }
예제 #11
0
 //Conta quantos inimigos foram vencidos
 public void InimigosVencidos(GameApiResponse resposta)
 {
     if (resposta.Action == PlayerAction.Attack && resposta.EnemyHealthPoints == 0)
     {
         NrInimigosVencidos++;
     }
 }
예제 #12
0
        //Método que joga automaticamente
        public void AutoPlay(GameApiResponse resposta, int rondas)
        {
            Estrategia(resposta);
            RoundSummary nRonda = new RoundSummary(NumeroJogadas + 1, Acao, PosicaoHeroi, NrInimigosVencidos, NrFugasInimigo, NrItensEncontrados,
                                                   PosseChave, MoedasOuro, PontosVida, PontosAtaque, PontosSorte, PocoesVida, Resultado);

            AdicionarRonda(nRonda);
        }
예제 #13
0
 //Indica se o herói está na posse da chave
 public void ChaveGuardada(GameApiResponse resposta)
 {
     Chave = resposta.FoundKey;
     if (Chave)
     {
         PosseChave = true;
     }
 }
예제 #14
0
 //Atualiza os pontos de ataque do herói
 public void AtualizarPontosAtaque(GameApiResponse resposta)
 {
     PontosAtaque += resposta.ItemAttackEffect; // Arma
     if (PontosAtaque > 5)
     {
         PontosAtaque = 5;
     }
 }
예제 #15
0
 //Atualiza os pontos de sorte do herói
 public void AtualizarPontosSorte(GameApiResponse resposta)
 {
     PontosSorte += resposta.ItemLuckEffect; // Amuleto
     if (PontosSorte > 5)
     {
         PontosSorte = 5;
     }
 }
예제 #16
0
 //Método que atualiza a posição do herói
 public void AtualizarPosicao(GameApiResponse resposta)
 {
     if ((resposta.Action == PlayerAction.GoForward || resposta.Action == PlayerAction.Flee) &&
         resposta.Result == RoundResult.Success && PosicaoHeroi < 7)
     {
         PosicaoHeroi++;
     }
     else if (resposta.Action == PlayerAction.GoBack && resposta.Result == RoundResult.Success && PosicaoHeroi > 1)
     {
         PosicaoHeroi--;
     }
     DistanciaPorta = 8 - PosicaoHeroi;
 }
예제 #17
0
        //Método que retorna o item surpresa
        public void ItemSurpresa(GameApiResponse resposta)
        {
            if (resposta.ItemHealthEffect == -2)
            {
                Veneno = true;
            }
            else
            {
                Veneno = false;
            }

            if (resposta.ItemHealthEffect == 1)
            {
                MiniPocao = true;
            }
            else
            {
                MiniPocao = false;
            }

            if (resposta.ItemAttackEffect == 1)
            {
                Arma = true;
            }
            else
            {
                Arma = false;
            }

            if (resposta.ItemLuckEffect == 2)
            {
                Amuleto = true;
            }
            else
            {
                Amuleto = false;
            }
        }
예제 #18
0
 //Estratégia para o jogo autónomo
 public void Estrategia(GameApiResponse resposta)
 {
     if (PontosVida < 1.2 && PocoesVida != 0)
     {
         resposta.Action = PlayerAction.DrinkPotion;
     }
     else
     {
         if (!PosseChave)
         {
             if (NrPassos < 7)
             {
                 if (!Inimigo)
                 {
                     if (!AreaExaminada)
                     {
                         resposta.Action = PlayerAction.SearchArea;
                     }
                     else
                     {
                         resposta.Action = PlayerAction.GoForward;
                     }
                 }
                 else
                 {
                     if (PontosVidaInimigo - PontosVida < 1)
                     {
                         resposta.Action = PlayerAction.Attack;
                     }
                     else
                     {
                         resposta.Action = PlayerAction.Flee;
                     }
                 }
             }
             else
             {
                 if (!Inimigo)
                 {
                     if (!AreaExaminada)
                     {
                         resposta.Action = PlayerAction.SearchArea;
                     }
                     else
                     {
                         resposta.Action = PlayerAction.GoBack;
                     }
                 }
                 else
                 {
                     if (PontosVidaInimigo - PontosVida < 2)
                     {
                         resposta.Action = PlayerAction.Attack;
                     }
                     else
                     {
                         resposta.Action = PlayerAction.Flee;
                     }
                 }
             }
         }
         else
         {
             if (!Inimigo && !AreaExaminada)
             {
                 resposta.Action = PlayerAction.SearchArea;
             }
             else if ((Inimigo && AreaExaminada) || (Inimigo && !AreaExaminada))
             {
                 resposta.Action = PlayerAction.Attack;
             }
             else if (!Inimigo && AreaExaminada)
             {
                 resposta.Action = PlayerAction.GoForward;
             }
         }
     }
     Acao = resposta.Action; //Para atualizar o valor da propriedade Acao que é enviada como parâmetro no pedido (controller)
 }