diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java b/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java index 597a7d2..0924513 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java @@ -4,6 +4,7 @@ import java.time.LocalDate; import java.util.ArrayList; public class GameData { + private final Formato formato; private final String nomePersonaggio; private final ArrayList diario; private final Comuni comuni; @@ -17,6 +18,7 @@ public class GameData { private LocalDate data; public GameData(Formato formato) { + this.formato = formato; this.diario = new ArrayList<>(); this.comuni = Parser.parseComuni(formato, "FileEsercizio/comuni"); this.persone = Parser.parsePersone(formato, "FileEsercizio/IDpersone"); @@ -97,12 +99,19 @@ public class GameData { public int getGiorno() { return giorno; } - public void incrementaGiorno(int numeroPersoneControllate) { - if (numeroPersoneControllate > 0) { - addSaldo(50 * numeroPersoneControllate); + + public void incrementaGiorno(ArrayList personeControllate) { + if (!personeControllate.isEmpty()) { + addSaldo(50 * personeControllate.size()); } paga(200); + PaginaDiario pagina = new PaginaDiario(giorno + "/" + data.getMonthValue() + "/" + data.getYear(), saldo); + for (PersonaControllata persona : personeControllate) { + pagina.addPersonaControllata(persona); + } + diario.add(pagina); + giorno++; data = LocalDate.of(2024, 5, giorno); @@ -124,4 +133,8 @@ public class GameData { public LocalDate getData() { return data; } + + public void saveDiario() { + Parser.saveDiario("FileEsercizio/diario", diario, formato); + } } diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java b/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java index 18c725f..3546cd4 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java @@ -13,6 +13,10 @@ public class PaginaDiario { this.personeControllate = new ArrayList<>(); } + public int getGiorno() { + return Integer.parseInt(data.split("/")[0]); + } + public String getData() { return data; } diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java b/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java index 43259a2..fcfd414 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java @@ -130,7 +130,85 @@ public class Parser { } public static void saveDiario (String fileName, ArrayList 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; } } diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java b/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java index a0c3471..80ab698 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java @@ -1,86 +1,144 @@ package it.unibs.fp.patenteelibbrettopregoh; import it.kibo.fp.lib.InputData; - import java.util.ArrayList; public class PatenteELibbrettoPregohMain { public static void main(String[] args) { System.out.println("PatenteELibbrettoPregoh!"); + Formato formato = getFormato(); - System.out.println(); GameData gameData = new GameData(formato); + gameLoop(gameData); + endGame(gameData); + + } + + private static void gameLoop(GameData gameData) { while (gameData.getStatoGioco() == StatoGioco.IN_CORSO) { 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 personeControllate = new ArrayList<>(); 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){ - 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){ - 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); - } - } + if (gameData.getStatoGioco() == StatoGioco.IN_CORSO) { + System.out.println("\nPassa la persona " + (i + 1) + " di " + personeChePassano + "\n"); + gestisciPersona(gameData, personeControllate); } } - - gameData.incrementaGiorno(personeControllate.size()); + gameData.incrementaGiorno(personeControllate); } + } + + private static void gestisciPersona(GameData gameData, ArrayList 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 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 personeControllate) { + PersonaControllata personaControllata; + personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE); + personeControllate.add(personaControllata); + } + + private static void gestisciMazzetta(Persona personaDaControllare, GameData gameData, ArrayList 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 personeControllate) { + PersonaControllata personaControllata; + personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE); + personeControllate.add(personaControllata); + } + + private static void mazzettaPoliziotto(Persona personaDaControllare, GameData gameData, ArrayList 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 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 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 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 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()){ 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"); default -> System.out.println("Hai perso"); } - } private static boolean controllaPersona(Persona persona, Comuni comuni, GameData gameData) { diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java b/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java index 4b20626..3c2ac85 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java @@ -18,6 +18,10 @@ public class PersonaControllata extends Persona { return tipoPersonaControllata; } + public String getStatoTransito() { + return esitoControllo ? "APPROVATO" : "RIFIUTATO"; + } + @Override public String toString() { return "Nome: " + getNome() + "\n" +