siciliaguerrabot2020/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;
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
22 public Comune(String nome, int pop, Centroide pos) {
23 this.nome = nome;
24 this.pop = pop;
25 this.pos = pos;
26 this.vivo = true;
27 territori = new LinkedList<>();
28 territori.add(new Territorio(nome, this, pos));
29 }
30
31 public boolean isVivo() {
32 return vivo;
33 }
34
35 public void kill() {
36 this.vivo = false;
37 }
38
39 public String getNome() {
40 return nome;
41 }
42
43 public int getPop() {
44 return pop;
45 }
46
47 public Centroide getPos() {
48 return pos;
49 }
50
51
52 public LinkedList<Territorio> getTerritori() {
53 return territori;
54 }
55
56
57 @Override
58 public String toString() {
59 return "Comune{" + "vivo=" + vivo + ", nome=" + nome + ", pop=" + pop + ", pos=" + pos + '}';
60 }
61
62 //FUNZIONI GEOMETRICHE
63
64 public void aggiornaCentroide(){
65 Territorio territorio;
66 Centroide temp = territori.get(0).getPos();
67 for(int i = 0; i < territori.size(); i++){
68 territorio = territori.get(i);
69
70 }
71
72
73 for (Territorio t : territori){
74 temp = temp.puntoMedio(t.getPos());
75 }
76 pos = temp;
77 }
78
79 //FUNZIONI BELLE
80 public boolean conquista(Territorio target){
81 boolean ris = false;
82 target.getProprietario().territori.remove(target);
83 if(target.getProprietario().territori.isEmpty()){
84 target.getProprietario().kill();
85 ris = true;
86 }else
87 target.getProprietario().aggiornaCentroide();
88
89 target.setProprietario(this);
90 this.territori.add(target);
91 this.aggiornaCentroide();
92 return ris;
93 }
94
95 public Territorio trovaVicino(ArrayList<Comune> lista){
96
97 Territorio trovato = new Territorio("Errore", null, null);
98 double minD = 999999999, cur;
99
100 for(int i = 0; i < lista.size(); i++){
101 Comune comune = lista.get(i);
102 //scorro i comuni
103 if(comune.isVivo() && !comune.equals(this)){
104 //mi trovo in un comune VIVO e diverso da se stesso
105 for(int j = 0; j < comune.territori.size(); j++){
106 Territorio territorio = comune.territori.get(j);
107 //mi trovo in un territorio generico di questo comune
108 cur = this.pos.distanza(territorio.getPos());
109 //oonfronto la distanza con minD
110 if(cur < minD){
111 minD = cur;
112 trovato = territorio;
113 }
114 }
115 }
116 }
117 return trovato;
118 }
119
120 @Override
121 public int compareTo(Comune target){
122 if((!this.isVivo()) && target.isVivo()){
123 return 1;
124 } else if (this.isVivo() && (!target.isVivo())){
125 return -1;
126 } else return 0;
127 }
128 //FINE FILE
129
130
131}