Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. // 3 f)
  2.  
  3. /**
  4. * Calcula a forca necessaria que uma personagem e o seu aliado necessita para conquistar um certo local
  5. * @param p
  6. * @param origem
  7. * @param destino
  8. * @param caminho
  9. * @return
  10. */
  11. public double conquistarLocalComAliado(Personagem p, Local origem, Local destino, LinkedList<Local> caminho) {
  12.  
  13. double forcaAlianca = 0;
  14. Personagem p1 = null;
  15. Personagem p2 = null;
  16.  
  17. Alianca aliancaEscolhida = obterAliancaMaisForte(p);
  18.  
  19. // Vai buscar as personagens da aliança
  20. for (Edge<Personagem, Alianca> edge : mapaAliancas.edges()) {
  21.  
  22. if (edge.getElement().equals(aliancaEscolhida)) {
  23. p1 = edge.getVDest();
  24. p2 = edge.getVOrig();
  25.  
  26. forcaAlianca = (p1.getForca() + p2.getForca()) * aliancaEscolhida.getFatorCompatibilidade();
  27. }
  28. }
  29.  
  30. // verifica se o local de origem pertence a lista de locais da personagem p
  31. if (!(p.getListaLocais().contains(origem))) {
  32. return 0;
  33. }
  34.  
  35. caminho.clear();
  36.  
  37. AdjacencyMatrixGraph<Local, Integer> clone = (AdjacencyMatrixGraph<Local, Integer>) mapaEstradas.clone();
  38.  
  39. for (Local l : clone.vertices()) {
  40. if (l.getDono() != null) {
  41. if (!(l.getNome().equals(origem.getNome()))) {
  42. if (l.getDono().getNome().equals(p1.getNome()) || l.getDono().getNome().equals(p2.getNome())) {
  43. clone.removeVertex(l);
  44. }
  45. }
  46. }
  47. }
  48.  
  49. double forcaNecessaria = shortestPathWeightedVertex(clone, origem, destino, caminho);
  50.  
  51. if (forcaAlianca > forcaNecessaria) {
  52. return forcaNecessaria;
  53. }
  54.  
  55. return 0;
  56. }
  57.  
  58. /**
  59. * Obtem a aliança mais forte de uma personagem
  60. *
  61. * @param p
  62. * @return
  63. */
  64. private Alianca obterAliancaMaisForte(Personagem p) {
  65.  
  66. List<Personagem> aliados = getAliadosDePersonagem(p);
  67.  
  68. double forca = 0;
  69. Alianca aliancaEscolhida = null;
  70.  
  71. for (Personagem aliado : aliados) {
  72. Alianca c = mapaAliancas.getEdge(p, aliado).getElement();
  73. Float forcaAlianca = (p.getForca() + aliado.getForca()) * c.getFatorCompatibilidade();
  74.  
  75. if (forcaAlianca > forca) {
  76. aliancaEscolhida = c;
  77. forca = forcaAlianca;
  78. }
  79. }
  80.  
  81. return aliancaEscolhida;
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement