diff --git a/change.it.iml b/change.it.iml new file mode 100644 index 0000000..b510261 --- /dev/null +++ b/change.it.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/core/src/main/java/Runner.java b/core/src/main/java/Runner.java index 0105709..953804b 100644 --- a/core/src/main/java/Runner.java +++ b/core/src/main/java/Runner.java @@ -1,8 +1,6 @@ -package core.src.main.java; - -import core.src.main.java.service.implementazione.*; -import core.src.main.java.service.*; -import core.src.main.java.datamodel.*; +import service.implementazione.*; +import service.*; +import datamodel.*; import java.io.FileInputStream; import java.io.IOException; @@ -15,62 +13,9 @@ public class Runner { public static void main(String[] args) { - //inizializzo gioco - System.out.println("Benvenuto nel Gioco dell'Oca!"); - int numeroFacce = CommandLineSingleton.getInstance().readIntegerUntilPossibleValue(new Integer[]{6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}); - Dado dado = new Dado(numeroFacce); - - int numeroGiocatori = CommandLineSingleton.getInstance().readIntegerUntilPossibleValue(new Integer[]{2, 3, 4, 5, 6}); - List giocatori = new ArrayList<>(); - for (int i = 0; i < numeroGiocatori; i++) { - String nome = CommandLineSingleton.getInstance().readString("Inserisci il nome del giocatore " + (i + 1)); - giocatori.add(new Giocatore(nome)); - } - - //creo tabellone - System.out.println("Inserici il numero delle caselle"); - Properties properties = new Properties(); - Integer[] opzioniCaselle = {40, 60, 80}; // Default - - try (FileInputStream fis = new FileInputStream("config.properties")) { - properties.load(fis); - String[] opzioni = properties.getProperty("opzioniCaselle", "40,60,80").split(","); - opzioniCaselle = new Integer[opzioni.length]; - for (int i = 0; i < opzioni.length; i++) { - opzioniCaselle[i] = Integer.parseInt(opzioni[i].trim()); - } - } catch (IOException | NumberFormatException e) { - System.out.println("Errore nel caricamento delle opzioni. Uso valori di default: 40, 60, 80."); - } - - int numeroCaselle = CommandLineSingleton.getInstance().readIntegerUntilPossibleValue(opzioniCaselle); - Tabellone tabellone = new Tabellone(numeroCaselle); - //creo istanza gioco - Gioco gioco = new Gioco(numeroGiocatori, numeroCaselle, numeroFacce); - //creo gioco - boolean partitaInCorso = true; - while (partitaInCorso) { - for (Giocatore giocatore : giocatori) { - if (!partitaInCorso) break; - System.out.println("\nTurno di " + giocatore.getNome()); - int tiro = dado.lancia(); - System.out.println(giocatore.getNome() + " ha tirato un " + tiro); - - int nuovaPosizione = giocatore.getPosizione() + tiro; - if (nuovaPosizione == tabellone.getNumeroCaselle()) { - System.out.println(giocatore.getNome() + " ha vinto la partita!"); - partitaInCorso = false; - break; - } else if (nuovaPosizione > tabellone.getNumeroCaselle()) { - int posizioneInEccesso = nuovaPosizione - tabellone.getNumeroCaselle(); - nuovaPosizione -= posizioneInEccesso; - } - giocatore.setPosizione(nuovaPosizione); - tabellone.getCasella(nuovaPosizione).attivaEffetto(giocatore, gioco); - } - } - System.out.println("Partita terminata!"); + Tabellone tabellone = TabelloneFactory.creaTabellone(100); + new TabelloneImplementazione(tabellone).printTabellone(); } } diff --git a/core/src/main/java/datamodel/Casella.java b/core/src/main/java/datamodel/Casella.java index 79b98a9..d40be93 100644 --- a/core/src/main/java/datamodel/Casella.java +++ b/core/src/main/java/datamodel/Casella.java @@ -1,52 +1,10 @@ package datamodel; +/** + * Classe astratta che rappresenta una casella del tabellone + * ha semplicemente un metodo astratto che restituisce una stringa + * che serve per stampare il tabellone. + */ public abstract class Casella { - - public Casella(int posizione) { - this.posizione = posizione; - } - - //Ogni casella ha un codice che la identifica e - // che viene usato per la stampa a video. - abstract String getCodice(); - private Tabellone tabellone; - private int numeroCasella = tabellone.getNumeroCaselle(); - private int posizione; - private boolean casellaSpeciale = false; - - public int getNumeroCasella() { - return numeroCasella; - } - public void setNumeroCasella(int numeroCasella) { - this.numeroCasella = numeroCasella; - } - - public Casella(int posizione, Tabellone tabellone, boolean casellaSpeciale) { - this.posizione = posizione; - this.tabellone = tabellone; - this.numeroCasella = tabellone.getNumeroCaselle(); - this.casellaSpeciale = false; - } - public Casella(boolean casellaSpeciale) { - this.casellaSpeciale = casellaSpeciale; - } - public int getPosizione() { - return posizione; - } - - public int getNumeroCaselle() { - return numeroCasella; - } - - public void attivaEffetto(Giocatore giocatore, Gioco gioco) { - // Metodo da sovrascrivere nelle sottoclassi speciali - } - public boolean isCasellaSpeciale() { - return casellaSpeciale; - } - public void setCasellaSpeciale(boolean casellaSpeciale) { - this.casellaSpeciale = casellaSpeciale; - } - - -} //int numero, metodo attivaEffetto(Giocatore giocatore) \ No newline at end of file + public abstract String toString(); +} \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaFinale.java b/core/src/main/java/datamodel/CasellaFinale.java new file mode 100644 index 0000000..335dee0 --- /dev/null +++ b/core/src/main/java/datamodel/CasellaFinale.java @@ -0,0 +1,26 @@ +package datamodel; + +/** + * Classe che rappresenta una casella finale. + * Questa classe fa uso del singleton pattern(lazy) perche' + * la casella finale e' unica. + */ +public class CasellaFinale extends Casella{ + + //istanza unica della casella finale + private static CasellaFinale instance = null; + + //costruttore privato per evitare che venga creata piu' di una casella finale + private CasellaFinale(){} + + public static CasellaFinale getInstance() { + if (instance == null) + instance = new CasellaFinale(); + return instance; + } + + @Override + public String toString() { + return "\uD83C\uDFC1 "; + } +} diff --git a/core/src/main/java/datamodel/CasellaLabirinto.java b/core/src/main/java/datamodel/CasellaLabirinto.java index 84124ea..4d104a4 100644 --- a/core/src/main/java/datamodel/CasellaLabirinto.java +++ b/core/src/main/java/datamodel/CasellaLabirinto.java @@ -1,8 +1,9 @@ package datamodel; public class CasellaLabirinto extends CasellaSpeciale{ - @Override - public void attivaEffetto(Giocatore giocatore, Gioco gioco) { + @Override + public String toString() { + return "\uD83D\uDD19"; } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaLocanda.java b/core/src/main/java/datamodel/CasellaLocanda.java index 061fb9f..48bf899 100644 --- a/core/src/main/java/datamodel/CasellaLocanda.java +++ b/core/src/main/java/datamodel/CasellaLocanda.java @@ -2,4 +2,8 @@ public class CasellaLocanda extends CasellaSpeciale{ + @Override + public String toString() { + return "\uD83C\uDF7A"; + } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaMorra.java b/core/src/main/java/datamodel/CasellaMorra.java index 96745d0..6394774 100644 --- a/core/src/main/java/datamodel/CasellaMorra.java +++ b/core/src/main/java/datamodel/CasellaMorra.java @@ -1,4 +1,8 @@ package datamodel; public class CasellaMorra extends CasellaSpeciale{ + @Override + public String toString() { + return "\uD83E\uDEA8"; + } } diff --git a/core/src/main/java/datamodel/CasellaNormale.java b/core/src/main/java/datamodel/CasellaNormale.java index eaf873a..a6f50d5 100644 --- a/core/src/main/java/datamodel/CasellaNormale.java +++ b/core/src/main/java/datamodel/CasellaNormale.java @@ -1,13 +1,10 @@ package datamodel; public class CasellaNormale extends Casella { - public CasellaNormale(int posizione) { - super(posizione); - } - @Override - public void effetto(Giocatore giocatore){ - System.out.println(giocatore.getNome() + " è finito sulla casella "+giocatore.getPosizione()); - } + @Override + public String toString() { + return "\uD83D\uDD32"; // 3 spazi rappresentano una casella normale + } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaOca.java b/core/src/main/java/datamodel/CasellaOca.java index 6bb4678..2308ee5 100644 --- a/core/src/main/java/datamodel/CasellaOca.java +++ b/core/src/main/java/datamodel/CasellaOca.java @@ -2,4 +2,8 @@ public class CasellaOca extends CasellaSpeciale{ + @Override + public String toString() { + return "\uD83E\uDDA2"; + } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaPonte.java b/core/src/main/java/datamodel/CasellaPonte.java index 29b2d11..14b4b4b 100644 --- a/core/src/main/java/datamodel/CasellaPonte.java +++ b/core/src/main/java/datamodel/CasellaPonte.java @@ -2,4 +2,8 @@ public class CasellaPonte extends CasellaSpeciale { + @Override + public String toString() { + return "⏩"; + } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaPrigione.java b/core/src/main/java/datamodel/CasellaPrigione.java index a0fab05..f05e1f0 100644 --- a/core/src/main/java/datamodel/CasellaPrigione.java +++ b/core/src/main/java/datamodel/CasellaPrigione.java @@ -1,41 +1,8 @@ package datamodel; -import datamodel.*; public class CasellaPrigione extends CasellaSpeciale{ - private Giocatore prigioniero; - public CasellaPrigione(int posizione) { - super(posizione); - this.prigioniero = null; - } - - public CasellaPrigione() { - super(prigioniero); - } - - public void attivaEffetto(Giocatore giocatore, Gioco gioco) { - if (prigioniero == null) { - System.out.println(giocatore.getNome() + " è finito in prigione! Attendi che qualcuno ti liberi."); - prigioniero = giocatore; - giocatore.setTurnoSaltato(true); - giocatore.setInPrigione(true); - } else { //se c'è gia un prigioniero - System.out.println(giocatore.getNome() + " arriva in prigione e libera " + prigioniero.getNome() + "!"); - prigioniero.setTurnoSaltato(false); - prigioniero.setInPrigione(false); - prigioniero = giocatore; - giocatore.setTurnoSaltato(true); - giocatore.setInPrigione(true); - } - } - public boolean haPrigioniero(){ - return prigioniero != null; - } - public Giocatore getPrigioniero() { - return prigioniero; - } - public void setPrigioniero(Giocatore prigioniero) { - this.prigioniero = prigioniero; - } - public String getCodice() { + @Override + public String toString() { + return "\uD83D\uDE94"; } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaScheletro.java b/core/src/main/java/datamodel/CasellaScheletro.java index 33cdbae..01fc65d 100644 --- a/core/src/main/java/datamodel/CasellaScheletro.java +++ b/core/src/main/java/datamodel/CasellaScheletro.java @@ -1,4 +1,10 @@ package datamodel; + public class CasellaScheletro extends CasellaSpeciale{ + + @Override + public String toString() { + return "\uD83D\uDC80"; + } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaSpeciale.java b/core/src/main/java/datamodel/CasellaSpeciale.java index cd99489..6110687 100644 --- a/core/src/main/java/datamodel/CasellaSpeciale.java +++ b/core/src/main/java/datamodel/CasellaSpeciale.java @@ -1,11 +1,5 @@ package datamodel; public abstract class CasellaSpeciale extends Casella { - boolean casellaSpeciale = true; - public CasellaSpeciale(boolean casellaSpeciale) { - super(casellaSpeciale); - } - public abstract void attivaEffetto(Giocatore giocatore, Gioco gioco);{ - //override nelle sottoclassi - } + } \ No newline at end of file diff --git a/core/src/main/java/datamodel/CasellaTris.java b/core/src/main/java/datamodel/CasellaTris.java index 8933a21..bb12095 100644 --- a/core/src/main/java/datamodel/CasellaTris.java +++ b/core/src/main/java/datamodel/CasellaTris.java @@ -2,4 +2,8 @@ public class CasellaTris extends CasellaSpeciale{ + @Override + public String toString() { + return "✖\uFE0F"; + } } diff --git a/core/src/main/java/datamodel/Computer.java b/core/src/main/java/datamodel/Computer.java index d0e7a28..847ec00 100644 --- a/core/src/main/java/datamodel/Computer.java +++ b/core/src/main/java/datamodel/Computer.java @@ -1,3 +1,4 @@ +/* package datamodel; public class Computer extends Giocatore { @@ -8,4 +9,4 @@ public Computer(String nome) { @Override public boolean isComputer() { return true; } -} //aggiungi metodo scegli mossa auto \ No newline at end of file +} //aggiungi metodo scegli mossa auto*/ diff --git a/core/src/main/java/datamodel/Giocatore.java b/core/src/main/java/datamodel/Giocatore.java index 5278189..dd25d59 100644 --- a/core/src/main/java/datamodel/Giocatore.java +++ b/core/src/main/java/datamodel/Giocatore.java @@ -1,3 +1,4 @@ +/* package datamodel; import datamodel.*; import java.io.Serializable; //per salvare lo stato su tutti i file @@ -80,4 +81,4 @@ public boolean isComputer(){ return isComputer; } -} \ No newline at end of file +}*/ diff --git a/core/src/main/java/datamodel/Gioco.java b/core/src/main/java/datamodel/Gioco.java index 3047f8c..cf8a71c 100644 --- a/core/src/main/java/datamodel/Gioco.java +++ b/core/src/main/java/datamodel/Gioco.java @@ -1,3 +1,4 @@ +/* package datamodel; import java.io.FileOutputStream; @@ -113,3 +114,4 @@ public void muoviGiocatore (Giocatore giocatore, Gioco gioco) { } } +*/ diff --git a/core/src/main/java/datamodel/Mossa.java b/core/src/main/java/datamodel/Mossa.java index 656a374..168ee0f 100644 --- a/core/src/main/java/datamodel/Mossa.java +++ b/core/src/main/java/datamodel/Mossa.java @@ -1,3 +1,4 @@ +/* package datamodel; import java.io.Serializable; @@ -80,4 +81,4 @@ public String toString() { rigaArrivo, colonnaArrivo, "ninete"); } -} \ No newline at end of file +}*/ diff --git a/core/src/main/java/datamodel/Tabellone.java b/core/src/main/java/datamodel/Tabellone.java index 27e711f..a155712 100644 --- a/core/src/main/java/datamodel/Tabellone.java +++ b/core/src/main/java/datamodel/Tabellone.java @@ -3,95 +3,27 @@ import java.util.ArrayList; import java.util.Collections; import java.io.Serializable; //per salvare lo stato su tutti i file +import java.util.Iterator; /** * Questa classe rappresenta il tabellone del gioco tramite un arrayList di caselle */ -public class Tabellone implements Serializable { - private int numeroCaselle; - private ArrayList tabellone; - -/** - * Prende in input un intero n e crea un tabellone di n caselle - * */ - public Tabellone(int n) { - this.tabellone = new ArrayList(); - this.numeroCaselle = (int)(n*0.8);//80% delle caselle sono normali. - int numeroCaselleRimanenti = n; - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaNormale()); - } - numeroCaselle = (int)(n*0.1);//10% delle caselle sono Oca. - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaOca()); - } - numeroCaselle = (int)(n*0.02);//2% delle caselle sono Ponte. - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaPonte()); - } - numeroCaselle = (int)(n*0.01);//Ogni tipo di casella rimanente e' 1% del totale - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaLabirinto()); - } - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaLocanda()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaPrigione()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaScheletro()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaMorra()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaTris()); - - /* - * Si noti che il numero di caselle non supera n perche' si calcola il 98% e per - * ogni percentuale di n che si prende si arrotonda per diffetto. - * Quindi se n e' multiplo di 100 si avra' un numero di caselle inferiore a n perche' ccalcoliamo il 98% - * se non lo e' si avra' un numero di caselle inferiore a n perche' si arrotonda per difetto. - * */ - - - //-1 perche' l'ultima casella deve essere normale quindi viene aggiunta dopo di mischiare. - for(int i = 0; i < numeroCaselleRimanenti-1; i++) { - this.tabellone.add(new CasellaNormale()); - } - - Collections.shuffle(this.tabellone); - - //aggiungo l'ultima casella normale - this.tabellone.add(new CasellaNormale()); +public class Tabellone{ + private ArrayList tabellone; + //Riceve in input un arraylist di caselle e crea il tabellone; + public Tabellone(ArrayList caselle){ + this.tabellone = caselle; } - public int getNumeroCaselle() { - return numeroCaselle; + public int size(){ + return tabellone.size(); } - public ArrayList getTabellone() { - return tabellone; - } - public Casella getCasella(int posizione) { - return tabellone.get(posizione); - } - public void printTabellone() { - for (int i = 0; i < tabellone.size(); i++) { - System.out.println("Casella " + i + ": " + tabellone.get(i).getClass().getSimpleName()); - } + public Casella get(int i){ + return tabellone.get(i); } - public void attivaEffetto(Giocatore giocatore, Gioco gioco) { - // Metodo da sovrascrivere nelle sottoclassi speciali - } } \ No newline at end of file diff --git a/core/src/main/java/datamodel/Umano.java b/core/src/main/java/datamodel/Umano.java index 91cea83..1e59910 100644 --- a/core/src/main/java/datamodel/Umano.java +++ b/core/src/main/java/datamodel/Umano.java @@ -1,3 +1,4 @@ +/* package datamodel; class Umano extends Giocatore { @@ -11,4 +12,4 @@ public boolean isComputer(){ return false; } -} //metodo scegli mossa \ No newline at end of file +} //metodo scegli mossa*/ diff --git a/core/src/main/java/service/GiocatoreService.java b/core/src/main/java/service/GiocatoreService.java index 7fc5998..ae91bf3 100644 --- a/core/src/main/java/service/GiocatoreService.java +++ b/core/src/main/java/service/GiocatoreService.java @@ -1,3 +1,4 @@ +/* package service; import datamodel.Mossa; @@ -7,3 +8,4 @@ public interface GiocatoreService { public Mossa getMossa(Integer rigaPartenza, Integer colonnaPartenza, Integer rigaArrivo, Integer colonnaArrivo,Giocatore giocatore); ModeEnumeration getMode(); } +*/ diff --git a/core/src/main/java/service/GiocoService.java b/core/src/main/java/service/GiocoService.java index c343fb6..0798b08 100644 --- a/core/src/main/java/service/GiocoService.java +++ b/core/src/main/java/service/GiocoService.java @@ -1,3 +1,4 @@ +/* package service; import java.io.IOException; @@ -11,58 +12,80 @@ //turni salvataggio caricamento e fine parita public interface GiocoService { - /* + */ +/* * Inizializza la partita con un numero di giocatori, numero di caselle e numero di facce per il dado. - */ + *//* + public Gioco inizializzaGioco(int numeroGiocatori, int numeroCaselle, int numeroFacce); - /* + */ +/* * Avvia la partita e gestisce il ciclo dei turni. - */ + *//* + public void iniziaGioco(Gioco gioco); - /* + */ +/* * Esegue il turno del giocatore corrente. - */ + *//* + public void eseguiTurno(Gioco gioco) throws Exception; - /* + */ +/* * Controlla se la partita è terminata (un giocatore ha vinto). - */ + *//* + public boolean partitaTerminata(Gioco gioco); - /* + */ +/* * Salva lo stato della partita in un file. - */ + *//* + public void salvaPartita(Gioco gioco, String filename) throws IOException; - /* + */ +/* * Carica una partita salvata da un file. - */ + *//* + public Gioco caricaPartita(String filename) throws IOException, ClassNotFoundException; - /* + */ +/* * Recupera lo stato del giocatore corrente. - */ + *//* + public Giocatore getGiocatoreCorrente(Gioco gioco); - /* + */ +/* * Gestisce il movimento del giocatore in base ai passi lanciati dal dado. - */ + *//* + public void muoviGiocatore(Gioco gioco, Giocatore giocatore, int passi); - /* + */ +/* * Gestisce gli effetti speciali delle caselle (ad esempio casella Oca, Ponte, Morra, ecc.). - */ + *//* + public void gestisciEffettiCasella(Gioco gioco, Giocatore giocatore); - /* + */ +/* * Undo dell'ultima mossa effettuata da un giocatore. - */ + *//* + public void undo(Gioco gioco) throws Exception; - /* + */ +/* * Riprende la partita dal punto di salvataggio. - */ + *//* + public void riprendiPartita(Gioco gioco); -} \ No newline at end of file +}*/ diff --git a/core/src/main/java/service/implementazione/CommandLineSingleton.java b/core/src/main/java/service/implementazione/CommandLineSingleton.java index d6dd38e..f6d5415 100644 --- a/core/src/main/java/service/implementazione/CommandLineSingleton.java +++ b/core/src/main/java/service/implementazione/CommandLineSingleton.java @@ -1,4 +1,4 @@ -package implementazione; +package service.implementazione; import java.util.List; import java.util.Scanner; diff --git a/core/src/main/java/service/implementazione/ComputerServiceImpl.java b/core/src/main/java/service/implementazione/ComputerServiceImpl.java index 2c607e9..7ec6fa2 100644 --- a/core/src/main/java/service/implementazione/ComputerServiceImpl.java +++ b/core/src/main/java/service/implementazione/ComputerServiceImpl.java @@ -1,3 +1,4 @@ +/* package service.implementazione; import datamodel.*; import datamodel.Giocatore; @@ -41,3 +42,4 @@ private void gestisciCasellaSpeciale(Giocatore giocatore, Gioco gioco) { } } +*/ diff --git a/core/src/main/java/service/implementazione/GiocatoreServiceImpl.java b/core/src/main/java/service/implementazione/GiocatoreServiceImpl.java index 8e1bcf8..be26746 100644 --- a/core/src/main/java/service/implementazione/GiocatoreServiceImpl.java +++ b/core/src/main/java/service/implementazione/GiocatoreServiceImpl.java @@ -1,3 +1,4 @@ +/* package service.implementazione; import datamodel.*; import service.GiocoService; @@ -143,4 +144,4 @@ public void riprendiPartita(Gioco gioco) { // Riprende la partita dal punto in cui è stata salvata System.out.println("Partita ripresa."); } -} \ No newline at end of file +}*/ diff --git a/core/src/main/java/service/implementazione/TabelloneFactory.java b/core/src/main/java/service/implementazione/TabelloneFactory.java new file mode 100644 index 0000000..6a4c65c --- /dev/null +++ b/core/src/main/java/service/implementazione/TabelloneFactory.java @@ -0,0 +1,71 @@ +package service.implementazione; + +import datamodel.*; +import java.util.*; + +//Questa classe è una factory che si occupa di creare il tabellone di gioco +public class TabelloneFactory { + + public static Tabellone creaTabellone(int n) { + ArrayList list = new ArrayList<>(); + + int numeroCaselle = (int) (n * 0.8);//80% delle caselle sono normali. + int numeroCaselleRimanenti = n; + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) { + list.add(new CasellaNormale()); + } + numeroCaselle = (int) (n * 0.1);//10% delle caselle sono Oca. + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) { + list.add(new CasellaOca()); + } + numeroCaselle = (int) (n * 0.02);//2% delle caselle sono Ponte. + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) { + list.add(new CasellaPonte()); + } + numeroCaselle = (int) (n * 0.01);//Ogni tipo di casella rimanente e' 1% del totale + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) { + list.add(new CasellaLabirinto()); + } + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) + list.add(new CasellaLocanda()); + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) + list.add(new CasellaPrigione()); + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) + list.add(new CasellaScheletro()); + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) + list.add(new CasellaMorra()); + numeroCaselleRimanenti -= numeroCaselle; + for (int i = 0; i < numeroCaselle; i++) + list.add(new CasellaTris()); + + /* + * Si noti che il numero di caselle non supera n perche' si calcola il 98% e per + * ogni percentuale di n che si prende si arrotonda per diffetto. + * Quindi se n e' multiplo di 100 si avra' un numero di caselle inferiore a n perche' ccalcoliamo il 98% + * se non lo e' si avra' un numero di caselle inferiore a n perche' si arrotonda per difetto. + * */ + + + //-1 perche' l'ultima casella deve essere CasellaFinale quindi viene aggiunta dopo di mischiare. + for (int i = 0; i < numeroCaselleRimanenti - 1; i++) { + list.add(new CasellaNormale()); + } + + Collections.shuffle(list); + + //aggiungo l'ultima casella normale + list.add(CasellaFinale.getInstance()); + + + return new Tabellone(list); //Ritorna il tabellone gia' costruito + + } +} diff --git a/core/src/main/java/service/implementazione/TabelloneImplementazione.java b/core/src/main/java/service/implementazione/TabelloneImplementazione.java new file mode 100644 index 0000000..8f6b4e9 --- /dev/null +++ b/core/src/main/java/service/implementazione/TabelloneImplementazione.java @@ -0,0 +1,35 @@ +package service.implementazione; + +import datamodel.Tabellone; +import datamodel.Casella; +/** + * Questa classe implementa il tabellone + */ +public class TabelloneImplementazione { + private Tabellone tabellone; + + public TabelloneImplementazione(Tabellone tabellone){ + this.tabellone = tabellone; + } + + //Si deve ancora implementare la stampa a spirale + public void printTabellone(){ + int j = 0; + int sqr = (int) Math.sqrt(tabellone.size()); + int numeroDigiti = (int) Math.log10(tabellone.size()) + 1; + //Trucco per "pulire" la console + for (int i = 0 ; i < 100 ; i++){System.out.println();} + + for(int i = 0; i < tabellone.size(); i++){ + System.out.printf("%0" + numeroDigiti + "d" , i+1); + System.out.print("_"+tabellone.get(i).toString()+" "); + j++; + if (j % sqr == 0) + System.out.println(); + } + + //Trucco per "pulire" la console + for (int i = 0 ; i < 20 ; i++){System.out.println();} + + } +} diff --git a/core/src/main/java/service/implementazione/TabelloneServiceImpl.java b/core/src/main/java/service/implementazione/TabelloneServiceImpl.java deleted file mode 100644 index 12cf810..0000000 --- a/core/src/main/java/service/implementazione/TabelloneServiceImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -package service.implementazione; -//inizializza le caselle speciali -//contiene la logica per determinare gli effetti delle caselle -import datamodel.*; -import service.implementazione.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class TabelloneServiceImpl { - private Tabellone tabellone; - private int n; - - private int scegliNumeroCaselle(){ - System.out.println("Quante caselle vuoi che abbia il tabellone? Scegli tra 40, 60 e 80"); - Integer[] opzioniValide = {40, 60, 80}; - n = CommandLineSingleton.getInstance().getNumeroScelto(); - return CommandLineSingleton.getInstance().readIntegerUntilPossibleValue(opzioniValide); - } - - public TabelloneServiceImpl(Tabellone tabellone) { - this.tabellone = new Tabellone(n); - } - - public Tabellone creaTabellone() { - int numeroCaselle = 30; //TODO Numero scelto dall'utente - List caselle = new ArrayList<>(); - tabellone = new Tabellone(n); - numeroCaselle = (int)(n*0.8);//80% delle caselle sono normali. - int numeroCaselleRimanenti = n; - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaNormale()); - } - numeroCaselle = (int)(n*0.1);//10% delle caselle sono Oca. - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaOca()); - } - numeroCaselle = (int)(n*0.02);//2% delle caselle sono Ponte. - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaPonte()); - } - numeroCaselle = (int)(n*0.01);//Ogni tipo di casella rimanente e' 1% del totale - numeroCaselleRimanenti -= numeroCaselle; - for(int i = 0; i < numeroCaselle; i++) { - this.tabellone.add(new CasellaLabirinto()); - } - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaLocanda()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaPrigione()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaScheletro()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaMorra()); - numeroCaselleRimanenti -= numeroCaselle; - for (int i = 0; i < numeroCaselle; i++) - this.tabellone.add(new CasellaTris()); - - /* - * Si noti che il numero di caselle non supera n perche' si calcola il 98% e per - * ogni percentuale di n che si prende si arrotonda per diffetto. - * Quindi se n e' multiplo di 100 si avra' un numero di caselle inferiore a n perche' ccalcoliamo il 98% - * se non lo e' si avra' un numero di caselle inferiore a n perche' si arrotonda per difetto. - * */ - - - //-1 perche' l'ultima casella deve essere normale quindi viene aggiunta dopo di mischiare. - for(int i = 0; i < numeroCaselleRimanenti-1; i++) { - this.tabellone.add(new CasellaNormale()); - } - - // Mischia le caselle per randomizzare la posizione se necessario - Collections.shuffle(caselle); - - return new Tabellone(caselle); - } -} - diff --git a/core/src/main/java/service/implementazione/UmanoServiceImpl.java b/core/src/main/java/service/implementazione/UmanoServiceImpl.java index af39865..ec23c62 100644 --- a/core/src/main/java/service/implementazione/UmanoServiceImpl.java +++ b/core/src/main/java/service/implementazione/UmanoServiceImpl.java @@ -1,3 +1,4 @@ +/* package service.implementazione; import datamodel.*; @@ -55,9 +56,9 @@ public ModeEnumeration getMode() { return ModeEnumeration.ABBANDONA; } - + public Mossa getMossa(Gioco gioco) throws NoMosseDisponibiliException, GiocatoreNonTrovatoException { return getMossa(setGiocatore(gioco), gioco); } -} \ No newline at end of file +}*/