//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; } }
//Conta quantos vezes o herói avançou public void Avancos(GameApiResponse resposta) { if (resposta.Action == PlayerAction.GoForward) { NrAvancos++; } }
//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 }
//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; } }
//Calcula o número de fugas do inimigo public void FugasInimigo(GameApiResponse resposta) { if (resposta.Action == PlayerAction.Flee && resposta.Result == RoundResult.Success) { NrFugasInimigo++; } }
//Calcula o número de examinações de área public void ExaminarArea(GameApiResponse resposta) { if (resposta.Action == PlayerAction.SearchArea && resposta.Result == RoundResult.Success) { NrExaminacoesArea++; } }
//Conta quantos vezes o herói recuou public void Recuos(GameApiResponse resposta) { if (resposta.Action == PlayerAction.GoBack) { NrRecuos++; } }
//Conta quantas vezes o herói atacou public void Ataques(GameApiResponse resposta) { if (resposta.Action == PlayerAction.Attack) { NrAtaques++; } }
//Conta quantos intens foram encontrados public void ItensEncontrados(GameApiResponse resposta) { if (resposta.FoundItem) { NrItensEncontrados++; } }
//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; } } }
//Conta quantos inimigos foram vencidos public void InimigosVencidos(GameApiResponse resposta) { if (resposta.Action == PlayerAction.Attack && resposta.EnemyHealthPoints == 0) { NrInimigosVencidos++; } }
//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); }
//Indica se o herói está na posse da chave public void ChaveGuardada(GameApiResponse resposta) { Chave = resposta.FoundKey; if (Chave) { PosseChave = true; } }
//Atualiza os pontos de ataque do herói public void AtualizarPontosAtaque(GameApiResponse resposta) { PontosAtaque += resposta.ItemAttackEffect; // Arma if (PontosAtaque > 5) { PontosAtaque = 5; } }
//Atualiza os pontos de sorte do herói public void AtualizarPontosSorte(GameApiResponse resposta) { PontosSorte += resposta.ItemLuckEffect; // Amuleto if (PontosSorte > 5) { PontosSorte = 5; } }
//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; }
//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; } }
//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) }