Diary implementation, refactoring

This commit is contained in:
L3o15 2025-04-19 14:05:35 +02:00
parent 4ad82a38b2
commit 9344573fe7
5 changed files with 225 additions and 69 deletions

View file

@ -4,6 +4,7 @@ import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
public class GameData { public class GameData {
private final Formato formato;
private final String nomePersonaggio; private final String nomePersonaggio;
private final ArrayList<PaginaDiario> diario; private final ArrayList<PaginaDiario> diario;
private final Comuni comuni; private final Comuni comuni;
@ -17,6 +18,7 @@ public class GameData {
private LocalDate data; private LocalDate data;
public GameData(Formato formato) { public GameData(Formato formato) {
this.formato = formato;
this.diario = new ArrayList<>(); this.diario = new ArrayList<>();
this.comuni = Parser.parseComuni(formato, "FileEsercizio/comuni"); this.comuni = Parser.parseComuni(formato, "FileEsercizio/comuni");
this.persone = Parser.parsePersone(formato, "FileEsercizio/IDpersone"); this.persone = Parser.parsePersone(formato, "FileEsercizio/IDpersone");
@ -97,12 +99,19 @@ public class GameData {
public int getGiorno() { public int getGiorno() {
return giorno; return giorno;
} }
public void incrementaGiorno(int numeroPersoneControllate) {
if (numeroPersoneControllate > 0) { public void incrementaGiorno(ArrayList<PersonaControllata> personeControllate) {
addSaldo(50 * numeroPersoneControllate); if (!personeControllate.isEmpty()) {
addSaldo(50 * personeControllate.size());
} }
paga(200); paga(200);
PaginaDiario pagina = new PaginaDiario(giorno + "/" + data.getMonthValue() + "/" + data.getYear(), saldo);
for (PersonaControllata persona : personeControllate) {
pagina.addPersonaControllata(persona);
}
diario.add(pagina);
giorno++; giorno++;
data = LocalDate.of(2024, 5, giorno); data = LocalDate.of(2024, 5, giorno);
@ -124,4 +133,8 @@ public class GameData {
public LocalDate getData() { public LocalDate getData() {
return data; return data;
} }
public void saveDiario() {
Parser.saveDiario("FileEsercizio/diario", diario, formato);
}
} }

View file

@ -13,6 +13,10 @@ public class PaginaDiario {
this.personeControllate = new ArrayList<>(); this.personeControllate = new ArrayList<>();
} }
public int getGiorno() {
return Integer.parseInt(data.split("/")[0]);
}
public String getData() { public String getData() {
return data; return data;
} }

View file

@ -130,7 +130,85 @@ public class Parser {
} }
public static void saveDiario (String fileName, ArrayList<PaginaDiario> pagineDiario, Formato formato) { public static void saveDiario (String fileName, ArrayList<PaginaDiario> pagineDiario, Formato formato) {
// non so ancora come fare if (formato == Formato.XML) {
fileName = fileName + ".xml";
try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter xmlWriter = xmlOutputFactory.createXMLStreamWriter(outputStream, "UTF-8");
xmlWriter.writeStartDocument("UTF-8", "1.0");
xmlWriter.writeStartElement("diario");
for (PaginaDiario pagina : pagineDiario) {
xmlWriter.writeStartElement("giornata");
xmlWriter.writeAttribute("numero", String.valueOf(pagina.getGiorno()));
xmlWriter.writeStartElement("data");
xmlWriter.writeCharacters(pagina.getData());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("bilancio");
xmlWriter.writeCharacters(String.valueOf(pagina.getBilancio()));
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("persone");
xmlWriter.writeAttribute("numero", String.valueOf(pagina.getPersoneControllate().size()));
for (int i = 0; i < pagina.getPersoneControllate().size(); i++) {
PersonaControllata persona = pagina.getPersoneControllate().get(i);
xmlWriter.writeStartElement("persona");
xmlWriter.writeAttribute("id", String.valueOf(i + 1));
xmlWriter.writeStartElement("nome");
xmlWriter.writeCharacters(persona.getNome());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("cognome");
xmlWriter.writeCharacters(persona.getCognome());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("sesso");
xmlWriter.writeCharacters(persona.getSesso());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("data_nascita");
xmlWriter.writeCharacters(persona.getDataNascita());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("comune_nascita");
xmlWriter.writeCharacters(persona.getComuneNascita());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("codice_fiscale");
xmlWriter.writeCharacters(persona.getCodiceFiscale());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("data_scadenza_id");
xmlWriter.writeCharacters(persona.getScadenzaDocumento());
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("stato_transito");
xmlWriter.writeCharacters(persona.getStatoTransito());
xmlWriter.writeEndElement();
xmlWriter.writeEndElement(); // persona
}
xmlWriter.writeEndElement(); // persone
xmlWriter.writeEndElement(); // giornata
}
xmlWriter.writeEndElement(); // diario
xmlWriter.writeEndDocument();
xmlWriter.flush();
} catch (XMLStreamException | IOException e) {
System.out.println("Error writing the file: " + e.getMessage());
}
} else if (formato == Formato.JSON) {
fileName = fileName + ".json";
}
return; return;
} }
} }

View file

@ -1,86 +1,144 @@
package it.unibs.fp.patenteelibbrettopregoh; package it.unibs.fp.patenteelibbrettopregoh;
import it.kibo.fp.lib.InputData; import it.kibo.fp.lib.InputData;
import java.util.ArrayList; import java.util.ArrayList;
public class PatenteELibbrettoPregohMain { public class PatenteELibbrettoPregohMain {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("PatenteELibbrettoPregoh!"); System.out.println("PatenteELibbrettoPregoh!");
Formato formato = getFormato(); Formato formato = getFormato();
System.out.println();
GameData gameData = new GameData(formato); GameData gameData = new GameData(formato);
gameLoop(gameData);
endGame(gameData);
}
private static void gameLoop(GameData gameData) {
while (gameData.getStatoGioco() == StatoGioco.IN_CORSO) { while (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
int personeChePassano = ((int)(Math.random() * 5) + 3); int personeChePassano = ((int)(Math.random() * 5) + 3);
System.out.println("Il giorno " + gameData.getData() + " passeranno " + personeChePassano + " persone"); System.out.println("\nIl giorno " + gameData.getData() + " passeranno " + personeChePassano + " persone\nIl tuo saldo è di: " + gameData.getSaldo() + "§\n");
ArrayList<PersonaControllata> personeControllate = new ArrayList<>(); ArrayList<PersonaControllata> personeControllate = new ArrayList<>();
for (int i = 0; i < personeChePassano; i++) { for (int i = 0; i < personeChePassano; i++) {
if (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
Persona personaDaControllare = gameData.getPersonaDaControlare();
boolean esito = controllaPersona(personaDaControllare, gameData.getComuni(), gameData);
boolean accettata = InputData.readYesOrNo("Si presenta\n" + personaDaControllare + "\nC.F. calcolato: " + personaDaControllare.calcolaCodiceFiscale(gameData.getComuni()) + "\nAccettare");
if (accettata) {
if (esito){
System.out.println("La persona aveva i dati corretti");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
} else {
System.out.println("La persona aveva i dati errati");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
if (Math.random() < 0.5){
System.out.println("Sei stato fortunato, non hai presso la multa");
} else {
System.out.println("Hai preso una multa da 300§");
gameData.pagaMulta(300);
}
}
} else {
if (esito) {
System.out.println("La persona aveva i dati corretti ... come sei salato");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
if (Math.random() < 0.5){
System.out.println("Sei stato fortunato, non hai presso la multa");
} else {
System.out.println("Hai preso una multa da 150§");
gameData.pagaMulta(150);
}
} else {
System.out.println("La persona aveva i dati errati");
PersonaControllata personaControllata;
if (Math.random() < 0.4){ if (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
int mazzetta = ((int)((Math.random() * 251))) + 250; System.out.println("\nPassa la persona " + (i + 1) + " di " + personeChePassano + "\n");
System.out.println(personaDaControllare.getNome() + " " + personaDaControllare.getCognome() + " prova a corromperti con " + mazzetta + "§"); gestisciPersona(gameData, personeControllate);
boolean accettataMazzetta = InputData.readYesOrNo("Accettare la mazzetta");
if (accettataMazzetta){
gameData.addSaldo(mazzetta);
if (Math.random() < 0.7){
System.out.println("Hai accettato la mazzetta, ti è andata bene ... era un rivoluzionario");
gameData.incrementaRivoluzionariAccettati();
personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.RIVOLUZIONARIO);
} else {
System.out.println("Hai accettato la mazzetta ... era un poliziotto");
gameData.incrementaMazzetteAccettatePolizia();
gameData.pagaMulta(gameData.getSaldo() * 0.6);
personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.POLIZIOTTO);
}
} else {
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
}
} else {
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
}
personeControllate.add(personaControllata);
}
}
} }
} }
gameData.incrementaGiorno(personeControllate);
gameData.incrementaGiorno(personeControllate.size());
} }
}
private static void gestisciPersona(GameData gameData, ArrayList<PersonaControllata> personeControllate) {
Persona personaDaControllare = gameData.getPersonaDaControlare();
boolean esito = controllaPersona(personaDaControllare, gameData.getComuni(), gameData);
boolean accettata = InputData.readYesOrNo("Si presenta\n" + personaDaControllare + "\nC.F. calcolato: " + personaDaControllare.calcolaCodiceFiscale(gameData.getComuni()) + "\nAccettare");
if (accettata) {
if (esito){
datiCorrettiAccettati(personaDaControllare, personeControllate);
} else {
datiSbagliatiAccettati(personaDaControllare, personeControllate, gameData);
}
} else {
if (esito) {
datiCorrettiRifiutati(personaDaControllare, personeControllate, gameData);
} else {
datiSbagliatiRifiutati(personaDaControllare, gameData, personeControllate);
}
}
}
private static void datiSbagliatiRifiutati(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
System.out.println("La persona aveva i dati errati");
PersonaControllata personaControllata;
if (Math.random() < 0.4){
gestisciMazzetta(personaDaControllare, gameData, personeControllate);
} else {
personaRifiutata(personaDaControllare, personeControllate);
}
}
private static void personaRifiutata(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
PersonaControllata personaControllata;
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
}
private static void gestisciMazzetta(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
PersonaControllata personaControllata;
int mazzetta = ((int)((Math.random() * 251))) + 250;
System.out.println(personaDaControllare.getNome() + " " + personaDaControllare.getCognome() + " prova a corromperti con " + mazzetta + "§");
boolean accettataMazzetta = InputData.readYesOrNo("Accettare la mazzetta");
if (accettataMazzetta){
gameData.addSaldo(mazzetta);
if (Math.random() < 0.7){
mazzettaRivoluzionario(personaDaControllare, gameData, personeControllate);
} else {
mazzettaPoliziotto(personaDaControllare, gameData, personeControllate);
}
} else {
mazzettaRifiutata(personaDaControllare, personeControllate);
}
}
private static void mazzettaRifiutata(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
PersonaControllata personaControllata;
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
}
private static void mazzettaPoliziotto(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
PersonaControllata personaControllata;
System.out.println("Hai accettato la mazzetta ... era un poliziotto");
gameData.incrementaMazzetteAccettatePolizia();
gameData.pagaMulta(gameData.getSaldo() * 0.6);
personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.POLIZIOTTO);
personeControllate.add(personaControllata);
}
private static void mazzettaRivoluzionario(Persona personaDaControllare, GameData gameData, ArrayList<PersonaControllata> personeControllate) {
PersonaControllata personaControllata;
System.out.println("Hai accettato la mazzetta, ti è andata bene ... era un rivoluzionario");
gameData.incrementaRivoluzionariAccettati();
personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.RIVOLUZIONARIO);
personeControllate.add(personaControllata);
}
private static void datiCorrettiRifiutati(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate, GameData gameData) {
System.out.println("La persona aveva i dati corretti ... come sei salato");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
if (Math.random() < 0.5){
System.out.println("Sei stato fortunato, non hai presso la multa");
} else {
System.out.println("Hai preso una multa da 150§");
gameData.pagaMulta(150);
}
}
private static void datiSbagliatiAccettati(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate, GameData gameData) {
System.out.println("La persona aveva i dati errati");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
if (Math.random() < 0.5){
System.out.println("Sei stato fortunato, non hai presso la multa");
} else {
System.out.println("Hai preso una multa da 300§");
gameData.pagaMulta(300);
}
}
private static void datiCorrettiAccettati(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
System.out.println("La persona aveva i dati corretti");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
}
private static void endGame(GameData gameData) {
gameData.saveDiario();
switch (gameData.getStatoGioco()){ switch (gameData.getStatoGioco()){
case ARRESTATO -> System.out.println("Sei stato arrestato"); case ARRESTATO -> System.out.println("Sei stato arrestato");
@ -90,7 +148,6 @@ public class PatenteELibbrettoPregohMain {
case NON_ABBASTANZA_SOLDI -> System.out.println("Non hai abbastanza soldi"); case NON_ABBASTANZA_SOLDI -> System.out.println("Non hai abbastanza soldi");
default -> System.out.println("Hai perso"); default -> System.out.println("Hai perso");
} }
} }
private static boolean controllaPersona(Persona persona, Comuni comuni, GameData gameData) { private static boolean controllaPersona(Persona persona, Comuni comuni, GameData gameData) {

View file

@ -18,6 +18,10 @@ public class PersonaControllata extends Persona {
return tipoPersonaControllata; return tipoPersonaControllata;
} }
public String getStatoTransito() {
return esitoControllo ? "APPROVATO" : "RIFIUTATO";
}
@Override @Override
public String toString() { public String toString() {
return "Nome: " + getNome() + "\n" + return "Nome: " + getNome() + "\n" +