Compare commits
No commits in common. "main" and "master" have entirely different histories.
29 changed files with 84683 additions and 2 deletions
23
.gitignore
vendored
Normal file
23
.gitignore
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
# IntelliJ
|
||||
.idea/
|
||||
*.iml
|
||||
out/
|
||||
|
||||
# Eclipse
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
bin/
|
||||
|
||||
# NetBeans
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
|
||||
# VS Code
|
||||
.vscode/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
10
.idea/libraries/google_code_gson.xml
generated
Normal file
10
.idea/libraries/google_code_gson.xml
generated
Normal file
|
@ -0,0 +1,10 @@
|
|||
<component name="libraryTable">
|
||||
<library name="google.code.gson" type="repository">
|
||||
<properties maven-id="com.google.code.gson:gson:2.10.1" />
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/lib/gson-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
9
.idea/libraries/kibofplib_1_0.xml
generated
Normal file
9
.idea/libraries/kibofplib_1_0.xml
generated
Normal file
|
@ -0,0 +1,9 @@
|
|||
<component name="libraryTable">
|
||||
<library name="kibofplib-1.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/lib/kibofplib-1.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
6
.idea/misc.xml
generated
Normal file
6
.idea/misc.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="corretto-19" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/PatenteELibbrettoPregoh.iml" filepath="$PROJECT_DIR$/PatenteELibbrettoPregoh.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
212
.idea/workspace.xml
generated
Normal file
212
.idea/workspace.xml
generated
Normal file
|
@ -0,0 +1,212 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="af162031-d7bc-4a6c-bf85-8552ba253018" name="Changes" comment="Save diary" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="Class" />
|
||||
<option value="Enum" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 3
|
||||
}</component>
|
||||
<component name="ProjectId" id="2viDAWzJ9gaEHvUFcho7UWwFSvI" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">{
|
||||
"keyToString": {
|
||||
"Application.PatenteELibbrettoPregohMain.executor": "Run",
|
||||
"Downloaded.Files.Path.Enabled": "true",
|
||||
"Repository.Attach.Annotations": "false",
|
||||
"Repository.Attach.JavaDocs": "false",
|
||||
"Repository.Attach.Sources": "false",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.git.unshallow": "true",
|
||||
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"kotlin-language-version-configured": "true",
|
||||
"last_opened_file_path": "/Users/leonardo-orizio/Desktop/Scuola/UniBs/PrimoAnno/Fondamenti di info/ProgettoArnaldo/PatenteELibbrettoPregoh",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"project.structure.last.edited": "Project",
|
||||
"project.structure.proportion": "0.15",
|
||||
"project.structure.side.proportion": "0.2",
|
||||
"settings.editor.selected.configurable": "preferences.pluginManager",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CreateClassDialog.RecentsKey">
|
||||
<recent name="it.unibs.fp.patenteelibbrettopregoh" />
|
||||
</key>
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="$PROJECT_DIR$" />
|
||||
<recent name="$PROJECT_DIR$/lib" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="SharedIndexes">
|
||||
<attachedChunks>
|
||||
<set>
|
||||
<option value="bundled-jdk-9823dce3aa75-fbdcb00ec9e3-intellij.indexing.shared.core-IU-251.23774.435" />
|
||||
<option value="bundled-js-predefined-d6986cc7102b-f27c65a3e318-JavaScript-IU-251.23774.435" />
|
||||
</set>
|
||||
</attachedChunks>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="af162031-d7bc-4a6c-bf85-8552ba253018" name="Changes" comment="" />
|
||||
<created>1744618859254</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1744618859254</updated>
|
||||
<workItem from="1744618862239" duration="6795000" />
|
||||
<workItem from="1744796155390" duration="10205000" />
|
||||
<workItem from="1744899816172" duration="2720000" />
|
||||
<workItem from="1745060286799" duration="3585000" />
|
||||
<workItem from="1746090394771" duration="7577000" />
|
||||
<workItem from="1746098459756" duration="164000" />
|
||||
<workItem from="1746099005276" duration="376000" />
|
||||
<workItem from="1746099462736" duration="181000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="First commit">
|
||||
<option name="closed" value="true" />
|
||||
<created>1744619010467</created>
|
||||
<option name="number" value="00001" />
|
||||
<option name="presentableId" value="LOCAL-00001" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1744619010467</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00002" summary="First classes and C.F.">
|
||||
<option name="closed" value="true" />
|
||||
<created>1744625521049</created>
|
||||
<option name="number" value="00002" />
|
||||
<option name="presentableId" value="LOCAL-00002" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1744625521049</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00003" summary="Game logic">
|
||||
<option name="closed" value="true" />
|
||||
<created>1744806827798</created>
|
||||
<option name="number" value="00003" />
|
||||
<option name="presentableId" value="LOCAL-00003" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1744806827798</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00004" summary="Diary implementation, refactoring">
|
||||
<option name="closed" value="true" />
|
||||
<created>1745064335338</created>
|
||||
<option name="number" value="00004" />
|
||||
<option name="presentableId" value="LOCAL-00004" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1745064335338</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00005" summary="Parsing in JSON, Javadoc">
|
||||
<option name="closed" value="true" />
|
||||
<created>1746096671150</created>
|
||||
<option name="number" value="00005" />
|
||||
<option name="presentableId" value="LOCAL-00005" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1746096671150</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00006" summary="Build">
|
||||
<option name="closed" value="true" />
|
||||
<created>1746097962786</created>
|
||||
<option name="number" value="00006" />
|
||||
<option name="presentableId" value="LOCAL-00006" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1746097962786</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00007" summary="Build fix">
|
||||
<option name="closed" value="true" />
|
||||
<created>1746098566296</created>
|
||||
<option name="number" value="00007" />
|
||||
<option name="presentableId" value="LOCAL-00007" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1746098566296</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00008" summary="Bug fix">
|
||||
<option name="closed" value="true" />
|
||||
<created>1746099310889</created>
|
||||
<option name="number" value="00008" />
|
||||
<option name="presentableId" value="LOCAL-00008" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1746099310889</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00009" summary="Save diary">
|
||||
<option name="closed" value="true" />
|
||||
<created>1746099535428</created>
|
||||
<option name="number" value="00009" />
|
||||
<option name="presentableId" value="LOCAL-00009" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1746099535428</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="10" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="RECENT_FILTERS">
|
||||
<map>
|
||||
<entry key="Branch">
|
||||
<value>
|
||||
<list>
|
||||
<RecentGroup>
|
||||
<option name="FILTER_VALUES">
|
||||
<option value="origin/master" />
|
||||
</option>
|
||||
</RecentGroup>
|
||||
<RecentGroup>
|
||||
<option name="FILTER_VALUES">
|
||||
<option value="master" />
|
||||
</option>
|
||||
</RecentGroup>
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="First commit" />
|
||||
<MESSAGE value="First classes and C.F." />
|
||||
<MESSAGE value="Game logic" />
|
||||
<MESSAGE value="Diary implementation, refactoring" />
|
||||
<MESSAGE value="Parsing in JSON, Javadoc" />
|
||||
<MESSAGE value="Build" />
|
||||
<MESSAGE value="Build fix" />
|
||||
<MESSAGE value="Bug fix" />
|
||||
<MESSAGE value="Save diary" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Save diary" />
|
||||
</component>
|
||||
</project>
|
9002
FileEsercizio/IDpersone.json
Normal file
9002
FileEsercizio/IDpersone.json
Normal file
File diff suppressed because it is too large
Load diff
9003
FileEsercizio/IDpersone.xml
Normal file
9003
FileEsercizio/IDpersone.xml
Normal file
File diff suppressed because it is too large
Load diff
32370
FileEsercizio/comuni.json
Normal file
32370
FileEsercizio/comuni.json
Normal file
File diff suppressed because it is too large
Load diff
32371
FileEsercizio/comuni.xml
Normal file
32371
FileEsercizio/comuni.xml
Normal file
File diff suppressed because it is too large
Load diff
22
PatenteELibbrettoPregoh.iml
Normal file
22
PatenteELibbrettoPregoh.iml
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="kibofplib-1.0" level="project" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/Downloads/gson-2.10.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" name="google.code.gson" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -1,2 +0,0 @@
|
|||
# PatenteELibbrettoPregoh
|
||||
|
BIN
lib/gson-2.10.1.jar
Normal file
BIN
lib/gson-2.10.1.jar
Normal file
Binary file not shown.
BIN
lib/kibofplib-1.0.jar
Normal file
BIN
lib/kibofplib-1.0.jar
Normal file
Binary file not shown.
51
src/it/unibs/fp/patenteelibbrettopregoh/Comune.java
Normal file
51
src/it/unibs/fp/patenteelibbrettopregoh/Comune.java
Normal file
|
@ -0,0 +1,51 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
/**
|
||||
* Classe che rappresenta un comune con nome e codice.
|
||||
*/
|
||||
public class Comune {
|
||||
private final String nome;
|
||||
private final String codice;
|
||||
|
||||
/**
|
||||
* Costruttore della classe Comune.
|
||||
*
|
||||
* @param nome il nome del comune
|
||||
* @param codice il codice del comune
|
||||
*/
|
||||
public Comune(String nome, String codice) {
|
||||
this.nome = nome;
|
||||
this.codice = codice;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il nome del comune.
|
||||
*
|
||||
* @return il nome del comune
|
||||
*/
|
||||
public String getNome() {
|
||||
return nome;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il codice del comune.
|
||||
*
|
||||
* @return il codice del comune
|
||||
*/
|
||||
public String getCodice() {
|
||||
return codice;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce una rappresentazione testuale del comune.
|
||||
*
|
||||
* @return una stringa che rappresenta il comune
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Comune{" +
|
||||
"nome='" + nome + '\'' +
|
||||
", codice='" + codice + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
61
src/it/unibs/fp/patenteelibbrettopregoh/Comuni.java
Normal file
61
src/it/unibs/fp/patenteelibbrettopregoh/Comuni.java
Normal file
|
@ -0,0 +1,61 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Classe che rappresenta una lista di comuni.
|
||||
*/
|
||||
public class Comuni {
|
||||
private final ArrayList<Comune> comuni;
|
||||
|
||||
/**
|
||||
* Costruttore della classe Comuni.
|
||||
* Inizializza la lista di comuni.
|
||||
*/
|
||||
public Comuni() {
|
||||
this.comuni = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Aggiunge un comune alla lista.
|
||||
*
|
||||
* @param comune il comune da aggiungere
|
||||
*/
|
||||
public void addComune(Comune comune) {
|
||||
this.comuni.add(comune);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rimuove un comune dalla lista.
|
||||
*
|
||||
* @param comune il comune da rimuovere
|
||||
*/
|
||||
public void removeComune(Comune comune) {
|
||||
this.comuni.remove(comune);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la lista di comuni.
|
||||
*
|
||||
* @return la lista di comuni
|
||||
*/
|
||||
public ArrayList<Comune> getComuni() {
|
||||
return comuni;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il codice del comune dato il nome.
|
||||
*
|
||||
* @param nomeComune il nome del comune
|
||||
* @return il codice del comune, oppure null se non trovato
|
||||
*/
|
||||
public String getCodiceComune(String nomeComune) {
|
||||
for (Comune comune : comuni) {
|
||||
if (comune.getNome().equalsIgnoreCase(nomeComune)) {
|
||||
return comune.getCodice();
|
||||
}
|
||||
}
|
||||
return null; // Comune non trovato
|
||||
}
|
||||
|
||||
}
|
5
src/it/unibs/fp/patenteelibbrettopregoh/Formato.java
Normal file
5
src/it/unibs/fp/patenteelibbrettopregoh/Formato.java
Normal file
|
@ -0,0 +1,5 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
public enum Formato {
|
||||
JSON, XML;
|
||||
}
|
230
src/it/unibs/fp/patenteelibbrettopregoh/GameData.java
Normal file
230
src/it/unibs/fp/patenteelibbrettopregoh/GameData.java
Normal file
|
@ -0,0 +1,230 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* GameData.java
|
||||
* questa classe rappresenta i dati di gioco, come il formato, il nome del personaggio,
|
||||
* il diario, le persone, il saldo, il numero di mazzette accettate dalla polizia,
|
||||
* il numero di rivoluzionari accettati, lo stato del gioco e la data.
|
||||
*
|
||||
*/
|
||||
public class GameData {
|
||||
private final Formato formato;
|
||||
private final String nomePersonaggio;
|
||||
private final ArrayList<PaginaDiario> diario;
|
||||
private final Comuni comuni;
|
||||
private final ArrayList<Persona> persone;
|
||||
private double saldo;
|
||||
private int numeroMazzetteAccettatePolizia;
|
||||
private int numeroRivoluzionariAccettati;
|
||||
private StatoGioco statoGioco;
|
||||
private int giorno;
|
||||
private LocalDate data;
|
||||
|
||||
/**
|
||||
* costruttore della classe GameData.
|
||||
* Inizializza i dati di gioco con il formato specificato.
|
||||
*
|
||||
* @param formato il formato del gioco
|
||||
*/
|
||||
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");
|
||||
this.saldo = 0;
|
||||
this.numeroMazzetteAccettatePolizia = 0;
|
||||
this.numeroRivoluzionariAccettati = 0;
|
||||
this.statoGioco = StatoGioco.IN_CORSO;
|
||||
this.nomePersonaggio = "Ajeje Brazorf";
|
||||
this.giorno = 1;
|
||||
this.data = LocalDate.of(2024, 4, 26);
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per il diario.
|
||||
*
|
||||
*/
|
||||
public ArrayList<PaginaDiario> getDiario() {
|
||||
return diario;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per i comuni.
|
||||
*
|
||||
* @return i comuni
|
||||
*/
|
||||
public Comuni getComuni() {
|
||||
return comuni;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per le persone.
|
||||
*
|
||||
* @return le persone
|
||||
*/
|
||||
public ArrayList<Persona> getPersone() {
|
||||
return persone;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per il saldo.
|
||||
*
|
||||
* @return il saldo
|
||||
*/
|
||||
public double getSaldo() {
|
||||
return saldo;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter di una persona casuale da controllare.
|
||||
*
|
||||
* @return la persona casuale da controllare
|
||||
*/
|
||||
public Persona getPersonaDaControlare() {
|
||||
return persone.get((int) (Math.random() * (persone.size() + 1)));
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per il numero di mazzette accettate dalla polizia.
|
||||
*
|
||||
* @return il numero di mazzette accettate dalla polizia
|
||||
*/
|
||||
public int getNumeroMazzetteAccettatePolizia() {
|
||||
return numeroMazzetteAccettatePolizia;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per il numero di rivoluzionari accettati.
|
||||
*
|
||||
* @return il numero di rivoluzionari accettati
|
||||
*/
|
||||
public int getNumeroRivoluzionariAccettati() {
|
||||
return numeroRivoluzionariAccettati;
|
||||
}
|
||||
|
||||
/**
|
||||
* aggiunge una pagina al diario.
|
||||
*/
|
||||
public void addPaginaDiario(PaginaDiario pagina) {
|
||||
diario.add(pagina);
|
||||
}
|
||||
|
||||
/**
|
||||
* incrementa il saldo di un valore specificato.
|
||||
*/
|
||||
public void addSaldo(double valore) {
|
||||
saldo += valore;
|
||||
}
|
||||
|
||||
/**
|
||||
* paga una multa di un valore specificato.
|
||||
*/
|
||||
public void pagaMulta(double valore) {
|
||||
paga(valore);
|
||||
}
|
||||
|
||||
/**
|
||||
* aumenta il numero di mazzette accettate dalla polizia.
|
||||
*/
|
||||
public void incrementaMazzetteAccettatePolizia() {
|
||||
numeroMazzetteAccettatePolizia++;
|
||||
if (numeroMazzetteAccettatePolizia >= 2) {
|
||||
statoGioco = StatoGioco.GIUSTIZIATO;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* aumenta il numero di rivoluzionari accettati.
|
||||
*/
|
||||
public void incrementaRivoluzionariAccettati() {
|
||||
numeroRivoluzionariAccettati++;
|
||||
if (numeroRivoluzionariAccettati >= 5) {
|
||||
statoGioco = StatoGioco.RIVOLUZIONE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per il nome del personaggio.
|
||||
*
|
||||
* @return il nome del personaggio
|
||||
*/
|
||||
public String getNomePersonaggio() {
|
||||
return nomePersonaggio;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per lo stato del gioco.
|
||||
*
|
||||
* @return lo stato del gioco
|
||||
*/
|
||||
public StatoGioco getStatoGioco() {
|
||||
return statoGioco;
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per il giorno corrente del gioco.
|
||||
*
|
||||
* @return il giorno corrente del gioco
|
||||
*/
|
||||
public int getGiorno() {
|
||||
return giorno;
|
||||
}
|
||||
|
||||
/**
|
||||
* aumenta il giorno corrente e aggiorna il saldo.
|
||||
*
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
public void incrementaGiorno(ArrayList<PersonaControllata> personeControllate) {
|
||||
if (!personeControllate.isEmpty()) {
|
||||
addSaldo(50 * personeControllate.size());
|
||||
}
|
||||
paga(200);
|
||||
|
||||
PaginaDiario pagina = new PaginaDiario(String.format("%d-%02d-%02d", data.getYear(), data.getMonthValue(), data.getDayOfMonth()), saldo);
|
||||
for (PersonaControllata persona : personeControllate) {
|
||||
pagina.addPersonaControllata(persona);
|
||||
}
|
||||
diario.add(pagina);
|
||||
|
||||
giorno++;
|
||||
|
||||
data = LocalDate.of(data.getYear(), data.getMonthValue(), data.getDayOfMonth() + 1);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fa pagare un valore specificato al saldo.
|
||||
*/
|
||||
private void paga(double valore) {
|
||||
saldo -= valore;
|
||||
if (saldo < 0) {
|
||||
statoGioco = StatoGioco.ARRESTATO;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getter per la data del gioco.
|
||||
*
|
||||
* @return la data del gioco
|
||||
*/
|
||||
public LocalDate getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* salva il diario in un file.
|
||||
*
|
||||
*/
|
||||
public void saveDiario() {
|
||||
Parser.saveDiario("FileEsercizio/diario", diario, formato);
|
||||
}
|
||||
}
|
84
src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java
Normal file
84
src/it/unibs/fp/patenteelibbrettopregoh/PaginaDiario.java
Normal file
|
@ -0,0 +1,84 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
// import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* La classe PaginaDiario rappresenta una pagina del diario di un personaggio.
|
||||
* Ogni pagina contiene la data, il bilancio e una lista di persone controllate.
|
||||
*/
|
||||
public class PaginaDiario {
|
||||
private final String data; // per nevitare problemi con Gson e la serializzazione di LocalDate
|
||||
private final double bilancio;
|
||||
@SerializedName("persone")
|
||||
private final ArrayList<PersonaControllata> personeControllate;
|
||||
|
||||
/**
|
||||
* Costruttore della classe PaginaDiario.
|
||||
*
|
||||
* @param data la data della pagina
|
||||
* @param bilancio il bilancio della pagina
|
||||
*/
|
||||
public PaginaDiario(String data, double bilancio) {
|
||||
this.data = data;
|
||||
this.bilancio = bilancio;
|
||||
this.personeControllate = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il giorno.
|
||||
*
|
||||
* @return il giorno della data
|
||||
*/
|
||||
public int getGiorno() {
|
||||
return Integer.parseInt(data.split("-")[2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la data.
|
||||
*
|
||||
* @return la data
|
||||
*/
|
||||
public String getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il bilancio.
|
||||
*
|
||||
* @return il bilancio
|
||||
*/
|
||||
public double getBilancio() {
|
||||
return bilancio;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la lista di persone controllate.
|
||||
*
|
||||
* @return la lista di persone controllate
|
||||
*/
|
||||
public ArrayList<PersonaControllata> getPersoneControllate() {
|
||||
return personeControllate;
|
||||
}
|
||||
|
||||
/**
|
||||
* aggiunge una persona controllata alla pagina del diario.
|
||||
*
|
||||
* @param persona la persona da aggiungere
|
||||
*/
|
||||
public void addPersonaControllata(PersonaControllata persona) {
|
||||
this.personeControllate.add(persona);
|
||||
}
|
||||
|
||||
/**
|
||||
* rimuove una persona controllata dalla pagina del diario.
|
||||
*
|
||||
* @param persona la persona da rimuovere
|
||||
*/
|
||||
public void removePersonaControllata(PersonaControllata persona) {
|
||||
this.personeControllate.remove(persona);
|
||||
}
|
||||
|
||||
}
|
342
src/it/unibs/fp/patenteelibbrettopregoh/Parser.java
Normal file
342
src/it/unibs/fp/patenteelibbrettopregoh/Parser.java
Normal file
|
@ -0,0 +1,342 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import javax.xml.stream.*;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonIOException;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import java.io.FileWriter;
|
||||
|
||||
/**
|
||||
* Parser.java
|
||||
* Questa classe è responsabile della lettura e scrittura dei dati di gioco in formato JSON e XML.
|
||||
* Utilizza la libreria Gson per la serializzazione e deserializzazione dei dati.
|
||||
*/
|
||||
public class Parser {
|
||||
/**
|
||||
* Metodo per il parsing delle persone da un file JSON o XML.
|
||||
*
|
||||
* @param formato il formato del file (JSON o XML)
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @return una lista di oggetti Persona
|
||||
*/
|
||||
public static ArrayList<Persona> parsePersone(Formato formato, String fileName) {
|
||||
ArrayList<Persona> persone = new ArrayList<>();
|
||||
if (formato == Formato.XML) {
|
||||
parsePersoneXML(fileName, persone);
|
||||
|
||||
}
|
||||
else {
|
||||
persone = parsePersoneJSON(fileName, persone);
|
||||
|
||||
}
|
||||
return persone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il parsing delle persone da un file JSON.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param persone la lista di persone da riempire
|
||||
* @return la lista di persone
|
||||
*/
|
||||
private static ArrayList<Persona> parsePersoneJSON(String fileName, ArrayList<Persona> persone) {
|
||||
fileName = fileName + ".json";
|
||||
try (FileReader reader = new FileReader(fileName)) {
|
||||
Gson gson = new Gson();
|
||||
Type listType = new TypeToken<ArrayList<Persona>>(){}.getType();
|
||||
persone = gson.fromJson(reader, listType);
|
||||
} catch (JsonIOException | JsonSyntaxException | IOException e) {
|
||||
System.out.println("Error reading the JSON file: " + e.getMessage());
|
||||
}
|
||||
return persone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il parsing delle persone da un file XML.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param persone la lista di persone da riempire
|
||||
*/
|
||||
private static void parsePersoneXML(String fileName, ArrayList<Persona> persone) {
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il parsing dei comuni da un file JSON o XML.
|
||||
*
|
||||
* @param formato il formato del file (JSON o XML)
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @return un oggetto Comuni contenente la lista di comuni
|
||||
*/
|
||||
public static Comuni parseComuni(Formato formato, String fileName) {
|
||||
Comuni comuni = new Comuni();
|
||||
if (formato == Formato.XML) {
|
||||
parseComuniXML(fileName, comuni);
|
||||
}
|
||||
else {
|
||||
comuni = parseComuniJSON(fileName, comuni);
|
||||
}
|
||||
|
||||
return comuni;
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il parsing dei comuni da un file JSON.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param comuni l'oggetto Comuni da riempire
|
||||
* @return l'oggetto Comuni
|
||||
*/
|
||||
private static Comuni parseComuniJSON(String fileName, Comuni comuni) {
|
||||
fileName = fileName + ".json";
|
||||
try (FileReader reader = new FileReader(fileName)) {
|
||||
Gson gson = new Gson();
|
||||
Type listType = new TypeToken<ArrayList<Comune>>() {}.getType();
|
||||
ArrayList<Comune> listaComuni = gson.fromJson(reader, listType);
|
||||
|
||||
comuni = new Comuni();
|
||||
for (Comune comune : listaComuni) {
|
||||
comuni.addComune(comune);
|
||||
}
|
||||
|
||||
} catch (JsonIOException | JsonSyntaxException | IOException e) {
|
||||
System.out.println("Error reading the JSON file: " + e.getMessage());
|
||||
}
|
||||
return comuni;
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il parsing dei comuni da un file XML.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param comuni l'oggetto Comuni da riempire
|
||||
*/
|
||||
private static void parseComuniXML(String fileName, Comuni comuni) {
|
||||
fileName = fileName + ".xml";
|
||||
XMLInputFactory xmlif;
|
||||
XMLStreamReader xmlr;
|
||||
String currentElement = null;
|
||||
String nome = null;
|
||||
String codice = 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();
|
||||
break;
|
||||
|
||||
|
||||
case XMLStreamConstants.CHARACTERS:
|
||||
String text = xmlr.getText().trim();
|
||||
if (!text.isEmpty() && currentElement != null) {
|
||||
if (currentElement.equals("nome")) {
|
||||
nome = text;
|
||||
} else if (currentElement.equals("codice")) {
|
||||
codice = text;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case XMLStreamConstants.END_ELEMENT:
|
||||
String endTag = xmlr.getLocalName();
|
||||
if (endTag.equals("comune")) {
|
||||
Comune comune = new Comune(nome, codice);
|
||||
comuni.addComune(comune);
|
||||
|
||||
nome = null;
|
||||
codice = null;
|
||||
}
|
||||
currentElement = null;
|
||||
break;
|
||||
}
|
||||
|
||||
xmlr.next();
|
||||
}
|
||||
|
||||
xmlr.close();
|
||||
} catch (FactoryConfigurationError | XMLStreamException | IOException e) {
|
||||
System.out.println("Error reading the file: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il salvataggio del diario in formato JSON o XML.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param pagineDiario la lista di pagine del diario
|
||||
* @param formato il formato del file (JSON o XML)
|
||||
*/
|
||||
public static void saveDiario (String fileName, ArrayList<PaginaDiario> pagineDiario, Formato formato) {
|
||||
if (formato == Formato.XML) {
|
||||
salvaDiarioXML(fileName, pagineDiario);
|
||||
|
||||
} else if (formato == Formato.JSON) {
|
||||
salvaDiarioJSON(fileName, pagineDiario);
|
||||
}
|
||||
|
||||
System.out.println("Diario salvato nella cartella corrente con nome: " + fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il salvataggio del diario in formato JSON.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param pagineDiario la lista di pagine del diario
|
||||
*/
|
||||
private static void salvaDiarioJSON(String fileName, ArrayList<PaginaDiario> pagineDiario) {
|
||||
fileName = fileName + ".json";
|
||||
Gson gson = new Gson();
|
||||
try (FileWriter writer = new FileWriter(fileName)) {
|
||||
gson.toJson(pagineDiario, writer);
|
||||
} catch (JsonIOException | IOException e) {
|
||||
System.out.println("Error in initializing the writer:");
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo per il salvataggio del diario in formato XML.
|
||||
*
|
||||
* @param fileName il nome del file senza estensione
|
||||
* @param pagineDiario la lista di pagine del diario
|
||||
*/
|
||||
private static void salvaDiarioXML(String fileName, ArrayList<PaginaDiario> pagineDiario) {
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,268 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import it.kibo.fp.lib.InputData;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/**
|
||||
* PatenteELibbrettoPregohMain.java
|
||||
* Questa classe rappresenta il punto di ingresso del gioco "Patente e Libretto Pregoh".
|
||||
* Inizializza il gioco, gestisce il ciclo di gioco e termina il gioco.
|
||||
*/
|
||||
public class PatenteELibbrettoPregohMain {
|
||||
/**
|
||||
* Metodo principale che avvia il gioco.
|
||||
*
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
System.out.println("PatenteELibbrettoPregoh!");
|
||||
|
||||
Formato formato = getFormato();
|
||||
GameData gameData = new GameData(formato);
|
||||
gameLoop(gameData);
|
||||
endGame(gameData);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce il ciclo di gioco.
|
||||
*
|
||||
* @param gameData i dati di gioco
|
||||
*/
|
||||
private static void gameLoop(GameData gameData) {
|
||||
while (gameData.getStatoGioco() == StatoGioco.IN_CORSO) {
|
||||
int personeChePassano = ((int)(Math.random() * 5) + 3);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce una persona controllata.
|
||||
*
|
||||
* @param gameData i dati di gioco
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce i dati errati rifiutati.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param gameData i dati di gioco
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce la persona rifiutata.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
private static void personaRifiutata(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
|
||||
PersonaControllata personaControllata;
|
||||
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
|
||||
personeControllate.add(personaControllata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce la mazzetta.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param gameData i dati di gioco
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce la mazzetta rifiutata.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
private static void mazzettaRifiutata(Persona personaDaControllare, ArrayList<PersonaControllata> personeControllate) {
|
||||
PersonaControllata personaControllata;
|
||||
personaControllata = new PersonaControllata(personaDaControllare, false, TipoPersonaControllata.PERSONA_NORMALE);
|
||||
personeControllate.add(personaControllata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce la mazzetta di un poliziotto.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param gameData i dati di gioco
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce la mazzetta di un rivoluzionario.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param gameData i dati di gioco
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce i dati corretti rifiutati.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
* @param gameData i dati di gioco
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce i dati errati accettati.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
* @param gameData i dati di gioco
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che gestisce i dati corretti accettati.
|
||||
*
|
||||
* @param personaDaControllare la persona da controllare
|
||||
* @param personeControllate la lista delle persone controllate
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che termina il gioco e mostra il risultato finale.
|
||||
*
|
||||
* @param gameData i dati di gioco
|
||||
*/
|
||||
private static void endGame(GameData gameData) {
|
||||
gameData.saveDiario();
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che controlla se una persona ha i dati corretti.
|
||||
*
|
||||
* @param persona la persona da controllare
|
||||
* @param comuni la lista dei comuni
|
||||
* @param gameData i dati di gioco
|
||||
* @return true se la persona ha i dati corretti, false altrimenti
|
||||
*/
|
||||
private static boolean controllaPersona(Persona persona, Comuni comuni, GameData gameData) {
|
||||
return persona.isCodiceFiscaleValido(comuni) && persona.isDocumentoValido(gameData.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che chiede all'utente di scegliere il formato di salvataggio.
|
||||
*
|
||||
* @return il formato scelto
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
362
src/it/unibs/fp/patenteelibbrettopregoh/Persona.java
Normal file
362
src/it/unibs/fp/patenteelibbrettopregoh/Persona.java
Normal file
|
@ -0,0 +1,362 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Classe che rappresenta una persona con i suoi dati anagrafici e il codice fiscale.
|
||||
* La classe fornisce metodi per calcolare il codice fiscale e verificarne la validità.
|
||||
*/
|
||||
public class Persona {
|
||||
private final String nome;
|
||||
private final String cognome;
|
||||
private final String sesso;
|
||||
@SerializedName("data_nascita") // Per la serializzazione/deserializzazione JSON
|
||||
private final String dataNascita;
|
||||
|
||||
@SerializedName("comune_nascita") // Per la serializzazione/deserializzazione JSON
|
||||
private final String comuneNascita;
|
||||
|
||||
@SerializedName("codice_fiscale") // Per la serializzazione/deserializzazione JSON
|
||||
private final String codiceFiscale;
|
||||
|
||||
@SerializedName("scadenza_documento") // Per la serializzazione/deserializzazione JSON
|
||||
private final String scadenzaDocumento;
|
||||
|
||||
/**
|
||||
* Costruttore della classe Persona.
|
||||
*
|
||||
* @param nome Nome della persona.
|
||||
* @param cognome Cognome della persona.
|
||||
* @param sesso Sesso
|
||||
* @param dataNascita Data di nascita in formato "YYYY-MM-DD".
|
||||
* @param comuneNascita Comune di nascita.
|
||||
* @param codiceFiscale Codice fiscale.
|
||||
* @param scadenzaDocumento Data di scadenza del documento in formato "YYYY-MM-DD".
|
||||
*/
|
||||
public Persona(String nome, String cognome, String sesso, String dataNascita, String comuneNascita, String codiceFiscale, String scadenzaDocumento) {
|
||||
this.nome = nome;
|
||||
this.cognome = cognome;
|
||||
this.sesso = sesso;
|
||||
this.dataNascita = dataNascita;
|
||||
this.comuneNascita = comuneNascita;
|
||||
this.codiceFiscale = codiceFiscale;
|
||||
this.scadenzaDocumento = scadenzaDocumento;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il nome della persona.
|
||||
*
|
||||
* @return Nome della persona.
|
||||
*/
|
||||
public String getNome() {
|
||||
return nome;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il cognome della persona.
|
||||
*
|
||||
* @return Cognome della persona.
|
||||
*/
|
||||
public String getCognome() {
|
||||
return cognome;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il sesso della persona.
|
||||
*
|
||||
* @return Sesso della persona.
|
||||
*/
|
||||
public String getSesso() {
|
||||
return sesso;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la data di nascita della persona.
|
||||
*
|
||||
* @return Data di nascita della persona in formato "YYYY-MM-DD".
|
||||
*/
|
||||
public String getDataNascita() {
|
||||
return dataNascita;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il comune di nascita della persona.
|
||||
*
|
||||
* @return Comune di nascita della persona.
|
||||
*/
|
||||
public String getComuneNascita() {
|
||||
return comuneNascita;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il codice fiscale della persona.
|
||||
*
|
||||
* @return Codice fiscale della persona.
|
||||
*/
|
||||
public String getCodiceFiscale() {
|
||||
return codiceFiscale;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la data di scadenza del documento della persona.
|
||||
*
|
||||
* @return Data di scadenza del documento in formato "YYYY-MM-DD".
|
||||
*/
|
||||
public String getScadenzaDocumento() {
|
||||
return scadenzaDocumento;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica se il codice fiscale fornito è valido confrontandolo con quello calcolato.
|
||||
*
|
||||
* @param comuni Oggetto Comuni per ottenere il codice del comune di nascita.
|
||||
* @return true se il codice fiscale è valido, false altrimenti.
|
||||
*/
|
||||
public boolean isCodiceFiscaleValido(Comuni comuni) {
|
||||
return codiceFiscale.equals(calcolaCodiceFiscale(comuni));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcola il codice fiscale della persona in base ai suoi dati anagrafici.
|
||||
*
|
||||
* @param comuni Oggetto Comuni per ottenere il codice del comune di nascita.
|
||||
* @return Il codice fiscale calcolato.
|
||||
*/
|
||||
public String calcolaCodiceFiscale(Comuni comuni) {
|
||||
ArrayList<String> consonantiCognome = getCaratteri(cognome, true);
|
||||
ArrayList<String> consonantiNome = getCaratteri(nome, true);
|
||||
StringBuilder codiceFiscaleCalcolato = new StringBuilder();
|
||||
|
||||
int stillMissing = 3 - consonantiCognome.size();
|
||||
if (stillMissing <= 0) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
codiceFiscaleCalcolato.append(consonantiCognome.get(i));
|
||||
}
|
||||
} else {
|
||||
ArrayList<String> vocaliCognome = getCaratteri(cognome, false);
|
||||
for (String consonante : consonantiCognome) {
|
||||
codiceFiscaleCalcolato.append(consonante);
|
||||
}
|
||||
|
||||
for (int i = 0; i < stillMissing; i++) {
|
||||
if (i < vocaliCognome.size()) {
|
||||
codiceFiscaleCalcolato.append(vocaliCognome.get(i));
|
||||
} else {
|
||||
codiceFiscaleCalcolato.append("X");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (consonantiNome.size() > 3){
|
||||
codiceFiscaleCalcolato.append(consonantiNome.get(0));
|
||||
codiceFiscaleCalcolato.append(consonantiNome.get(2));
|
||||
codiceFiscaleCalcolato.append(consonantiNome.get(3));
|
||||
} else if (consonantiNome.size() == 3){
|
||||
for (String consonante : consonantiNome) {
|
||||
codiceFiscaleCalcolato.append(consonante);
|
||||
}
|
||||
} else {
|
||||
stillMissing = 3 - consonantiNome.size();
|
||||
ArrayList<String> vocaliNome = getCaratteri(nome, false);
|
||||
for (String consonante : consonantiNome) {
|
||||
codiceFiscaleCalcolato.append(consonante);
|
||||
}
|
||||
if (vocaliNome.size() >= stillMissing){
|
||||
for (int i = 0; i < stillMissing; i++) {
|
||||
codiceFiscaleCalcolato.append(vocaliNome.get(i));
|
||||
}
|
||||
} else {
|
||||
stillMissing = stillMissing - vocaliNome.size();
|
||||
for (String vocali : vocaliNome) {
|
||||
codiceFiscaleCalcolato.append(vocali);
|
||||
}
|
||||
|
||||
for (int i = 0; i < stillMissing; i++) {
|
||||
codiceFiscaleCalcolato.append("X");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
codiceFiscaleCalcolato.append(dataNascita, 2, 4);
|
||||
;
|
||||
int mese = Integer.parseInt(dataNascita.substring(5, 7));
|
||||
|
||||
codiceFiscaleCalcolato.append(getLetteraMese(mese));
|
||||
|
||||
int giorno = Integer.parseInt(dataNascita.substring(8, 10));
|
||||
|
||||
if (sesso.equalsIgnoreCase("F")) {
|
||||
giorno += 40;
|
||||
}
|
||||
|
||||
if (giorno < 10) {
|
||||
codiceFiscaleCalcolato.append("0");
|
||||
}
|
||||
|
||||
codiceFiscaleCalcolato.append(giorno);
|
||||
|
||||
String codiceComune = comuni.getCodiceComune(comuneNascita);
|
||||
|
||||
codiceFiscaleCalcolato.append(codiceComune);
|
||||
|
||||
Character carattereDiControllo;
|
||||
|
||||
int somma = 0;
|
||||
|
||||
for (int i = 0; i < codiceFiscaleCalcolato.length(); i++) {
|
||||
char c = codiceFiscaleCalcolato.charAt(i);
|
||||
somma += getValueOf(c, (i + 1)%2 == 0);
|
||||
}
|
||||
|
||||
int resto = somma % 26;
|
||||
|
||||
carattereDiControllo = (char) ('A' + resto);
|
||||
|
||||
codiceFiscaleCalcolato.append(carattereDiControllo);
|
||||
|
||||
|
||||
return codiceFiscaleCalcolato.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il valore numerico associato a un carattere in base alla sua posizione.
|
||||
*
|
||||
* @param c Carattere da convertire.
|
||||
* @param b Indica se il carattere è in una posizione pari o dispari.
|
||||
* @return Valore numerico associato al carattere.
|
||||
*/
|
||||
private int getValueOf(char c, boolean b) {
|
||||
if (!b) {
|
||||
return switch (c) {
|
||||
case '0', 'A' -> 1;
|
||||
case '1', 'B' -> 0;
|
||||
case '2', 'C' -> 5;
|
||||
case '3', 'D' -> 7;
|
||||
case '4', 'E' -> 9;
|
||||
case '5', 'F' -> 13;
|
||||
case '6', 'G' -> 15;
|
||||
case '7', 'H' -> 17;
|
||||
case '8', 'I' -> 19;
|
||||
case '9', 'J' -> 21;
|
||||
case 'K' -> 2;
|
||||
case 'L' -> 4;
|
||||
case 'M' -> 18;
|
||||
case 'N' -> 20;
|
||||
case 'O' -> 11;
|
||||
case 'P' -> 3;
|
||||
case 'Q' -> 6;
|
||||
case 'R' -> 8;
|
||||
case 'S' -> 12;
|
||||
case 'T' -> 14;
|
||||
case 'U' -> 16;
|
||||
case 'V' -> 10;
|
||||
case 'W' -> 22;
|
||||
case 'X' -> 25;
|
||||
case 'Y' -> 24;
|
||||
case 'Z' -> 23;
|
||||
default -> -1; // Invalid character
|
||||
};
|
||||
} else {
|
||||
return switch (c) {
|
||||
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> c - '0';
|
||||
case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' -> c - 'A';
|
||||
default -> -1; // Invalid character
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la lettera corrispondente al mese fornito.
|
||||
*
|
||||
* @param mese Mese in formato numerico (1-12).
|
||||
* @return Lettera corrispondente al mese.
|
||||
*/
|
||||
private String getLetteraMese(int mese) {
|
||||
return switch (mese) {
|
||||
case 1 -> "A";
|
||||
case 2 -> "B";
|
||||
case 3 -> "C";
|
||||
case 4 -> "D";
|
||||
case 5 -> "E";
|
||||
case 6 -> "H";
|
||||
case 7 -> "L";
|
||||
case 8 -> "M";
|
||||
case 9 -> "P";
|
||||
case 10 -> "R";
|
||||
case 11 -> "S";
|
||||
case 12 -> "T";
|
||||
default -> "";
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica se il documento della persona è valido in base alla data fornita.
|
||||
*
|
||||
* @param date Data da confrontare con la scadenza del documento.
|
||||
* @return true se il documento è valido, false altrimenti.
|
||||
*/
|
||||
public boolean isDocumentoValido(LocalDate date) {
|
||||
LocalDate scadenza = LocalDate.parse(scadenzaDocumento);
|
||||
return date.isBefore(scadenza) || date.isEqual(scadenza);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica se il carattere fornito è una vocale.
|
||||
*
|
||||
* @param c Carattere da verificare.
|
||||
* @return true se il carattere è una vocale, false altrimenti.
|
||||
*/
|
||||
private static boolean isVocale(char c) {
|
||||
c = Character.toLowerCase(c);
|
||||
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica se il carattere fornito è una consonante.
|
||||
*
|
||||
* @param c Carattere da verificare.
|
||||
* @return true se il carattere è una consonante, false altrimenti.
|
||||
*/
|
||||
public static boolean isConsonante(char c) {
|
||||
return Character.isLetter(c) && !isVocale(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce un ArrayList di caratteri consonanti o vocali presenti nella stringa fornita.
|
||||
*
|
||||
* @param s Stringa da analizzare.
|
||||
* @param tipo true per consonanti, false per vocali.
|
||||
* @return ArrayList di caratteri consonanti o vocali.
|
||||
*/
|
||||
private ArrayList<String> getCaratteri(String s, boolean tipo){
|
||||
ArrayList<String> ret = new ArrayList<>();
|
||||
if (tipo){ // consonanti
|
||||
for (char c : s.toCharArray()) {
|
||||
if (isConsonante(c)) {
|
||||
ret.add(String.valueOf(c).toUpperCase());
|
||||
}
|
||||
}
|
||||
} else { // vocali
|
||||
for (char c : s.toCharArray()) {
|
||||
if (isVocale(c)) {
|
||||
ret.add(String.valueOf(c).toUpperCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce una rappresentazione testuale della persona.
|
||||
*
|
||||
* @return Stringa contenente i dati anagrafici e il codice fiscale della persona.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return nome + " " + cognome + " (" + sesso + ") nato il " + dataNascita + " a " + comuneNascita + " con C.F. " + codiceFiscale + ", validità documento " + scadenzaDocumento;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
/**
|
||||
* La classe PersonaControllata estende la classe Persona e rappresenta una persona che è stata controllata.
|
||||
* Contiene informazioni sul risultato del controllo e sul tipo di persona controllata.
|
||||
*/
|
||||
public class PersonaControllata extends Persona {
|
||||
@SerializedName("approvato")
|
||||
private final boolean esitoControllo;
|
||||
private transient final TipoPersonaControllata tipoPersonaControllata;
|
||||
|
||||
/**
|
||||
* Costruttore della classe PersonaControllata.
|
||||
*
|
||||
* @param persona L'oggetto Persona da cui estrarre le informazioni.
|
||||
* @param esitoControllo Il risultato del controllo (true se approvato, false se rifiutato).
|
||||
* @param tipoPersonaControllata Il tipo di persona controllata.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il risultato del controllo.
|
||||
*
|
||||
* @return true se il controllo è positivo, false altrimenti.
|
||||
*/
|
||||
public boolean isEsitoControllo() {
|
||||
return esitoControllo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il tipo di persona controllata.
|
||||
*
|
||||
* @return Il tipo di persona controllata.
|
||||
*/
|
||||
public TipoPersonaControllata getTipoPersonaControllata() {
|
||||
return tipoPersonaControllata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo stato del transito in base all'esito del controllo.
|
||||
*
|
||||
* @return "APPROVATO" se il controllo è positivo, "RIFIUTATO" altrimenti.
|
||||
*/
|
||||
public String getStatoTransito() {
|
||||
return esitoControllo ? "APPROVATO" : "RIFIUTATO";
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce una rappresentazione testuale della PersonaControllata.
|
||||
*
|
||||
* @return Una stringa contenente le informazioni della persona controllata.
|
||||
*/
|
||||
@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";
|
||||
}
|
||||
}
|
5
src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java
Normal file
5
src/it/unibs/fp/patenteelibbrettopregoh/StatoGioco.java
Normal file
|
@ -0,0 +1,5 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
public enum StatoGioco {
|
||||
ARRESTATO, GIUSTIZIATO, RIVOLUZIONE, DODICESIMO_GIORNO, NON_ABBASTANZA_SOLDI, IN_CORSO;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package it.unibs.fp.patenteelibbrettopregoh;
|
||||
|
||||
public enum TipoPersonaControllata {
|
||||
RIVOLUZIONARIO, POLIZIOTTO, PERSONA_NORMALE;
|
||||
}
|
BIN
uml.png
Normal file
BIN
uml.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 404 KiB |
149
uml.puml
Normal file
149
uml.puml
Normal file
|
@ -0,0 +1,149 @@
|
|||
@startuml
|
||||
class Comune {
|
||||
- nome: String
|
||||
- codice: String
|
||||
+ getNome(): String
|
||||
+ getCodice(): String
|
||||
}
|
||||
|
||||
class Comuni {
|
||||
- comuni: ArrayList<Comune>
|
||||
+ addComune(Comune): void
|
||||
+ removeComune(Comune): void
|
||||
+ getComuni(): ArrayList<Comune>
|
||||
+ getCodiceComune(String): String
|
||||
}
|
||||
|
||||
enum Formato {
|
||||
JSON
|
||||
XML
|
||||
}
|
||||
|
||||
enum StatoGioco {
|
||||
IN_CORSO
|
||||
GIUSTIZIATO
|
||||
RIVOLUZIONE
|
||||
DODICESIMO_GIORNO
|
||||
NON_ABBASTANZA_SOLDI
|
||||
ARRESTATO
|
||||
}
|
||||
|
||||
class PatenteELibbrettoPregohMain {
|
||||
+main(String[]): void
|
||||
-gameLoop(GameData): void
|
||||
-gestisciPersona(GameData, ArrayList<PersonaControllata>): void
|
||||
-datiSbagliatiRifiutati(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||
-personaRifiutata(Persona, ArrayList<PersonaControllata>): void
|
||||
-gestisciMazzetta(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||
-mazzettaRifiutata(Persona, ArrayList<PersonaControllata>): void
|
||||
-mazzettaPoliziotto(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||
-mazzettaRivoluzionario(Persona, GameData, ArrayList<PersonaControllata>): void
|
||||
-datiCorrettiRifiutati(Persona, ArrayList<PersonaControllata>, GameData): void
|
||||
-datiSbagliatiAccettati(Persona, ArrayList<PersonaControllata>, GameData): void
|
||||
-datiCorrettiAccettati(Persona, ArrayList<PersonaControllata>): void
|
||||
-endGame(GameData): void
|
||||
-controllaPersona(Persona, Comuni, GameData): boolean
|
||||
-getFormato(): Formato
|
||||
}
|
||||
|
||||
class Persona {
|
||||
-nome: String
|
||||
-cognome: String
|
||||
-sesso: String
|
||||
-dataNascita: String
|
||||
-comuneNascita: String
|
||||
-codiceFiscale: String
|
||||
-scadenzaDocumento: String
|
||||
+getNome(): String
|
||||
+getCognome(): String
|
||||
+getSesso(): String
|
||||
+getDataNascita(): String
|
||||
+getComuneNascita(): String
|
||||
+getCodiceFiscale(): String
|
||||
+getScadenzaDocumento(): String
|
||||
+isCodiceFiscaleValido(Comuni): boolean
|
||||
+calcolaCodiceFiscale(Comuni): String
|
||||
}
|
||||
|
||||
class GameData {
|
||||
- formato: Formato
|
||||
- nomePersonaggio: String
|
||||
- diario: ArrayList<PaginaDiario>
|
||||
- comuni: Comuni
|
||||
- persone: ArrayList<Persona>
|
||||
- saldo: double
|
||||
- numeroMazzetteAccettatePolizia: int
|
||||
- numeroRivoluzionariAccettati: int
|
||||
- statoGioco: StatoGioco
|
||||
- giorno: int
|
||||
- data: LocalDate
|
||||
+ getDiario(): ArrayList<PaginaDiario>
|
||||
+ getComuni(): Comuni
|
||||
+ getPersone(): ArrayList<Persona>
|
||||
+ getSaldo(): double
|
||||
+ getPersonaDaControlare(): Persona
|
||||
+ getNumeroMazzetteAccettatePolizia(): int
|
||||
+ getNumeroRivoluzionariAccettati(): int
|
||||
+ addPaginaDiario(PaginaDiario): void
|
||||
+ addSaldo(double): void
|
||||
+ pagaMulta(double): void
|
||||
+ incrementaMazzetteAccettatePolizia(): void
|
||||
+ incrementaRivoluzionariAccettati(): void
|
||||
+ getNomePersonaggio(): String
|
||||
+ getStatoGioco(): StatoGioco
|
||||
+ getGiorno(): int
|
||||
+ incrementaGiorno(ArrayList<PersonaControllata>): void
|
||||
+ getData(): LocalDate
|
||||
+ saveDiario(): void
|
||||
}
|
||||
|
||||
class PaginaDiario {
|
||||
- data: String
|
||||
- bilancio: double
|
||||
- personeControllate: ArrayList<PersonaControllata>
|
||||
+ getGiorno(): int
|
||||
+ getData(): String
|
||||
+ getBilancio(): double
|
||||
+ getPersoneControllate(): ArrayList<PersonaControllata>
|
||||
+ addPersonaControllata(PersonaControllata): void
|
||||
+ removePersonaControllata(PersonaControllata): void
|
||||
}
|
||||
|
||||
class Parser {
|
||||
+ parsePersone(Formato, String): ArrayList<Persona>
|
||||
+ parseComuni(Formato, String): Comuni
|
||||
+ saveDiario(String, ArrayList<PaginaDiario>, Formato): void
|
||||
}
|
||||
|
||||
class PersonaControllata {
|
||||
- esitoControllo: boolean <<@SerializedName("approvato")>>
|
||||
- tipoPersonaControllata: TipoPersonaControllata <<transient>>
|
||||
--
|
||||
+ PersonaControllata(persona: Persona, esitoControllo: boolean, tipoPersonaControllata: TipoPersonaControllata)
|
||||
+ isEsitoControllo(): boolean
|
||||
+ getTipoPersonaControllata(): TipoPersonaControllata
|
||||
+ getStatoTransito(): String
|
||||
+ toString(): String
|
||||
}
|
||||
|
||||
PersonaControllata --|> Persona
|
||||
|
||||
PatenteELibbrettoPregohMain --> GameData
|
||||
PatenteELibbrettoPregohMain --> PersonaControllata
|
||||
PatenteELibbrettoPregohMain --> Persona
|
||||
PatenteELibbrettoPregohMain --> Formato
|
||||
PatenteELibbrettoPregohMain --> StatoGioco
|
||||
PatenteELibbrettoPregohMain --> Comuni
|
||||
PatenteELibbrettoPregohMain --> Parser
|
||||
Persona --> Comuni
|
||||
Comune <-- Comuni
|
||||
GameData --> Comuni
|
||||
GameData --> "0..*" Persona
|
||||
GameData --> "0..*" PaginaDiario
|
||||
GameData --> Formato
|
||||
GameData --> StatoGioco
|
||||
|
||||
GameData --> "0..*" PersonaControllata
|
||||
|
||||
}
|
||||
@enduml
|
Loading…
Add table
Reference in a new issue