diff --git a/.idea/misc.xml b/.idea/misc.xml index be02ef9..48a8006 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,8 +4,7 @@ - + - - + \ No newline at end of file diff --git a/src/Cases/CaseAbstraite.java b/src/Cases/CaseAbstraite.java index 65df6a4..2c9419b 100644 --- a/src/Cases/CaseAbstraite.java +++ b/src/Cases/CaseAbstraite.java @@ -87,4 +87,12 @@ public abstract class CaseAbstraite { } public abstract String affichageSpecial(); + + public Coordonnees getCoord() { + return coord; + } + + public void setCoord(Coordonnees coord) { + this.coord = coord; + } } \ No newline at end of file diff --git a/src/Cases/Coordonnees.java b/src/Cases/Coordonnees.java index 83f9482..9ca9f1b 100644 --- a/src/Cases/Coordonnees.java +++ b/src/Cases/Coordonnees.java @@ -24,4 +24,9 @@ public class Coordonnees { public void setCol(int col) { this.col = col; } + + @Override + public String toString() { + return "col " + getCol() + " ligne " + getLigne(); + } } diff --git a/src/Comportements/ComportementAction.java b/src/Comportements/ComportementAction.java index 35b3715..35bc6de 100644 --- a/src/Comportements/ComportementAction.java +++ b/src/Comportements/ComportementAction.java @@ -1,7 +1,12 @@ package Comportements; +import Cases.CaseAbstraite; +import Objets.ObjetAbstrait; import Person.Personnage; +import utils.Tuple; + +import java.util.ArrayList; public interface ComportementAction { - public void executerAction(Personnage joueur); + public void executerAction(Personnage joueur, Tuple, ArrayList, ArrayList> t); } diff --git a/src/Comportements/ComportementActionChangerCouleurCase.java b/src/Comportements/ComportementActionChangerCouleurCase.java index 8856b88..a1822cc 100644 --- a/src/Comportements/ComportementActionChangerCouleurCase.java +++ b/src/Comportements/ComportementActionChangerCouleurCase.java @@ -1,15 +1,31 @@ package Comportements; +import Cases.CaseAbstraite; import Cases.CaseColore; +import Objets.ObjetAbstrait; import Person.Personnage; import Person.PersonnageBattleZone; +import utils.Tuple; + +import java.util.ArrayList; +import java.util.Random; public class ComportementActionChangerCouleurCase implements ComportementAction { @Override - public void executerAction(Personnage p) { + public void executerAction(Personnage p, Tuple, ArrayList, ArrayList> t) { + ArrayList cases = t.c; + int size = cases.size(); + int item = new Random().nextInt(size); CaseColore caseColore = (CaseColore) p.getCaseCourante(); PersonnageBattleZone personnage = (PersonnageBattleZone) p; - caseColore.setCouleur(personnage.getCouleur()); + caseColore.setOccupant(null); + + CaseColore dest = (CaseColore) cases.get(item); + dest.setOccupant(p); + p.setCaseCourante(dest); + + dest.setCouleur(personnage.getCouleur()); + } } diff --git a/src/Comportements/ComportementActionRamasserNeige.java b/src/Comportements/ComportementActionRamasserNeige.java index 580b35e..bbeb17a 100644 --- a/src/Comportements/ComportementActionRamasserNeige.java +++ b/src/Comportements/ComportementActionRamasserNeige.java @@ -1,11 +1,16 @@ package Comportements; +import Cases.CaseAbstraite; +import Objets.ObjetAbstrait; import Person.Personnage; +import utils.Tuple; + +import java.util.ArrayList; public class ComportementActionRamasserNeige implements ComportementAction { @Override - public void executerAction(Personnage joueur) { + public void executerAction(Personnage joueur, Tuple, ArrayList, ArrayList> t) { } } diff --git a/src/Comportements/ComportementActionSeDeplacer.java b/src/Comportements/ComportementActionSeDeplacer.java index 2d802e6..4d2990a 100644 --- a/src/Comportements/ComportementActionSeDeplacer.java +++ b/src/Comportements/ComportementActionSeDeplacer.java @@ -1,27 +1,30 @@ package Comportements; import Cases.CaseAbstraite; -import Cases.PointsCardinaux; -import Cases.RandomPointCardinal; +import Objets.ObjetAbstrait; import Person.Personnage; +import utils.Tuple; -import java.util.HashMap; +import java.util.ArrayList; +import java.util.Random; public class ComportementActionSeDeplacer implements ComportementAction { @Override - public void executerAction(Personnage perso) { + public void executerAction(Personnage perso, Tuple, ArrayList, ArrayList> t) { + ArrayList cases = t.c; + int size = cases.size(); + int item = new Random().nextInt(size); + System.out.println("Je suis en " + perso.getCaseCourante().getCoord().toString()); + CaseAbstraite c = perso.getCaseCourante(); - HashMap voisins = c.getVoisins(); - RandomPointCardinal p = new RandomPointCardinal(PointsCardinaux.class); - PointsCardinaux point = null; - do { - point = p.random(); - } while (voisins.get(point) == null); - CaseAbstraite destination = voisins.get(point); + + CaseAbstraite destination = cases.get(item); destination.setOccupant(perso); perso.setCaseCourante(destination); c.setOccupant(null); + System.out.println("Je suis en " + perso.getCaseCourante().getCoord().toString()); + } } diff --git a/src/Comportements/ComportementActionTirerBalon.java b/src/Comportements/ComportementActionTirerBalon.java index 7eddc6c..bb00735 100644 --- a/src/Comportements/ComportementActionTirerBalon.java +++ b/src/Comportements/ComportementActionTirerBalon.java @@ -1,11 +1,16 @@ package Comportements; +import Cases.CaseAbstraite; +import Objets.ObjetAbstrait; import Person.Personnage; +import utils.Tuple; + +import java.util.ArrayList; public class ComportementActionTirerBalon implements ComportementAction { @Override - public void executerAction(Personnage joueur) { + public void executerAction(Personnage joueur, Tuple, ArrayList, ArrayList> t) { } } diff --git a/src/Comportements/ComportementActionTirerBouleDeNeige.java b/src/Comportements/ComportementActionTirerBouleDeNeige.java index 6335b5a..85a3453 100644 --- a/src/Comportements/ComportementActionTirerBouleDeNeige.java +++ b/src/Comportements/ComportementActionTirerBouleDeNeige.java @@ -1,11 +1,16 @@ package Comportements; +import Cases.CaseAbstraite; +import Objets.ObjetAbstrait; import Person.Personnage; +import utils.Tuple; + +import java.util.ArrayList; public class ComportementActionTirerBouleDeNeige implements ComportementAction { @Override - public void executerAction(Personnage joueur) { + public void executerAction(Personnage joueur, Tuple, ArrayList, ArrayList> t) { } } diff --git a/src/Comportements/EAction.java b/src/Comportements/EAction.java index 8fe4260..cc244bc 100644 --- a/src/Comportements/EAction.java +++ b/src/Comportements/EAction.java @@ -1,5 +1,5 @@ package Comportements; public enum EAction { -ChangerCouleurCase,RamasserNeige,SeDeplacer,TirerBalon,TirerBouleDeNeige,Null + ChangerCouleurCase, RamasserNeige, SeDeplacer, TirerBalon, TirerBouleDeNeige } diff --git a/src/Etats/EtatPersonnageOK.java b/src/Etats/EtatPersonnageOK.java index 7222220..1e9f007 100644 --- a/src/Etats/EtatPersonnageOK.java +++ b/src/Etats/EtatPersonnageOK.java @@ -4,11 +4,8 @@ import Person.Personnage; public class EtatPersonnageOK extends EtatPersonnageAbstrait { - private int nbTourKO; - public EtatPersonnageOK(Personnage perso) { super(perso); - this.nbTourKO = 3; } @Override diff --git a/src/Objets/ObjetAbstrait.java b/src/Objets/ObjetAbstrait.java index 2429102..03e33ab 100644 --- a/src/Objets/ObjetAbstrait.java +++ b/src/Objets/ObjetAbstrait.java @@ -1,11 +1,9 @@ package Objets; import Cases.CaseAbstraite; -import Person.Personnage; public abstract class ObjetAbstrait { protected CaseAbstraite caseCourante; - protected Personnage perso; protected String nom; protected double pointsDeVie; protected double force; @@ -16,8 +14,6 @@ public abstract class ObjetAbstrait { this.pointsDeVie = 100; this.force = 10; this.vitesse = 1; - - this.perso = null; this.caseCourante = null; } @@ -26,9 +22,7 @@ public abstract class ObjetAbstrait { this.pointsDeVie=lifePoint; this.force=strength; this.vitesse=speed; - this.caseCourante=null; - this.perso = null; } public CaseAbstraite getCaseCourante() { @@ -70,12 +64,4 @@ public abstract class ObjetAbstrait { public void setVitesse(double vitesse) { this.vitesse = vitesse; } - - public Personnage getPerso() { - return perso; - } - - public void setPerso(Personnage perso) { - this.perso = perso; - } } diff --git a/src/Objets/ObjetAvecBonusForce.java b/src/Objets/ObjetAvecBonusForce.java index 4639961..12e2692 100644 --- a/src/Objets/ObjetAvecBonusForce.java +++ b/src/Objets/ObjetAvecBonusForce.java @@ -8,6 +8,12 @@ public class ObjetAvecBonusForce extends ObjetAbstrait { super(name, lifePoint, strength, speed); // TODO Auto-generated constructor stub } - public double getPointsDeVie() {return perso.getPointsDeVie() + 20;} - public double getForce() {return perso.getForce() + 0.5;} + + public double getPointsDeVie() { + return 20; + } + + public double getForce() { + return 0.5; + } } diff --git a/src/Objets/ObjetAvecBonusPV.java b/src/Objets/ObjetAvecBonusPV.java index cbf3c60..9b60712 100644 --- a/src/Objets/ObjetAvecBonusPV.java +++ b/src/Objets/ObjetAvecBonusPV.java @@ -8,5 +8,7 @@ public class ObjetAvecBonusPV extends ObjetAbstrait { // TODO Auto-generated constructor stub } - public double getPointsDeVie() {return perso.getPointsDeVie() + 80;} + public double getPointsDeVie() { + return 80; + } } diff --git a/src/Objets/ObjetAvecBonusVitesse.java b/src/Objets/ObjetAvecBonusVitesse.java index 5ec535f..1298158 100644 --- a/src/Objets/ObjetAvecBonusVitesse.java +++ b/src/Objets/ObjetAvecBonusVitesse.java @@ -7,6 +7,8 @@ public class ObjetAvecBonusVitesse extends ObjetAbstrait { super(name, lifePoint, strength, speed); // TODO Auto-generated constructor stub } - - public double getPointsDeVie() {return perso.getVitesse() + 2;} + + public double getPointsDeVie() { + return 2; + } } diff --git a/src/Person/Personnage.java b/src/Person/Personnage.java index b797cf5..fa15aff 100644 --- a/src/Person/Personnage.java +++ b/src/Person/Personnage.java @@ -9,6 +9,7 @@ import Etats.EtatPersonnageAbstrait; import Etats.EtatPersonnageKO; import Etats.EtatPersonnageOK; import Objets.ObjetAbstrait; +import utils.Tuple; import java.util.ArrayList; import java.util.HashMap; @@ -18,6 +19,7 @@ public class Personnage extends PersonnagesAbstraits { protected CaseAbstraite caseCourante; + protected ObjetAbstrait objet; protected String nom; protected String groupe; protected double pointsDeVie; @@ -72,96 +74,21 @@ public class Personnage extends PersonnagesAbstraits { } } - - - public EtatPersonnageAbstrait getEtatCourant() { - return etatCourant; - } - public void setEtatCourant(EtatPersonnageAbstrait etatCourant) { - this.etatCourant = etatCourant; - } + public Tuple, ArrayList, ArrayList> AnalyseSituation() { + HashSet voisinsDesVoisins = getCaseAbstraitesForPortee(); + ArrayList casesVoisines = new ArrayList(voisinsDesVoisins); + ArrayList objets = rechercheObjetProche(voisinsDesVoisins); + ArrayList personnages = rechercheJoueur(voisinsDesVoisins); - public double getPointsDeVie() { - return pointsDeVie; - } - - public void setPointsDeVie(double pointsDeVie) { - this.pointsDeVie = pointsDeVie; - } - - public double getForce() { - return force; - } - - public void setForce(double force) { - this.force = force; - } - - public double getVitesse() { - return vitesse; - } - - public void setVitesse(double vitesse) { - this.vitesse = vitesse; - } - - public String getGroupe() { - return groupe; - } - - - public void setGroupe(String equipe) { - groupe = equipe; - } - - public String getNom() { - return nom; - } - - public void setNom(String nom) { - this.nom = nom; - } - - public CaseAbstraite getCaseCourante() { - return caseCourante; + casesVoisines.remove(this.caseCourante); + return new Tuple, ArrayList, ArrayList>(objets, personnages, casesVoisines); } - public void setCaseCourante(CaseAbstraite caseCourante) { - this.caseCourante = caseCourante; - this.voisins = this.caseCourante.getVoisins(); - + public void Execution(Tuple, ArrayList, ArrayList> t) { + Action.executerAction(this, t); } - public double getPortee() { - return portee; - } - - public void setPortee(double portee) { - this.portee = portee; - } - - public EAction getAction() { - return action; - } - - public void setAction(EAction action) { - this.action = action; - } - - public void AnalyseSituation() { - ArrayList objets = rechercheObjetProche(); - ArrayList personnages = rechercheJoueur(); - } - - public void Execution() { - Action.executerAction(this); - } - - public void ResoudreLesConflits(){ - - - } public HashMap voisinsPortee(CaseAbstraite c, int rayon) { HashMap voisinsActuels = new HashMap(); @@ -178,12 +105,9 @@ public class Personnage extends PersonnagesAbstraits { } } - public ArrayList rechercheObjetProche() { - + public ArrayList rechercheObjetProche(HashSet voisinsDesVoisins) { ArrayList objetsVoisins = new ArrayList(); - HashSet voisinsDesVoisins = getCaseAbstraitesForPortee(); - for (CaseAbstraite c : voisinsDesVoisins) { if (c.getObjetOccupant() != null) { objetsVoisins.add(c.getObjetOccupant()); @@ -199,11 +123,8 @@ public class Personnage extends PersonnagesAbstraits { } - public ArrayList rechercheJoueur() { + public ArrayList rechercheJoueur(HashSet voisinsDesVoisins) { ArrayList personnes = new ArrayList(); - - HashSet voisinsDesVoisins = getCaseAbstraitesForPortee(); - for (CaseAbstraite c : voisinsDesVoisins) { if (c.getOccupant() != null) { personnes.add(c.getOccupant()); @@ -243,4 +164,79 @@ public class Personnage extends PersonnagesAbstraits { this.setAction(nouvelAction); } + + public ObjetAbstrait getObjet() { + return objet; + } + + public void setObjet(ObjetAbstrait objet) { + this.objet = objet; + } + + public double getPointsDeVie() { + double bonus = 0; + if (getObjet() != null) { + bonus = getObjet().getPointsDeVie(); + } + return bonus + pointsDeVie; + } + + public double getForce() { + double bonus = 0; + if (getObjet() != null) { + bonus = getObjet().getForce(); + } + return bonus + force; + } + + public double getVitesse() { + double bonus = 0; + if (getObjet() != null) { + bonus = getObjet().getVitesse(); + } + return bonus + vitesse; + } + + public String getGroupe() { + return groupe; + } + + + public void setGroupe(String equipe) { + groupe = equipe; + } + + public String getNom() { + return nom; + } + + public CaseAbstraite getCaseCourante() { + return caseCourante; + } + + public void setCaseCourante(CaseAbstraite caseCourante) { + this.caseCourante = caseCourante; + this.voisins = this.caseCourante.getVoisins(); + + } + + public double getPortee() { + return portee; + } + + public EAction getAction() { + return action; + } + + public void setAction(EAction action) { + this.action = action; + } + + public HashMap getVoisins() { + return voisins; + } + + public void setVoisins(HashMap voisins) { + this.voisins = voisins; + } } diff --git a/src/Person/PersonnageBattleZoneAvecUnHoverboard.java b/src/Person/PersonnageBattleZoneAvecUnHoverboard.java deleted file mode 100644 index 52f64a8..0000000 --- a/src/Person/PersonnageBattleZoneAvecUnHoverboard.java +++ /dev/null @@ -1,15 +0,0 @@ -package Person; - -import Objets.ObjetAvecBonusVitesse; - -public class PersonnageBattleZoneAvecUnHoverboard extends ObjetAvecBonusVitesse { - - protected PersonnageBattleZoneAvecUnHoverboard(String name, - double lifePoint, double strength, double speed, PersonnageBattleZone PBZ) { - super(name, lifePoint, strength, speed); - // TODO Auto-generated constructor stub - - this.perso=PBZ; - } - -} diff --git a/src/Person/PersonnageBattleZoneAvecUnMarteau.java b/src/Person/PersonnageBattleZoneAvecUnMarteau.java deleted file mode 100644 index 4b050ef..0000000 --- a/src/Person/PersonnageBattleZoneAvecUnMarteau.java +++ /dev/null @@ -1,15 +0,0 @@ -package Person; - -import Objets.ObjetAvecBonusForce; - -public class PersonnageBattleZoneAvecUnMarteau extends ObjetAvecBonusForce { - - protected PersonnageBattleZoneAvecUnMarteau(String name, double lifePoint, - double strength, double speed, PersonnageBattleZone PBZ) { - super(name, lifePoint, strength, speed); - // TODO Auto-generated constructor stub - - this.perso=PBZ; - } - -} diff --git a/src/Person/PersonnageBattleZoneAvecUneArmure.java b/src/Person/PersonnageBattleZoneAvecUneArmure.java deleted file mode 100644 index ddb17ad..0000000 --- a/src/Person/PersonnageBattleZoneAvecUneArmure.java +++ /dev/null @@ -1,15 +0,0 @@ -package Person; - -import Objets.ObjetAvecBonusPV; - -public class PersonnageBattleZoneAvecUneArmure extends ObjetAvecBonusPV { - - protected PersonnageBattleZoneAvecUneArmure(String name, double lifePoint, - double strength, double speed, PersonnageBattleZone PBZ) { - super(name, lifePoint, strength, speed); - // TODO Auto-generated constructor stub - - this.perso=PBZ; - } - -} diff --git a/src/SimulationJeu.java b/src/SimulationJeu.java index 97c27f0..709648f 100644 --- a/src/SimulationJeu.java +++ b/src/SimulationJeu.java @@ -1,8 +1,10 @@ import Cases.CaseAbstraite; import Fabriques.Scenario.FabriqueScenarioAbstraite; +import Objets.ObjetAbstrait; import Observateur.Organisation; import Person.Personnage; import utils.InterfaceConsole; +import utils.Tuple; import java.util.ArrayList; import java.util.Random; @@ -33,29 +35,24 @@ public class SimulationJeu { intefaceC.afficherPlateau(); } - public void mediationDesConflits() { - for (Personnage p : personnages) { - p.mediationConflits(); - } - } - public void recupererInformations() { - // TODO récup infos + statistics + maj infos observateur ? + for (Personnage p : personnages) { + + } } public void lancerJeu() { placement(); boolean continuer = true; + afficheTous(); while (continuer) { - afficheTous(); for (Personnage p : personnages) { - p.AnalyseSituation(); - p.Execution(); - mediationDesConflits(); // utiliser le pattern avec l'historique pour les actions. On pourra faire un retour arrière si conflit + réexecturer + Tuple, ArrayList, ArrayList> t = p.AnalyseSituation(); + p.Execution(t); recupererInformations(); } - + afficheTous(); // bloquer le tour jusqu'a toucher une touche du clavier. Scanner s = new Scanner(System.in); s.nextLine(); diff --git a/src/utils/InterfaceConsole.java b/src/utils/InterfaceConsole.java index 315e7c2..8862f1d 100644 --- a/src/utils/InterfaceConsole.java +++ b/src/utils/InterfaceConsole.java @@ -10,12 +10,12 @@ public class InterfaceConsole { } public void afficherPlateau() { - for (int i = 0; i < plateau.length; i++) { - for (int j = 0; j < plateau[i].length; j++) { - if (plateau[i][j].getOccupant() != null) { - System.out.print(plateau[i][j].getOccupant().getNom().charAt(0) + " | "); + for (CaseAbstraite[] aPlateau : plateau) { + for (CaseAbstraite anAPlateau : aPlateau) { + if (anAPlateau.getOccupant() != null) { + System.out.print(anAPlateau.getOccupant().getNom().charAt(0) + " | "); } else { - System.out.print(" " + plateau[i][j].affichageSpecial() + " | "); + System.out.print(" " + anAPlateau.affichageSpecial() + " | "); } } System.out.println(); diff --git a/src/utils/Tuple.java b/src/utils/Tuple.java new file mode 100644 index 0000000..ff7b5cb --- /dev/null +++ b/src/utils/Tuple.java @@ -0,0 +1,13 @@ +package utils; + +public class Tuple { + public final P p; + public final O o; + public final C c; + + public Tuple(P p, O o, C c) { + this.p = p; + this.o = o; + this.c = c; + } +} \ No newline at end of file