Analyse de la situation et déplacement.

This commit is contained in:
amine 2015-02-01 11:50:15 +01:00
parent 6e4e647866
commit 8e08b9c8df
22 changed files with 202 additions and 197 deletions

View File

@ -4,8 +4,7 @@
<entry_points version="2.0" /> <entry_points version="2.0" />
</component> </component>
<component name="IdProvider" IDEtalkID="5EBAA9F33699B0593DE250C306D65C2A" /> <component name="IdProvider" IDEtalkID="5EBAA9F33699B0593DE250C306D65C2A" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

View File

@ -87,4 +87,12 @@ public abstract class CaseAbstraite {
} }
public abstract String affichageSpecial(); public abstract String affichageSpecial();
public Coordonnees getCoord() {
return coord;
}
public void setCoord(Coordonnees coord) {
this.coord = coord;
}
} }

View File

@ -24,4 +24,9 @@ public class Coordonnees {
public void setCol(int col) { public void setCol(int col) {
this.col = col; this.col = col;
} }
@Override
public String toString() {
return "col " + getCol() + " ligne " + getLigne();
}
} }

View File

@ -1,7 +1,12 @@
package Comportements; package Comportements;
import Cases.CaseAbstraite;
import Objets.ObjetAbstrait;
import Person.Personnage; import Person.Personnage;
import utils.Tuple;
import java.util.ArrayList;
public interface ComportementAction { public interface ComportementAction {
public void executerAction(Personnage joueur); public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t);
} }

View File

@ -1,15 +1,31 @@
package Comportements; package Comportements;
import Cases.CaseAbstraite;
import Cases.CaseColore; import Cases.CaseColore;
import Objets.ObjetAbstrait;
import Person.Personnage; import Person.Personnage;
import Person.PersonnageBattleZone; import Person.PersonnageBattleZone;
import utils.Tuple;
import java.util.ArrayList;
import java.util.Random;
public class ComportementActionChangerCouleurCase implements ComportementAction { public class ComportementActionChangerCouleurCase implements ComportementAction {
@Override @Override
public void executerAction(Personnage p) { public void executerAction(Personnage p, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) {
ArrayList<CaseAbstraite> cases = t.c;
int size = cases.size();
int item = new Random().nextInt(size);
CaseColore caseColore = (CaseColore) p.getCaseCourante(); CaseColore caseColore = (CaseColore) p.getCaseCourante();
PersonnageBattleZone personnage = (PersonnageBattleZone) p; 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());
} }
} }

View File

@ -1,11 +1,16 @@
package Comportements; package Comportements;
import Cases.CaseAbstraite;
import Objets.ObjetAbstrait;
import Person.Personnage; import Person.Personnage;
import utils.Tuple;
import java.util.ArrayList;
public class ComportementActionRamasserNeige implements ComportementAction { public class ComportementActionRamasserNeige implements ComportementAction {
@Override @Override
public void executerAction(Personnage joueur) { public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) {
} }
} }

View File

@ -1,27 +1,30 @@
package Comportements; package Comportements;
import Cases.CaseAbstraite; import Cases.CaseAbstraite;
import Cases.PointsCardinaux; import Objets.ObjetAbstrait;
import Cases.RandomPointCardinal;
import Person.Personnage; import Person.Personnage;
import utils.Tuple;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Random;
public class ComportementActionSeDeplacer implements ComportementAction { public class ComportementActionSeDeplacer implements ComportementAction {
@Override @Override
public void executerAction(Personnage perso) { public void executerAction(Personnage perso, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) {
ArrayList<CaseAbstraite> 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(); CaseAbstraite c = perso.getCaseCourante();
HashMap<PointsCardinaux, CaseAbstraite> voisins = c.getVoisins();
RandomPointCardinal<PointsCardinaux> p = new RandomPointCardinal<PointsCardinaux>(PointsCardinaux.class); CaseAbstraite destination = cases.get(item);
PointsCardinaux point = null;
do {
point = p.random();
} while (voisins.get(point) == null);
CaseAbstraite destination = voisins.get(point);
destination.setOccupant(perso); destination.setOccupant(perso);
perso.setCaseCourante(destination); perso.setCaseCourante(destination);
c.setOccupant(null); c.setOccupant(null);
System.out.println("Je suis en " + perso.getCaseCourante().getCoord().toString());
} }
} }

