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}