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 Posizione pos;
19 private LinkedList<Territorio> territori;
20 private final int pop;
21
22 public Comune(String nome, int pop, Posizione 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 Posizione getPos() {
48 return pos;
49 }
50
51 public LinkedList<Territorio> getTerritori() {
52 return territori;
53 }
54
55
56 @Override
57 public String toString() {
58 return "Comune{" + "vivo=" + vivo + ", nome=" + nome + ", pop=" + pop + ", pos=" + pos + '}';
59 }
60
61 //FUNZIONI BELLE
62 public void aggiornaCentroide(){
63 for (Territorio t : territori){
64 pos = pos.puntoMedio(t.getPos());
65 }
66 }
67
68 public boolean conquista(Territorio target){
69 boolean ris = false;
70 target.getProprietario().territori.remove(target);
71 if(target.getProprietario().territori.isEmpty()){
72 target.getProprietario().kill();
73 ris = true;
74 }else
75 target.getProprietario().aggiornaCentroide();
76
77 target.setProprietario(this);
78 this.territori.add(target);
79 this.aggiornaCentroide();
80 return ris;
81 }
82
83 public Territorio trovaVicino(ArrayList<Comune> lista){
84
85 Territorio trovato = new Territorio("Errore", null, null);
86 double minD = 999999999, cur;
87
88 for(int i = 0; i < lista.size(); i++){
89 Comune comune = lista.get(i);
90 //scorro i comuni
91 if(comune.isVivo() && !comune.equals(this)){
92 //mi trovo in un comune VIVO e diverso da se stesso
93 for(int j = 0; j < comune.territori.size(); j++){
94 Territorio territorio = comune.territori.get(j);
95 //mi trovo in un territorio generico di questo comune
96 cur = this.pos.distanza(territorio.getPos());
97 //oonfronto la distanza con minD
98 if(cur < minD){
99 minD = cur;
100 trovato = territorio;
101 }
102 }
103 }
104 }
105 return trovato;
106 }
107
108 @Override
109 public int compareTo(Comune target){
110 if((!this.isVivo()) && target.isVivo()){
111 return 1;
112 } else if (this.isVivo() && (!target.isVivo())){
113 return -1;
114 } else return 0;
115 }
116 //FINE FILE
117
118
119}