all repos — WarBot2020 @ c1f88e5cbc8585fdf5e92aff974a0b515bff2f02

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

SiciliaGuerraBot2020.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.io.BufferedReader;
  9import java.io.FileReader;
 10import java.io.IOException;
 11import java.util.ArrayList;
 12import java.util.Collections;
 13import java.util.Scanner;
 14import java.util.StringTokenizer;
 15
 16/**
 17 *
 18 * @author Bi-Rabittoh
 19 */
 20public class SiciliaGuerraBot2020 {
 21
 22    /**
 23     * @param args the command line arguments
 24     */
 25    public static void main(String[] args) {
 26        String nomefile = "data.txt";
 27        int soglia_popolazione = 9000;
 28        
 29        //LEGGO I DATI DA FILE
 30        ArrayList<Comune> comuni_unfiltered = new ArrayList<>();
 31        Centroide temp;
 32        BufferedReader reader;
 33        StringTokenizer st;
 34        try {
 35            reader = new BufferedReader(new FileReader(nomefile));
 36            String line = reader.readLine();
 37            while (line != null){
 38                st = new StringTokenizer(line);
 39                comuni_unfiltered.add(new Comune(st.nextToken(), Integer.parseInt(st.nextToken()), new Centroide(Double.parseDouble(st.nextToken()), Double.parseDouble(st.nextToken()))));
 40                line = reader.readLine();
 41            }
 42        } catch (IOException e){
 43            System.out.println("File non trovato");
 44        }
 45        
 46        //FILTRO LE CITTA' PER POPOLAZIONE
 47        ArrayList<Comune> comuni = new ArrayList<>();
 48        for(Comune c : comuni_unfiltered){
 49            if(c.getPop() >= soglia_popolazione)
 50                comuni.add(c);
 51        }
 52        System.out.println("I comuni in guerra sono " + comuni.size() + ":");
 53        for(Comune c : comuni){
 54            System.out.println(c.getNome());
 55        }
 56        suspance();
 57        Comune vincitore = combatteteSchiavi(comuni);
 58        System.out.println("Il vincitore è " + vincitore.getNome() + " con " + vincitore.getTerritori().size() + " territori");
 59        
 60        //todo: analizzare la probabilità di vittoria di ciascun comune
 61        
 62        //FINE MAIN
 63    }
 64    
 65    private static int randomRange(int min, int max) {
 66        if (min >= max) {
 67            throw new IllegalArgumentException("Il secondo parametro deve essere maggiore del primo");
 68	}
 69	return (int)(Math.random() * ((max - min) + 1)) + min;
 70    }
 71    
 72    private static Comune combatteteSchiavi(ArrayList<Comune> lista){
 73        
 74        int turno = 1;
 75        Comune attaccante;
 76        Territorio vittima;
 77        int vivi = lista.size();
 78        int random;
 79        while(true){
 80            //scelgo un comune casuale come attaccante
 81            random = randomRange(0, vivi - 1);
 82            attaccante = lista.get(random);
 83            vittima = attaccante.trovaVicino(lista);
 84            if(attaccante.conquista(vittima))
 85                vivi--;
 86            System.out.println("Turno " + turno + ": " + attaccante.getNome() + " conquista il territorio di " + vittima.getNome() + " e arriva a " + attaccante.getTerritori().size() + " territori");
 87            Collections.sort(lista);
 88            //controllo se la partita è finita
 89            if (vivi == 1){
 90                break;
 91            }
 92            
 93            turno++;
 94        }
 95        return attaccante;
 96    }
 97    
 98    public static void suspance(){
 99        System.out.println("Al mio \"INVIO\" scatenate l'inferno...");
100        Scanner scanner = new Scanner(System.in);
101        scanner.nextLine();
102    }
103    
104    public static void currentStatus(ArrayList<Comune> comuni){
105        //fine turno. DEBUG TIME
106            for(Comune c : comuni){
107                System.out.println(c.getNome() + ": Territori:");
108                for(Territorio t : c.getTerritori()){
109                    System.out.println("\t" + t.getNome());
110                }
111                System.out.println();
112            }
113            System.out.println("\n");
114            //pause();
115            //FINE DEBUG*/
116    }
117}