siciliaguerrabot2020/Guerra/Comune.java (view raw)
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6package siciliaguerrabot2020.Guerra;
7
8import java.util.ArrayList;
9import java.util.LinkedList;
10
11/**
12 *
13 * @author Bi-Rabittoh
14 */
15public class Comune implements Comparable<Comune> {
16 private boolean vivo;
17 private String nome;
18 private Centroide pos;
19 private LinkedList<Territorio> territori;
20 private final int pop;
21 private double winrate;
22
23 public Comune(String nome, int pop, Centroide pos) {
24 this.nome = nome;
25 this.pop = pop;
26 this.pos = pos;
27 this.vivo = true;
28 territori = new LinkedList<>();
29 territori.add(new Territorio(nome, this, pos));
30 }
31
32 public boolean isVivo() {
33 return vivo;
34 }
35
36 public void kill() {
37 this.vivo = false;
38 }
39
40 public String getNome() {
41 return nome;
42 }
43
44 public int getPop() {
45 return pop;
46 }
47
48 public Centroide getPos() {
49 return pos;
50 }
51
52
53 public LinkedList<Territorio> getTerritori() {
54 return territori;
55 }
56
57
58 @Override
59 public String toString() {
60 return "Comune{" + "vivo=" + vivo + ", nome=" + nome + ", pop=" + pop + ", pos=" + pos + '}';
61 }
62
63 //FUNZIONI GEOMETRICHE
64
65 public void aggiornaCentroide(){
66 Territorio territorio;
67 Centroide temp = territori.get(0).getPos();
68 for(int i = 0; i < territori.size(); i++){
69 territorio = territori.get(i);
70
71 }
72
73
74 for (Territorio t : territori){
75 temp = temp.puntoMedio(t.getPos());
76 }
77 pos = temp;
78 }
79
80 //FUNZIONI BELLE
81 public boolean conquista(Territorio target){
82 boolean ris = false;
83 target.getProprietario().territori.remove(target);
84 if(target.getProprietario().territori.isEmpty()){
85 target.getProprietario().kill();
86 ris = true;
87 }else
88 target.getProprietario().aggiornaCentroide();
89
90 target.setProprietario(this);
91 this.territori.add(target);
92 this.aggiornaCentroide();
93 return ris;
94 }
95
96 public Territorio trovaVicino(ArrayList<Comune> lista){
97
98 Territorio trovato = new Territorio("Errore", null, null);
99 double minD = 999999999, cur;
100
101 for(int i = 0; i < lista.size(); i++){
102 Comune comune = lista.get(i);
103 //scorro i comuni
104 if(comune.isVivo() && !comune.equals(this)){
105 //mi trovo in un comune VIVO e diverso da se stesso
106 for(int j = 0; j < comune.territori.size(); j++){
107 Territorio territorio = comune.territori.get(j);
108 //mi trovo in un territorio generico di questo comune
109 cur = this.pos.distanza(territorio.getPos());
110 //oonfronto la distanza con minD
111 if(cur < minD){
112 minD = cur;
113 trovato = territorio;
114 }
115 }
116 }
117 }
118 return trovato;
119 }
120
121 @Override
122 public int compareTo(Comune target){
123 if((!this.isVivo()) && target.isVivo()){
124 return 1;
125 } else if (this.isVivo() && (!target.isVivo())){
126 return -1;
127 } else return 0;
128 }
129 //FINE FILE
130
131
132}