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