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;
public class GameData {
private final Formato formato;
private final String nomePersonaggio;
private final ArrayList<PaginaDiario> 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<PersonaControllata> 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);
}
}

View file

@ -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;
}

View file

@ -130,7 +130,85 @@ public class Parser {
}
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;
}
}

View file

@ -1,31 +1,125 @@
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<PersonaControllata> personeControllate = new ArrayList<>();
for (int i = 0; i < personeChePassano; i++) {
if (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
System.out.println("\nPassa la persona " + (i + 1) + " di " + personeChePassano + "\n");
gestisciPersona(gameData, personeControllate);
}
}
gameData.incrementaGiorno(personeControllate);
}
}
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){
System.out.println("La persona aveva i dati corretti");
PersonaControllata personaControllata = new PersonaControllata(personaDaControllare, true, TipoPersonaControllata.PERSONA_NORMALE);
personeControllate.add(personaControllata);
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);
@ -36,51 +130,15 @@ public class PatenteELibbrettoPregohMain {
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);
}
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);
}
}
}
}
gameData.incrementaGiorno(personeControllate.size());
}
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) {

View file

@ -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" +