feat: 💩 on avance dans jeu

This commit is contained in:
gdamms 2021-12-01 20:55:46 +01:00
parent e967c69dc7
commit 7afc1b4f7c
19 changed files with 304 additions and 79 deletions

View file

@ -1 +1,2 @@
.metadata .metadata
*.class

11
.vscode/settings.json vendored
View file

@ -2,4 +2,13 @@
"files.associations": { "files.associations": {
"*.game": "json" "*.game": "json"
}, },
} "files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
"**/Thumbs.db": true,
"**/*.class": true
}
}

View file

@ -63,8 +63,8 @@
"lieu_in": "Énigme", "lieu_in": "Énigme",
"lieu_out": "Succès", "lieu_out": "Succès",
"ouvert": "(true)", "ouvert": "(true)",
"visible": "(Réussite==1)", "visible": "(Réussite)",
"obligatoire": "(false)", "obligatoire": "(true)",
"connaissances_gift": [], "connaissances_gift": [],
"objets_gift": [], "objets_gift": [],
"objets_conso": [], "objets_conso": [],
@ -79,8 +79,8 @@
"lieu_in": "Énigme", "lieu_in": "Énigme",
"lieu_out": "Échec", "lieu_out": "Échec",
"ouvert": "(true)", "ouvert": "(true)",
"visible": "(tentatives==0)", "visible": "(tentatives == 0)",
"obligatoire": "(false)", "obligatoire": "(true)",
"connaissances": [], "connaissances": [],
"objets": [], "objets": [],
"objets_conso": [], "objets_conso": [],
@ -121,23 +121,22 @@
"Personnes": [ "Personnes": [
{ {
"nom": "Sphinx", "nom": "Sphinx",
"visible": "(true)", "visible": "(!Reussite && tentative > 0)",
"obligatoire": "(true)", "obligatoire": "(true)",
"interactions": [ "interactions": [
{ {
"visible": "(true)", "visible": "(true)",
"connaissances": [], "connaissances": [],
"objets_recus": [], "objets_recus": [],
"objets_conso": [],
"actions": [ "actions": [
{ {
"visible": "(true)", "visible": "(true)",
"connaissances": [ "connaissances": [
"Réussite" "Réussite"
], ],
"objets_gift": [], "objets_recus": [],
"objets_conso": [ "objets_conso": []
"tentative"
]
}, },
{ {
"visible": "(true)", "visible": "(true)",

View file

@ -1,20 +1,35 @@
import java.util.List;
public class Action { public class Action {
Boolean visible; Condition visible;
List<Connaissance> connaissances; List<Connaissance> connaissances;
List<Objet> objetsRecus; List<Objet> objetsRecus;
List<Objet> objetsConso; List<Objet> objetsConso;
Condition finInterraction; Condition finInterraction;
List<Description> descriptions;
public Action( public Action(
Boolean visible, Condition visible,
List<Connaissance> connaissances, List<Connaissance> connaissances,
List<Objet> objetsRecus, List<Objet> objetsRecus,
List<Objet> objetsConso, List<Objet> objetsConso,
Condition finInterraction) { Condition finInterraction,
List<Description> descriptions) {
this.visible = visible; this.visible = visible;
this.connaissancesGift = connaissances; this.connaissances = connaissances;
this.objetsRecus = objetsRecus; this.objetsRecus = objetsRecus;
this.objetsConso = objetsConso; this.objetsConso = objetsConso;
this.finInterraction = finInterraction; this.finInterraction = finInterraction;
this.descriptions = descriptions;
}
@Override
public String toString() {
for (Description d : this.descriptions) {
if (d.condition.evaluer()) {
return d.toString();
}
}
return "No desc";
} }
} }

View file

@ -1,9 +1,11 @@
import java.util.List;
public class Chemin { public class Chemin {
Lieu lieuIn; Lieu lieuIn;
Lieu lieuOut; Lieu lieuOut;
Boolean ouvert; Condition ouvert;
Boolean visible; Condition visible;
Boolean obligatoire; Condition obligatoire;
List<Connaissance> connaissancesRecus; List<Connaissance> connaissancesRecus;
List<Objet> objetsRecus; List<Objet> objetsRecus;
List<Objet> objetsConso; List<Objet> objetsConso;
@ -12,9 +14,9 @@ public class Chemin {
public Chemin( public Chemin(
Lieu lieuIn, Lieu lieuIn,
Lieu lieuOut, Lieu lieuOut,
Boolean ouvert, Condition ouvert,
Boolean visible, Condition visible,
Boolean obligatoire, Condition obligatoire,
List<Connaissance> connaissancesRecus, List<Connaissance> connaissancesRecus,
List<Objet> objetsRecus, List<Objet> objetsRecus,
List<Objet> objetsConso, List<Objet> objetsConso,
@ -30,4 +32,14 @@ public class Chemin {
this.descriptions = descriptions; this.descriptions = descriptions;
} }
@Override
public String toString() {
for (Description d : descriptions) {
if (d.condition.evaluer()) {
return d.toString();
}
}
return "No desc";
}
} }

View file

@ -1,13 +1,16 @@
import java.util.List;
import java.util.ArrayList;
public class Condition { public class Condition {
String condition;
List<ConditionEt> conditionEts; List<ConditionEt> conditionEts;
public Condition( public Condition(
String condition, ConditionEt... conditionEts) {
List<ConditionEt> conditionEts) { this.conditionEts = new ArrayList<>();
this.condition = condition; for (ConditionEt c : conditionEts) {
this.conditionEts = conditionEts; this.conditionEts.add(c);
}
} }
public Boolean evaluer() { public Boolean evaluer() {

View file

@ -1,7 +1,7 @@
public class ConditionBoolean implements ConditionTest { public class ConditionBoolean implements ConditionTest {
Boolean bool; Boolean bool;
public ConditionObjet(Boolean bool) { public ConditionBoolean(Boolean bool) {
this.bool = bool; this.bool = bool;
} }

View file

@ -1,9 +1,15 @@
import java.util.List;
import java.util.ArrayList;
public class ConditionEt { public class ConditionEt {
List<ConditionTest> conditionTests; List<ConditionTest> conditionTests;
public ConditionEt(ConditionTest[] conditionTests) { public ConditionEt(ConditionTest... conditionTests) {
this.conditionTests = conditionTests; this.conditionTests = new ArrayList<>();
for (ConditionTest c : conditionTests) {
this.conditionTests.add(c);
}
} }
public Boolean evaluer() { public Boolean evaluer() {

View file

@ -1,14 +1,26 @@
import java.util.List;
public class Connaissance { public class Connaissance {
String nom; String nom;
Condition visible; Condition visible;
Description description; List<Description> descriptions;
public Objet( public Connaissance(
String nom, String nom,
Condition visible, Condition visible,
Description description) { List<Description> descriptions) {
this.nom = nom; this.nom = nom;
this.visible = visible; this.visible = visible;
this.description = description; this.descriptions = descriptions;
}
@Override
public String toString() {
for (Description d : this.descriptions) {
if (d.condition.evaluer()) {
return this.nom + ": " + d;
}
}
return "No desc";
} }
} }

View file

@ -1,4 +1,4 @@
import java.util.ArrayList; import java.util.List;
public class Explorateur { public class Explorateur {
int taille; int taille;
@ -13,4 +13,17 @@ public class Explorateur {
this.connaissances = connaissances; this.connaissances = connaissances;
this.objets = objets; this.objets = objets;
} }
@Override
public String toString() {
String txt = new String();
for (Objet c : this.objets) {
txt.concat(c.toString());
}
for (Connaissance c : this.connaissances) {
txt.concat(c.toString());
}
return txt;
}
} }

View file

@ -1,3 +1,5 @@
import java.util.List;
public class Interaction { public class Interaction {
Condition visible; Condition visible;
List<Connaissance> connaissances; List<Connaissance> connaissances;
@ -17,4 +19,17 @@ public class Interaction {
this.objetsConso = objetsConso; this.objetsConso = objetsConso;
this.actions = actions; this.actions = actions;
} }
@Override
public String toString() {
String res = "";
int k = 0;
for (Action a : i.actions) {
if (a.visible.evaluer()) {
res += k + " " + a + "\n";
k++;
}
}
return super.toString();
}
} }

View file

@ -1,3 +1,6 @@
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -22,6 +25,99 @@ public class Jeu {
this.transformations = transformations; this.transformations = transformations;
} }
void jouer() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Lieu lieu = null;
for (Lieu l : territoire.lieux) {
if (l.depart.evaluer()) {
lieu = l;
break;
}
}
while (!lieu.fin.evaluer()) {
System.out.println(Jeu.explorateur);
boolean reverifier_interraction = true;
while (reverifier_interraction) {
reverifier_interraction = false;
for (Personne p : lieu.personnes) {
if (p.visible.evaluer() && p.obligatoire.evaluer()) {
for (Interaction i : p.interractions) {
if (i.visible.evaluer()) {
boolean arreter_interraction = false;
while (!arreter_interraction) {
List<Action> actions_choix = new ArrayList<>();
for (Action a : i.actions) {
if (a.visible.evaluer()) {
actions_choix.add(a);
}
}
int choix = 0;
try {
choix = Integer.parseInt(reader.readLine());
} catch (NumberFormatException e) {
continue;
} catch (IOException e) {
e.printStackTrace();
}
Action a = actions_choix.get(choix);
for (Connaissance c : a.connaissances) {
if (!Jeu.explorateur.connaissances.contains(c)) {
Jeu.explorateur.connaissances.add(c);
}
}
for (Objet o : a.objetsRecus) {
Jeu.explorateur.objets.add(o);
}
for (Objet o : a.objetsConso) {
Jeu.explorateur.objets.remove(o);
}
arreter_interraction = a.finInterraction.evaluer();
}
}
}
reverifier_interraction = true;
}
}
}
boolean chemin_pris = false;
for (Chemin c : territoire.chemins) {
if (c.lieuIn == lieu) {
if (c.visible.evaluer() && c.obligatoire.evaluer() && c.ouvert.evaluer()) {
lieu = c.lieuOut;
chemin_pris = true;
}
}
}
if (!chemin_pris) {
List<Chemin> chemins_choix = new ArrayList<>();
for (Chemin c : territoire.chemins) {
if (c.lieuIn == lieu) {
if (c.visible.evaluer() && c.ouvert.evaluer()) {
chemins_choix.add(c);
System.out.println(c);
}
}
}
int choix = 0;
try {
choix = Integer.parseInt(reader.readLine());
} catch (NumberFormatException e) {
continue;
} catch (IOException e) {
e.printStackTrace();
}
lieu = chemins_choix.get(choix).lieuOut;
}
}
System.out.println("FIN : " + lieu.nom);
}
public static void main(String[] args) { public static void main(String[] args) {
// raccourcis "true" "false" // raccourcis "true" "false"
@ -37,20 +133,28 @@ public class Jeu {
1, 1,
vraie, vraie,
new ArrayList<>()); new ArrayList<>());
jeu_objets.add(tentative_objet); jeu_objets.add(tentative_objet);
// "Connaissances" : [ // "Connaissances" : [
List<Connaissance> jeu_connaissances = new ArrayList<>(); List<Connaissance> jeu_connaissances = new ArrayList<>();
Connaissance reussite_connaissance = new Connaisssance( Connaissance reussite_connaissance = new Connaissance(
"Réussite", "Réussite",
vraie, vraie,
new ArrayList<>()); new ArrayList<>());
jeu_connaissances.add(reussite_connaissance); jeu_connaissances.add(reussite_connaissance);
// Conditions
Condition condition0 = new Condition(new ConditionEt(
new ConditionConnaissance(reussite_connaissance, true),
new ConditionObjet(tentative_objet, ">", 0)));
Condition condition1 = new Condition(new ConditionEt(
new ConditionObjet(tentative_objet, ">", 0)));
Condition condition2 = new Condition(new ConditionEt(
new ConditionConnaissance(reussite_connaissance, true)));
// "Transformations" : [ // "Transformations" : [
List<Transformation> transformations = new ArrayList<>(); List<Transformation> transformations = new ArrayList<>();
@ -58,12 +162,18 @@ public class Jeu {
// "Explorateur" : [ // "Explorateur" : [
int explorateur_tailleInventaire = 3; int explorateur_tailleInventaire = 3;
List<Objet> explorateur_inventaire = new ArrayList<>(); List<Objet> explorateur_inventaire = new ArrayList<>();
explorateur_inventaire.add(tentative_objet);
explorateur_inventaire.add(tentative_objet);
explorateur_inventaire.add(tentative_objet);
List<Connaissance> explorateur_connaissances = new ArrayList<>(); List<Connaissance> explorateur_connaissances = new ArrayList<>();
Jeu.explorateur = new Explorateur( Jeu.explorateur = new Explorateur(
explorateur_tailleInventaire, explorateur_tailleInventaire,
explorateur_inventaire, explorateur_connaissances,
explorateur_connaissances); explorateur_inventaire);
// "Personnes" : [ // "Personnes" : [
@ -71,47 +181,58 @@ public class Jeu {
List<Interaction> sphinx_interactions = new ArrayList<>(); List<Interaction> sphinx_interactions = new ArrayList<>();
List<Action> sphinx_interactions_actions = new ArrayList<>(); List<Action> sphinx_interaction_actions = new ArrayList<>();
List<Connaissance> connaissances_action_reussite = new ArrayList<>();
connaissances_action_reussite.add(reussite_connaissance);
Action action_reussite = new Action( Action action_reussite = new Action(
vraie, vraie,
new ArrayList<>().add("Réussite"), connaissances_action_reussite,
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
vraie); vraie,
new ArrayList<>());
sphinx_interaction_actions.add(action_reussite); sphinx_interaction_actions.add(action_reussite);
List<Objet> objets_action_echec = new ArrayList<>();
objets_action_echec.add(tentative_objet);
Action action_echec = new Action( Action action_echec = new Action(
vraie, vraie,
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>().add(tentative_objet), objets_action_echec,
vraie); vraie,
new ArrayList<>());
sphinx_interaction_actions.add(action_echec); sphinx_interaction_actions.add(action_echec);
Interaction sphinx_interaction = new Interaction( Interaction sphinx_interaction = new Interaction(
vraie, vraie,
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
sphinx_interactions_actions); new ArrayList<>(),
sphinx_interaction_actions);
sphinx_interactions.add(sphinx_interaction); sphinx_interactions.add(sphinx_interaction);
Personne sphinx = new Personne( Personne sphinx_personne = new Personne(
"Sphinx", "Sphinx",
vraie, condition0,
vraie, vraie,
sphinx_interactions); sphinx_interactions);
jeu_personnes.add(sphinx_personne);
jeu_personnes.add(sphinx); // "Territoire" : {
List<Lieu> lieux = new ArrayList<>(); List<Lieu> lieux = new ArrayList<>();
List<Personne> debut_personnes = new ArrayList<>(); List<Personne> debut_personnes = new ArrayList<>();
debut_personnes.add(sphinx_personne);
Lieu debut = new Lieu( Lieu enigme = new Lieu(
"Départ", "Énigme",
faux, faux,
vraie, vraie,
faux, faux,
@ -119,10 +240,9 @@ public class Jeu {
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>()); new ArrayList<>());
lieux.add(enigme);
lieux.add(debut); Lieu succes = new Lieu(
Lieux succes = new Lieu(
"Succès", "Succès",
faux, faux,
faux, faux,
@ -131,10 +251,9 @@ public class Jeu {
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>()); new ArrayList<>());
lieux.add(succes); lieux.add(succes);
Lieux echec = new Lieu( Lieu echec = new Lieu(
"Échec", "Échec",
faux, faux,
faux, faux,
@ -143,39 +262,34 @@ public class Jeu {
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>()); new ArrayList<>());
lieux.add(echec); lieux.add(echec);
List<Chemin> chemins = new ArrayList<>(); List<Chemin> chemins = new ArrayList<>();
Chemin enigme_succes = new Chemin( Chemin enigme_succes = new Chemin(
debut, enigme,
succes, succes,
faux,
vraie, vraie,
faux, condition1,
vraie,
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>()); new ArrayList<>());
chemins.add(enigme_succes); chemins.add(enigme_succes);
Chemin enigme_echec = new Chemin( Chemin enigme_echec = new Chemin(
debut, enigme,
echec, echec,
faux,
vraie, vraie,
faux, condition2,
vraie,
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>()); new ArrayList<>());
chemins.add(enigme_echec); chemins.add(enigme_echec);
// "Territoire" : {
Territoire territoire = new Territoire( Territoire territoire = new Territoire(
lieux, lieux,
chemins); chemins);
@ -184,9 +298,11 @@ public class Jeu {
territoire, territoire,
jeu_objets, jeu_objets,
jeu_connaissances, jeu_connaissances,
personnes, jeu_personnes,
transformations); transformations);
jeu.jouer();
} }
} }

View file

@ -1,8 +1,10 @@
import java.util.List;
public class Lieu { public class Lieu {
String nom; String nom;
Boolean deposable; Condition deposable;
Boolean depart; Condition depart;
Boolean fin; Condition fin;
List<Personne> personnes; List<Personne> personnes;
List<Description> descriptions; List<Description> descriptions;
List<Objet> objets; List<Objet> objets;
@ -10,9 +12,9 @@ public class Lieu {
public Lieu( public Lieu(
String nom, String nom,
Boolean deposable, Condition deposable,
Boolean depart, Condition depart,
Boolean fin, Condition fin,
List<Personne> personnes, List<Personne> personnes,
List<Description> descriptions, List<Description> descriptions,
List<Objet> objets, List<Objet> objets,

View file

@ -1,17 +1,29 @@
import java.util.List;
public class Objet { public class Objet {
String nom; String nom;
int taille; int taille;
Condition visible; Condition visible;
Description description; List<Description> descriptions;
public Objet( public Objet(
String nom, String nom,
int taille, int taille,
Condition visible, Condition visible,
Description description) { List<Description> descriptions) {
this.nom = nom; this.nom = nom;
this.taille = taille; this.taille = taille;
this.visible = visible; this.visible = visible;
this.description = description; this.descriptions = descriptions;
}
@Override
public String toString() {
for (Description d : this.descriptions) {
if (d.condition.evaluer()) {
return this.nom + ": " + d;
}
}
return "No desc";
} }
} }

View file

@ -1,14 +1,16 @@
import java.util.List;
public class Personne { public class Personne {
String nom; String nom;
Condition visible; Condition visible;
Condition obligatoire; Condition obligatoire;
List<Interraction> interractions; List<Interaction> interractions;
public Personne( public Personne(
String nom, String nom,
Condition visible, Condition visible,
Condition obligatoire, Condition obligatoire,
List<Interraction> interractions) { List<Interaction> interractions) {
this.nom = nom; this.nom = nom;
this.visible = visible; this.visible = visible;
this.obligatoire = obligatoire; this.obligatoire = obligatoire;

View file

@ -1,3 +1,5 @@
import java.util.List;
public class Territoire { public class Territoire {
List<Lieu> lieux; List<Lieu> lieux;
List<Chemin> chemins; List<Chemin> chemins;

View file

@ -1,3 +1,5 @@
import java.util.List;
public class Transformation { public class Transformation {
Condition possible; Condition possible;
List<Objet> objetsSources; List<Objet> objetsSources;

View file

@ -96,12 +96,14 @@ Interaction:
'"visible"' ':' visible=Condition ',' '"visible"' ':' visible=Condition ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ','
'"objets_conso"' ':' '[' (objetsConso+=Nom (objetsRecus+=Nom)*)? ']' ','
'"actions"' ':' '[' (actions+=Action)+ ']' ',' '"actions"' ':' '[' (actions+=Action)+ ']' ','
'}' '}'
; ;
Action: Action:
'{' '{'
'"Description"' ':' '[' descriptions+=Description (descriptions+=Description)* ']' ','
'"visible"' ':' visible=Condition ',' '"visible"' ':' visible=Condition ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ','

View file

@ -96,12 +96,14 @@ Interaction:
'"visible"' ':' visible=Condition ',' '"visible"' ':' visible=Condition ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ','
'"objets_conso"' ':' '[' (objetsConso+=Nom (objetsRecus+=Nom)*)? ']' ','
'"actions"' ':' '[' (actions+=Action)+ ']' ',' '"actions"' ':' '[' (actions+=Action)+ ']' ','
'}' '}'
; ;
Action: Action:
'{' '{'
'"Description"' ':' '[' descriptions+=Description (descriptions+=Description)* ']' ','
'"visible"' ':' visible=Condition ',' '"visible"' ':' visible=Condition ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ','