all repos — WarBot2020 @ a4fa04af42abbf4313e7446a6f31e40efc4f54c0

Bootleg version of "WorldWarBot 2020" done in Java and without a map.

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}