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;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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" +
|
||||||
|
|
Loading…
Add table
Reference in a new issue