From 4ad82a38b2347bc564a252a7cfd0bf01a11dfd88 Mon Sep 17 00:00:00 2001 From: L3o15 <90962471+L3o15@users.noreply.github.com> Date: Wed, 16 Apr 2025 14:33:45 +0200 Subject: [PATCH] Game logic --- .idea/libraries/kibofplib_1_0.xml | 9 ++ .idea/misc.xml | 2 +- PatenteELibbrettoPregoh.iml | 1 + lib/kibofplib-1.0.jar | Bin 0 -> 15011 bytes .../fp/patenteelibbrettopregoh/GameData.java | 127 ++++++++++++++++++ .../patenteelibbrettopregoh/PaginaDiario.java | 36 +++++ .../fp/patenteelibbrettopregoh/Parser.java | 73 +++++++++- .../PatenteELibbrettoPregohMain.java | 107 ++++++++++++++- .../fp/patenteelibbrettopregoh/Persona.java | 17 ++- .../PersonaControllata.java | 33 +++++ .../patenteelibbrettopregoh/StatoGioco.java | 5 + .../TipoPersonaControllata.java | 5 + 12 files changed, 398 insertions(+), 17 deletions(-) create mode 100644 .idea/libraries/kibofplib_1_0.xml create mode 100644 lib/kibofplib-1.0.jar create mode 100644 src/it/unibs/fp/patenteelibbrettopregoh/GameData.java create mode 100644 src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java create mode 100644 src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java create mode 100644 src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java create mode 100644 src/it/unibs/fp/patenteelibbrettopregoh/TipoPersonaControllata.java diff --git a/.idea/libraries/kibofplib_1_0.xml b/.idea/libraries/kibofplib_1_0.xml new file mode 100644 index 0000000..8aca0d5 --- /dev/null +++ b/.idea/libraries/kibofplib_1_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4fe24a1..45b76e1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/PatenteELibbrettoPregoh.iml b/PatenteELibbrettoPregoh.iml index c90834f..e98415d 100644 --- a/PatenteELibbrettoPregoh.iml +++ b/PatenteELibbrettoPregoh.iml @@ -7,5 +7,6 @@ + \ No newline at end of file diff --git a/lib/kibofplib-1.0.jar b/lib/kibofplib-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..8929bd57e055264e6e8b03ead4f59463afd2e1bb GIT binary patch literal 15011 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 fK6|wPf3M8zxjS>p|y literal 0 HcmV?d00001 diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java b/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java new file mode 100644 index 0000000..597a7d2 --- /dev/null +++ b/src/it/unibs/fp/patenteelibbrettopregoh/GameData.java @@ -0,0 +1,127 @@ +package it.unibs.fp.patenteelibbrettopregoh; + +import java.time.LocalDate; +import java.util.ArrayList; + +public class GameData { + private final String nomePersonaggio; + private final ArrayList diario; + private final Comuni comuni; + private final ArrayList persone; + private double saldo; + private int numeroMazzetteAccettatePolizia; + private int numeroRivoluzionariAccettati; + private StatoGioco statoGioco; + private int giorno; + private int indiceUltimaPersonaPassata; + private LocalDate data; + + public GameData(Formato formato) { + this.diario = new ArrayList<>(); + this.comuni = Parser.parseComuni(formato, "FileEsercizio/comuni"); + this.persone = Parser.parsePersone(formato, "FileEsercizio/IDpersone"); + this.saldo = 0; + this.numeroMazzetteAccettatePolizia = 0; + this.numeroRivoluzionariAccettati = 0; + this.statoGioco = StatoGioco.IN_CORSO; + this.nomePersonaggio = "Ajeje Brazorf"; + this.giorno = 1; + this.indiceUltimaPersonaPassata = -1; + this.data = LocalDate.of(2024, 5, giorno); + } + + public ArrayList getDiario() { + return diario; + } + + public Comuni getComuni() { + return comuni; + } + + public ArrayList getPersone() { + return persone; + } + + public double getSaldo() { + return saldo; + } + + public Persona getPersonaDaControlare() { + indiceUltimaPersonaPassata++; + return persone.get(indiceUltimaPersonaPassata); + + } + + public int getNumeroMazzetteAccettatePolizia() { + return numeroMazzetteAccettatePolizia; + } + + public int getNumeroRivoluzionariAccettati() { + return numeroRivoluzionariAccettati; + } + + public void addPaginaDiario(PaginaDiario pagina) { + diario.add(pagina); + } + + public void addSaldo(double valore) { + saldo += valore; + } + + public void pagaMulta(double valore) { + paga(valore); + } + + public void incrementaMazzetteAccettatePolizia() { + numeroMazzetteAccettatePolizia++; + if (numeroMazzetteAccettatePolizia >= 2) { + statoGioco = StatoGioco.GIUSTIZIATO; + } + } + + public void incrementaRivoluzionariAccettati() { + numeroRivoluzionariAccettati++; + if (numeroRivoluzionariAccettati >= 5) { + statoGioco = StatoGioco.RIVOLUZIONE; + } + } + + public String getNomePersonaggio() { + return nomePersonaggio; + } + + public StatoGioco getStatoGioco() { + return statoGioco; + } + + public int getGiorno() { + return giorno; + } + public void incrementaGiorno(int numeroPersoneControllate) { + if (numeroPersoneControllate > 0) { + addSaldo(50 * numeroPersoneControllate); + } + paga(200); + + giorno++; + + data = LocalDate.of(2024, 5, giorno); + + if (giorno > 12 && statoGioco == StatoGioco.IN_CORSO && saldo > 2300) { + statoGioco = StatoGioco.DODICESIMO_GIORNO; + } else if (giorno > 12 && statoGioco == StatoGioco.IN_CORSO) { + statoGioco = StatoGioco.NON_ABBASTANZA_SOLDI; + } + } + + private void paga(double valore) { + saldo -= valore; + if (saldo < 0) { + statoGioco = StatoGioco.ARRESTATO; + } + } + + public LocalDate getData() { + return data; + } +} diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java b/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java new file mode 100644 index 0000000..18c725f --- /dev/null +++ b/src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java @@ -0,0 +1,36 @@ +package it.unibs.fp.patenteelibbrettopregoh; + +import java.util.ArrayList; + +public class PaginaDiario { + private final String data; + private final double bilancio; + private final ArrayList personeControllate; + + public PaginaDiario(String data, double bilancio) { + this.data = data; + this.bilancio = bilancio; + this.personeControllate = new ArrayList<>(); + } + + public String getData() { + return data; + } + + public double getBilancio() { + return bilancio; + } + + public ArrayList getPersoneControllate() { + return personeControllate; + } + + public void addPersonaControllata(PersonaControllata persona) { + this.personeControllate.add(persona); + } + + public void removePersonaControllata(PersonaControllata persona) { + this.personeControllate.remove(persona); + } + +} diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java b/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java index ff072ef..43259a2 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/Parser.java @@ -7,15 +7,70 @@ import java.util.ArrayList; public class Parser { public static ArrayList parsePersone(Formato formato, String fileName) { ArrayList persone = new ArrayList<>(); - // Implement parsing logic here based on the format - // For example, if formato is JSON, use a JSON library to parse the file - // and populate the persone list. + if (formato == Formato.XML) { + fileName = fileName + ".xml"; + XMLInputFactory xmlif; + XMLStreamReader xmlr; + String currentElement = null; + String nome = null; + String cognome = null; + String sesso = null; + String dataNascita = null; + String comuneNascita = null; + String codiceFiscale = null; + String scadenzaDocumento = null; + + try (FileInputStream reader = new FileInputStream(fileName)) { + xmlif = XMLInputFactory.newInstance(); + xmlr = xmlif.createXMLStreamReader(fileName, reader); + + while (xmlr.hasNext()) { + int event = xmlr.getEventType(); + switch (event) { + case XMLStreamConstants.START_ELEMENT: + currentElement = xmlr.getLocalName(); // <- sposta qui, nel posto giusto + break; + case XMLStreamConstants.CHARACTERS: + String text = xmlr.getText().trim(); + if (!text.isEmpty() && currentElement != null) { + switch (currentElement) { + case "nome" -> nome = text; + case "cognome" -> cognome = text; + case "sesso" -> sesso = text; + case "data_nascita" -> dataNascita = text; + case "comune_nascita" -> comuneNascita = text; + case "codice_fiscale" -> codiceFiscale = text; + case "scadenza_documento" -> scadenzaDocumento = text; + } + } + break; + case XMLStreamConstants.END_ELEMENT: + String endTag = xmlr.getLocalName(); + if (endTag.equals("persona")) { + Persona persona = new Persona(nome, cognome, sesso, dataNascita, comuneNascita, codiceFiscale, scadenzaDocumento); + persone.add(persona); + } + currentElement = null; // reset solo alla fine di un elemento + break; + } + xmlr.next(); // importante: avanza solo una volta per ciclo + } + xmlr.close(); + } catch (FactoryConfigurationError | XMLStreamException | IOException e) { + System.out.println("Error reading the file: " + e.getMessage()); + } + + } + else { + fileName = fileName + ".json"; + } return persone; } public static Comuni parseComuni(Formato formato, String fileName) { Comuni comuni = new Comuni(); if (formato == Formato.XML) { + fileName = fileName + ".xml"; XMLInputFactory xmlif; XMLStreamReader xmlr; String currentElement = null; @@ -67,11 +122,15 @@ public class Parser { } catch (FactoryConfigurationError | XMLStreamException | IOException e) { System.out.println("Error reading the file: " + e.getMessage()); } - - } else if (formato == Formato.JSON) { - // Implement XML parsing logic here - // For example, use an XML library to read the file and populate the comuni list + } + else { + fileName = fileName + ".json"; } return comuni; } + + public static void saveDiario (String fileName, ArrayList pagineDiario, Formato formato) { + // non so ancora come fare + return; + } } diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java b/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java index 4a922b3..a0c3471 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/PatenteELibbrettoPregohMain.java @@ -1,14 +1,113 @@ 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); - Comuni comuni = Parser.parseComuni(Formato.XML, "FileEsercizio/comuni.xml"); - //ArrayList persone = Parser.parsePersone(Formato.JSON, "persone.txt"); - Persona p = new Persona("Mario", "Rossi", "M", "1980-01-01", "Roma", "", "2005-01-15"); - System.out.println(p.calcolaCodiceFiscale(comuni)); + while (gameData.getStatoGioco() == StatoGioco.IN_CORSO) { + int personeChePassano = ((int)(Math.random() * 5) + 3); + System.out.println("Il giorno " + gameData.getData() + " passeranno " + personeChePassano + " persone"); + 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); + } + } + } + } + + gameData.incrementaGiorno(personeControllate.size()); + } + + switch (gameData.getStatoGioco()){ + case ARRESTATO -> System.out.println("Sei stato arrestato"); + case GIUSTIZIATO -> System.out.println("Sei stato giustiziato"); + case RIVOLUZIONE -> System.out.println("Hai vinto la rivoluzione"); + case DODICESIMO_GIORNO -> System.out.println("Hai vinto, sei sopravvissuto 12 giorni"); + 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) { + return persona.isCodiceFiscaleValido(comuni) && persona.isDocumentoValido(gameData.getData()); + } + + private static Formato getFormato() { + Formato formato = null; + + int sceltaFormato = InputData.readIntegerBetween("Inserisci il formato (0: JSON, 1: XML): ", 0, 1); + if (sceltaFormato == 0) { + System.out.println("Hai scelto il formato JSON"); + formato = Formato.JSON; + } else { + System.out.println("Hai scelto il formato XML"); + formato = Formato.XML; + } + return formato; } } diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/Persona.java b/src/it/unibs/fp/patenteelibbrettopregoh/Persona.java index 17cb189..f2014ed 100644 --- a/src/it/unibs/fp/patenteelibbrettopregoh/Persona.java +++ b/src/it/unibs/fp/patenteelibbrettopregoh/Persona.java @@ -1,6 +1,10 @@ package it.unibs.fp.patenteelibbrettopregoh; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.ArrayList; +import java.util.Date; public class Persona { private final String nome; @@ -208,11 +212,9 @@ public class Persona { }; } - - - public boolean isScadenzaDocumentoValido(){ - // Implement logic to validate the expiration date of the document - return false; + public boolean isDocumentoValido(LocalDate date) { + LocalDate scadenza = LocalDate.parse(scadenzaDocumento); + return date.isBefore(scadenza) || date.isEqual(scadenza); } private static boolean isVocale(char c) { @@ -241,4 +243,9 @@ public class Persona { } return ret; } + + @Override + public String toString() { + return nome + " " + cognome + " (" + sesso + ") nato il " + dataNascita + " a " + comuneNascita + " con C.F. " + codiceFiscale + ", validità documento " + scadenzaDocumento; + } } diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java b/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java new file mode 100644 index 0000000..4b20626 --- /dev/null +++ b/src/it/unibs/fp/patenteelibbrettopregoh/PersonaControllata.java @@ -0,0 +1,33 @@ +package it.unibs.fp.patenteelibbrettopregoh; + +public class PersonaControllata extends Persona { + private final boolean esitoControllo; + private final TipoPersonaControllata tipoPersonaControllata; + + public PersonaControllata(Persona persona, boolean esitoControllo, TipoPersonaControllata tipoPersonaControllata) { + super(persona.getNome(), persona.getCognome(), persona.getSesso(), persona.getDataNascita(), persona.getComuneNascita(), persona.getCodiceFiscale(), persona.getScadenzaDocumento()); + this.esitoControllo = esitoControllo; + this.tipoPersonaControllata = tipoPersonaControllata; + } + + public boolean isEsitoControllo() { + return esitoControllo; + } + + public TipoPersonaControllata getTipoPersonaControllata() { + return tipoPersonaControllata; + } + + @Override + public String toString() { + return "Nome: " + getNome() + "\n" + + "Cognome: " + getCognome() + "\n" + + "Sesso: " + getSesso() + "\n" + + "Data di Nascita: " + getDataNascita() + "\n" + + "Comune di Nascita: " + getComuneNascita() + "\n" + + "Codice Fiscale: " + getCodiceFiscale() + "\n" + + "Scadenza Documento: " + getScadenzaDocumento() + "\n" + + "Esito Controllo: " + (esitoControllo ? "Positivo" : "Negativo") + "\n" + + "Tipo Persona Controllata: " + tipoPersonaControllata.toString() + "\n"; + } +} diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java b/src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java new file mode 100644 index 0000000..0efeeef --- /dev/null +++ b/src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java @@ -0,0 +1,5 @@ +package it.unibs.fp.patenteelibbrettopregoh; + +public enum StatoGioco { + ARRESTATO, GIUSTIZIATO, RIVOLUZIONE, DODICESIMO_GIORNO, NON_ABBASTANZA_SOLDI, IN_CORSO; +} diff --git a/src/it/unibs/fp/patenteelibbrettopregoh/TipoPersonaControllata.java b/src/it/unibs/fp/patenteelibbrettopregoh/TipoPersonaControllata.java new file mode 100644 index 0000000..ed4e3ea --- /dev/null +++ b/src/it/unibs/fp/patenteelibbrettopregoh/TipoPersonaControllata.java @@ -0,0 +1,5 @@ +package it.unibs.fp.patenteelibbrettopregoh; + +public enum TipoPersonaControllata { + RIVOLUZIONARIO, POLIZIOTTO, PERSONA_NORMALE; +}