all repos — WarBot2020 @ 34d3139a35c84dab7ac25c6d3770e089ef992d39

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    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}