Diary implementation, refactoring
This commit is contained in:
parent
4ad82a38b2
commit
9344573fe7
5 changed files with 225 additions and 69 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<PersonaControllata> 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<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()){
|
||||
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) {
|
||||
|
|
|
@ -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" +
|
||||
|
|
Loading…
Add table
Reference in a new issue