View File

@ -1,11 +1,16 @@
package Comportements; package Comportements;
import Cases.CaseAbstraite;
import Objets.ObjetAbstrait;
import Person.Personnage; import Person.Personnage;
import utils.Tuple;
import java.util.ArrayList;
public class ComportementActionTirerBalon implements ComportementAction { public class ComportementActionTirerBalon implements ComportementAction {
@Override @Override
public void executerAction(Personnage joueur) { public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) {
} }
} }

View File

@ -1,11 +1,16 @@
package Comportements; package Comportements;
import Cases.CaseAbstraite;
import Objets.ObjetAbstrait;
import Person.Personnage; import Person.Personnage;
import utils.Tuple;
import java.util.ArrayList;
public class ComportementActionTirerBouleDeNeige implements ComportementAction { public class ComportementActionTirerBouleDeNeige implements ComportementAction {
@Override @Override
public void executerAction(Personnage joueur) { public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) {
} }
} }

View File

@ -1,5 +1,5 @@
package Comportements; package Comportements;
public enum EAction { public enum EAction {
ChangerCouleurCase,RamasserNeige,SeDeplacer,TirerBalon,TirerBouleDeNeige,Null ChangerCouleurCase, RamasserNeige, SeDeplacer, TirerBalon, TirerBouleDeNeige
} }

View File

@ -4,11 +4,8 @@ import Person.Personnage;
public class EtatPersonnageOK extends EtatPersonnageAbstrait { public class EtatPersonnageOK extends EtatPersonnageAbstrait {
private int nbTourKO;
public EtatPersonnageOK(Personnage perso) { public EtatPersonnageOK(Personnage perso) {
super(perso); super(perso);
this.nbTourKO = 3;
} }
@Override @Override

View File

@ -1,11 +1,9 @@
package Objets; package Objets;
import Cases.CaseAbstraite; import Cases.CaseAbstraite;
import Person.Personnage;
public abstract class ObjetAbstrait { public abstract class ObjetAbstrait {
protected CaseAbstraite caseCourante; protected CaseAbstraite caseCourante;
protected Personnage perso;
protected String nom; protected String nom;
protected double pointsDeVie; protected double pointsDeVie;
protected double force; protected double force;
@ -16,8 +14,6 @@ public abstract class ObjetAbstrait {
this.pointsDeVie = 100; this.pointsDeVie = 100;
this.force = 10; this.force = 10;
this.vitesse = 1; this.vitesse = 1;
this.perso = null;
this.caseCourante = null; this.caseCourante = null;
} }
@ -26,9 +22,7 @@ public abstract class ObjetAbstrait {
this.pointsDeVie=lifePoint; this.pointsDeVie=lifePoint;
this.force=strength; this.force=strength;
this.vitesse=speed; this.vitesse=speed;
this.caseCourante=null; this.caseCourante=null;
this.perso = null;
} }
public CaseAbstraite getCaseCourante() { public CaseAbstraite getCaseCourante() {
@ -70,12 +64,4 @@ public abstract class ObjetAbstrait {
public void setVitesse(double vitesse) { public void setVitesse(double vitesse) {
this.vitesse = vitesse; this.vitesse = vitesse;
} }
public Personnage getPerso() {
return perso;
}
public void setPerso(Personnage perso) {
this.perso = perso;
}
} }

View File

@ -8,6 +8,12 @@ public class ObjetAvecBonusForce extends ObjetAbstrait {
super(name, lifePoint, strength, speed); super(name, lifePoint, strength, speed);
// TODO Auto-generated constructor stub // 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;
}
} }

View File

@ -8,5 +8,7 @@ public class ObjetAvecBonusPV extends ObjetAbstrait {
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
public double getPointsDeVie() {return perso.getPointsDeVie() + 80;} public double getPointsDeVie() {
return 80;
}
} }

