package monopoly; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import monopoly.partecipanti.Banca; import monopoly.partecipanti.Giocatore; import monopoly.tavola.Tavola; import monopoly.tavola.casella.Proprieta; import monopoly.util.Keyboard; public class Master { private static Master master; static final int MAX_GIOCATORI = 6; public Tavola tavola; private ArrayList giocatori = new ArrayList(); private int turno; private boolean fineGioco; public static Master getInstance() { if (master == null) { master = new Master(); } return master; } private Master() { // init della parte statica initParteStatica(); // init della parte dinamica initParteDinamica(); for (int i = 0; i < giocatori.size(); i++) { System.out.println("----------------------------"); System.out.println("| GIOCATORE "+(i+1)+" "); giocatori.get(i).stampa(); } turno = 0; fineGioco = false; gioca(); } private void initParteStatica() { // inizializzo il set delle proprietà della banca Set proprietaBanca = new HashSet(); for (int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++) { if (Tavola.getInstance().getCasella(i) instanceof Proprieta) { Proprieta proprieta = (Proprieta) Tavola.getInstance().getCasella(i); proprietaBanca.add(proprieta); } } Banca.init(proprietaBanca, 32, 12); } private void initParteDinamica() { System.out.println("Numero Giocatori: "); int numG = Keyboard.readInt(); while (numG > MAX_GIOCATORI || numG < 2) { System.out.println("Numero Giocatori non corretto (Deve essere un intero tra 2 e 6: "); numG = Keyboard.readInt(); } giocatori.clear(); String[] nomiGiocatori = new String[numG]; for (int i = 0; i < numG; i++) { System.out.println("inserisci il nome del giocatore " + (i + 1)); nomiGiocatori[i] = Keyboard.readString(); } // la banca crea ed inizializza i giocatori giocatori = Banca.getInstance().preparazioneGiocatori(nomiGiocatori); } public void gioca() { while (!fineGioco) { Giocatore giocatore = getGiocatoreCorrente(); System.out.print("Giocatore " + giocatore.getNome() + " premi un tasto per lanciare" + "i dadi"); Keyboard.readString(); spostaGiocatore(giocatore, giocatore.lanciaDadi()); } } public void spostaGiocatore(Giocatore giocatore, int valoreDado) { System.out.println("Valore Dadi: "+valoreDado); int indicePosizione = giocatore.getPosizioneCorrente(); int nuovoIndice = (indicePosizione + valoreDado) % Tavola.getInstance().getNUM_CASELLE(); if (nuovoIndice <= indicePosizione || valoreDado > Tavola.getInstance().getNUM_CASELLE()) { giocatore.passaDalVia(); } giocatore.setPosizioneCorrente(nuovoIndice); System.out.println("Il giocatore "+giocatore.getNome()+" si trova sulla casella "+Tavola.getInstance().getCasella(giocatore.getPosizioneCorrente()).getNome()); cambiaTurno(); } public void cambiaTurno() { turno = (turno + 1) % getNumberoDiGiocatori(); } private int getNumberoDiGiocatori() { return giocatori.size(); } public Giocatore getGiocatoreCorrente() { return getGiocatore(turno); } public Giocatore getGiocatore(int index) { return (Giocatore) giocatori.get(index); } }