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
+}*/