View File

@ -7,6 +7,8 @@ public class ObjetAvecBonusVitesse extends ObjetAbstrait {
super(name, lifePoint, strength, speed); super(name, lifePoint, strength, speed);
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
public double getPointsDeVie() {return perso.getVitesse() + 2;} public double getPointsDeVie() {
return 2;
}
} }

View File

@ -9,6 +9,7 @@ import Etats.EtatPersonnageAbstrait;
import Etats.EtatPersonnageKO; import Etats.EtatPersonnageKO;
import Etats.EtatPersonnageOK; import Etats.EtatPersonnageOK;
import Objets.ObjetAbstrait; import Objets.ObjetAbstrait;
import utils.Tuple;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -18,6 +19,7 @@ public class Personnage extends PersonnagesAbstraits {
protected CaseAbstraite caseCourante; protected CaseAbstraite caseCourante;
protected ObjetAbstrait objet;
protected String nom; protected String nom;
protected String groupe; protected String groupe;
protected double pointsDeVie; protected double pointsDeVie;
@ -72,96 +74,21 @@ public class Personnage extends PersonnagesAbstraits {
} }
} }
public EtatPersonnageAbstrait getEtatCourant() {
return etatCourant;
}
public void setEtatCourant(EtatPersonnageAbstrait etatCourant) { public Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> AnalyseSituation() {
this.etatCourant = etatCourant; HashSet<CaseAbstraite> voisinsDesVoisins = getCaseAbstraitesForPortee();
} ArrayList<CaseAbstraite> casesVoisines = new ArrayList<CaseAbstraite>(voisinsDesVoisins);
ArrayList<ObjetAbstrait> objets = rechercheObjetProche(voisinsDesVoisins);
ArrayList<Personnage> personnages = rechercheJoueur(voisinsDesVoisins);
public double getPointsDeVie() { casesVoisines.remove(this.caseCourante);
return pointsDeVie; return new Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>>(objets, personnages, casesVoisines);
}
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;
} }
public void setCaseCourante(CaseAbstraite caseCourante) { public void Execution(Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) {
this.caseCourante = caseCourante; Action.executerAction(this, t);
this.voisins = this.caseCourante.getVoisins();
} }
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<ObjetAbstrait> objets = rechercheObjetProche();
ArrayList<Personnage> personnages = rechercheJoueur();
}
public void Execution() {
Action.executerAction(this);
}
public void ResoudreLesConflits(){
}
public HashMap<PointsCardinaux, CaseAbstraite> voisinsPortee(CaseAbstraite c, int rayon) { public HashMap<PointsCardinaux, CaseAbstraite> voisinsPortee(CaseAbstraite c, int rayon) {
HashMap<PointsCardinaux, CaseAbstraite> voisinsActuels = new HashMap<PointsCardinaux, CaseAbstraite>(); HashMap<PointsCardinaux, CaseAbstraite> voisinsActuels = new HashMap<PointsCardinaux, CaseAbstraite>();
@ -178,12 +105,9 @@ public class Personnage extends PersonnagesAbstraits {
} }
} }
public ArrayList<ObjetAbstrait> rechercheObjetProche() { public ArrayList<ObjetAbstrait> rechercheObjetProche(HashSet<CaseAbstraite> voisinsDesVoisins) {
ArrayList<ObjetAbstrait> objetsVoisins = new ArrayList<ObjetAbstrait>(); ArrayList<ObjetAbstrait> objetsVoisins = new ArrayList<ObjetAbstrait>();
HashSet<CaseAbstraite> voisinsDesVoisins = getCaseAbstraitesForPortee();
for (CaseAbstraite c : voisinsDesVoisins) { for (CaseAbstraite c : voisinsDesVoisins) {
if (c.getObjetOccupant() != null) { if (c.getObjetOccupant() != null) {
objetsVoisins.add(c.getObjetOccupant()); objetsVoisins.add(c.getObjetOccupant());
@ -199,11 +123,8 @@ public class Personnage extends PersonnagesAbstraits {
} }
public ArrayList<Personnage> rechercheJoueur() { public ArrayList<Personnage> rechercheJoueur(HashSet<CaseAbstraite> voisinsDesVoisins) {
ArrayList<Personnage> personnes = new ArrayList<Personnage>(); ArrayList<Personnage> personnes = new ArrayList<Personnage>();
HashSet<CaseAbstraite> voisinsDesVoisins = getCaseAbstraitesForPortee();
for (CaseAbstraite c : voisinsDesVoisins) { for (CaseAbstraite c : voisinsDesVoisins) {
if (c.getOccupant() != null) { if (c.getOccupant() != null) {
personnes.add(c.getOccupant()); personnes.add(c.getOccupant());
@ -243,4 +164,79 @@ public class Personnage extends PersonnagesAbstraits {
this.setAction(nouvelAction); 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<PointsCardinaux, CaseAbstraite> getVoisins() {
return voisins;
}
public void setVoisins(HashMap<PointsCardinaux, CaseAbstraite> voisins) {
this.voisins = voisins;
}
} }

View File

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

View File

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

View File

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

View File

@ -1,8 +1,10 @@
import Cases.CaseAbstraite; import Cases.CaseAbstraite;
import Fabriques.Scenario.FabriqueScenarioAbstraite; import Fabriques.Scenario.FabriqueScenarioAbstraite;
import Objets.ObjetAbstrait;
import Observateur.Organisation; import Observateur.Organisation;
import Person.Personnage; import Person.Personnage;
import utils.InterfaceConsole; import utils.InterfaceConsole;
import utils.Tuple;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
@ -33,29 +35,24 @@ public class SimulationJeu {
intefaceC.afficherPlateau(); intefaceC.afficherPlateau();
} }
public void mediationDesConflits() {
for (Personnage p : personnages) {
p.mediationConflits();
}
}
public void recupererInformations() { public void recupererInformations() {
// TODO récup infos + statistics + maj infos observateur ? for (Personnage p : personnages) {
}
} }
public void lancerJeu() { public void lancerJeu() {
placement(); placement();
boolean continuer = true; boolean continuer = true;
afficheTous();
while (continuer) { while (continuer) {
afficheTous();
for (Personnage p : personnages) { for (Personnage p : personnages) {
p.AnalyseSituation(); Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t = p.AnalyseSituation();
p.Execution(); p.Execution(t);
mediationDesConflits(); // utiliser le pattern avec l'historique pour les actions. On pourra faire un retour arrière si conflit + réexecturer
recupererInformations(); recupererInformations();
} }
afficheTous();
// bloquer le tour jusqu'a toucher une touche du clavier. // bloquer le tour jusqu'a toucher une touche du clavier.
Scanner s = new Scanner(System.in); Scanner s = new Scanner(System.in);
s.nextLine(); s.nextLine();

View File

@ -10,12 +10,12 @@ public class InterfaceConsole {
} }
public void afficherPlateau() { public void afficherPlateau() {
for (int i = 0; i < plateau.length; i++) { for (CaseAbstraite[] aPlateau : plateau) {
for (int j = 0; j < plateau[i].length; j++) { for (CaseAbstraite anAPlateau : aPlateau) {
if (plateau[i][j].getOccupant() != null) { if (anAPlateau.getOccupant() != null) {
System.out.print(plateau[i][j].getOccupant().getNom().charAt(0) + " | "); System.out.print(anAPlateau.getOccupant().getNom().charAt(0) + " | ");
} else { } else {
System.out.print(" " + plateau[i][j].affichageSpecial() + " | "); System.out.print(" " + anAPlateau.affichageSpecial() + " | ");
} }
} }
System.out.println(); System.out.println();

13
src/utils/Tuple.java Normal file
View File

@ -0,0 +1,13 @@
package utils;
public class Tuple<P, O, C> {
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;
}
}