Récupération des objets et correction des voisins.

This commit is contained in:
amine 2015-02-01 13:18:11 +01:00
parent f6da70c020
commit b45d628ca6
8 changed files with 40 additions and 33 deletions

View File

@ -8,5 +8,5 @@ import utils.Tuple;
import java.util.ArrayList; import java.util.ArrayList;
public interface ComportementAction { public interface ComportementAction {
public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t); public void executerAction(Personnage joueur, Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t);
} }

View File

@ -13,7 +13,7 @@ import java.util.Random;
public class ComportementActionChangerCouleurCase implements ComportementAction { public class ComportementActionChangerCouleurCase implements ComportementAction {
@Override @Override
public void executerAction(Personnage p, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) { public void executerAction(Personnage p, Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t) {
ArrayList<CaseAbstraite> cases = t.c; ArrayList<CaseAbstraite> cases = t.c;
int size = cases.size(); int size = cases.size();
int item = new Random().nextInt(size); int item = new Random().nextInt(size);

View File

@ -10,7 +10,7 @@ import java.util.ArrayList;
public class ComportementActionRamasserNeige implements ComportementAction { public class ComportementActionRamasserNeige implements ComportementAction {
@Override @Override
public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) { public void executerAction(Personnage joueur, Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t) {
} }
} }

View File

@ -11,20 +11,28 @@ import java.util.Random;
public class ComportementActionSeDeplacer implements ComportementAction { public class ComportementActionSeDeplacer implements ComportementAction {
@Override @Override
public void executerAction(Personnage perso, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) { public void executerAction(Personnage perso, Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t) {
ArrayList<CaseAbstraite> cases = t.c; ArrayList<CaseAbstraite> cases = t.c;
int size = cases.size(); ArrayList<ObjetAbstrait> objs = t.o;
int item = new Random().nextInt(size);
System.out.println("Je suis en " + perso.getCaseCourante().getCoord().toString());
CaseAbstraite c = perso.getCaseCourante(); CaseAbstraite c = perso.getCaseCourante();
c.setOccupant(null);
CaseAbstraite destination = cases.get(item); CaseAbstraite destination;
if (objs.isEmpty()) {
int size = cases.size();
int item = new Random().nextInt(size);
destination = cases.get(item);
} else {
int size = objs.size();
int item = new Random().nextInt(size);
destination = objs.get(item).getCaseCourante();
objs.get(item).setCaseCourante(null);
destination.setObjetOccupant(null);
perso.setObjet(objs.get(item));
}
destination.setOccupant(perso); destination.setOccupant(perso);
perso.setCaseCourante(destination); perso.setCaseCourante(destination);
c.setOccupant(null);
System.out.println("Je suis en " + perso.getCaseCourante().getCoord().toString());
} }
} }

View File

@ -10,7 +10,7 @@ import java.util.ArrayList;
public class ComportementActionTirerBalon implements ComportementAction { public class ComportementActionTirerBalon implements ComportementAction {
@Override @Override
public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) { public void executerAction(Personnage joueur, Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t) {
} }
} }

View File

@ -10,7 +10,7 @@ import java.util.ArrayList;
public class ComportementActionTirerBouleDeNeige implements ComportementAction { public class ComportementActionTirerBouleDeNeige implements ComportementAction {
@Override @Override
public void executerAction(Personnage joueur, Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) { public void executerAction(Personnage joueur, Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t) {
} }
} }

View File

@ -28,10 +28,10 @@ public class Personnage extends PersonnagesAbstraits {
protected double portee; protected double portee;
protected EAction action; protected EAction action;
protected ComportementAction Action; protected ComportementAction Action;
HashSet<CaseAbstraite> voisinsActuels = new HashSet<CaseAbstraite>();
private EtatPersonnageAbstrait etatCourant; private EtatPersonnageAbstrait etatCourant;
private HashMap<PointsCardinaux, CaseAbstraite> voisins; private HashMap<PointsCardinaux, CaseAbstraite> voisins;
protected Personnage(String name, ComportementAction c) { protected Personnage(String name, ComportementAction c) {
this.nom = name; this.nom = name;
this.pointsDeVie = 100; this.pointsDeVie = 100;
@ -45,6 +45,7 @@ public class Personnage extends PersonnagesAbstraits {
} }
protected Personnage(String name, double lifePoint, double strength, double speed, int portee, ComportementAction a) { protected Personnage(String name, double lifePoint, double strength, double speed, int portee, ComportementAction a) {
this.nom = name; this.nom = name;
this.pointsDeVie=lifePoint; this.pointsDeVie=lifePoint;
@ -58,7 +59,6 @@ public class Personnage extends PersonnagesAbstraits {
} }
public void ChangeEtat(EEtat NouvelEtat) public void ChangeEtat(EEtat NouvelEtat)
{ {
switch(NouvelEtat) switch(NouvelEtat)
@ -71,38 +71,36 @@ public class Personnage extends PersonnagesAbstraits {
break; break;
default: default:
break; break;
} }
} }
public Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> AnalyseSituation() { public Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> AnalyseSituation() {
HashSet<CaseAbstraite> voisinsDesVoisins = getCaseAbstraitesForPortee(); HashSet<CaseAbstraite> voisinsDesVoisins = getCaseAbstraitesForPortee();
voisinsActuels = new HashSet<CaseAbstraite>();
voisinsDesVoisins.remove(this.getCaseCourante());
ArrayList<CaseAbstraite> casesVoisines = new ArrayList<CaseAbstraite>(voisinsDesVoisins); ArrayList<CaseAbstraite> casesVoisines = new ArrayList<CaseAbstraite>(voisinsDesVoisins);
ArrayList<ObjetAbstrait> objets = rechercheObjetProche(voisinsDesVoisins); ArrayList<ObjetAbstrait> objets = rechercheObjetProche(voisinsDesVoisins);
ArrayList<Personnage> personnages = rechercheJoueur(voisinsDesVoisins); ArrayList<Personnage> personnages = rechercheJoueur(voisinsDesVoisins);
casesVoisines.remove(this.caseCourante); return new Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>>(personnages, objets, casesVoisines);
return new Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>>(objets, personnages, casesVoisines);
} }
public void Execution(Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t) { public void Execution(Tuple<ArrayList<Personnage>, ArrayList<ObjetAbstrait>, ArrayList<CaseAbstraite>> t) {
Action.executerAction(this, t); Action.executerAction(this, t);
} }
public HashSet<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> v = c.getVoisins(); HashMap<PointsCardinaux, CaseAbstraite> v = c.getVoisins();
if ((rayon + 1) == this.getPortee()) { if ((rayon + 1) == this.getPortee()) {
// voisinsActuels.putAll(v); voisinsActuels.addAll(c.getVoisins().values());
return c.getVoisins();
} else { } else {
int r = rayon + 1; int r = rayon + 1;
for (PointsCardinaux mapKey : v.keySet()) { for (PointsCardinaux mapKey : v.keySet()) {
voisinsActuels.putAll(voisinsPortee(v.get(mapKey), r)); voisinsActuels.addAll(voisinsPortee(v.get(mapKey), r));
} }
return voisinsActuels;
} }
return voisinsActuels;
} }
public ArrayList<ObjetAbstrait> rechercheObjetProche(HashSet<CaseAbstraite> voisinsDesVoisins) { public ArrayList<ObjetAbstrait> rechercheObjetProche(HashSet<CaseAbstraite> voisinsDesVoisins) {
@ -117,9 +115,9 @@ public class Personnage extends PersonnagesAbstraits {
} }
protected HashSet<CaseAbstraite> getCaseAbstraitesForPortee() { protected HashSet<CaseAbstraite> getCaseAbstraitesForPortee() {
HashSet<CaseAbstraite> voisinsDesVoisins = new HashSet<CaseAbstraite>(); HashSet<CaseAbstraite> voisins = voisinsPortee(this.caseCourante, 0);
voisinsDesVoisins.addAll(voisinsPortee(this.caseCourante, 0).values()); voisins.remove(getCaseCourante());
return voisinsDesVoisins; return voisins;
} }

View File

@ -7,7 +7,6 @@ import Objets.ObjetAvecBonusVitesse;
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;
@ -35,6 +34,7 @@ public class SimulationJeu {
} }
public void afficheTous() { public void afficheTous() {
System.out.println("");
intefaceC.afficherPlateau(); intefaceC.afficherPlateau();
} }
@ -51,8 +51,7 @@ public class SimulationJeu {
afficheTous(); afficheTous();
while (continuer) { while (continuer) {
for (Personnage p : personnages) { for (Personnage p : personnages) {
Tuple<ArrayList<ObjetAbstrait>, ArrayList<Personnage>, ArrayList<CaseAbstraite>> t = p.AnalyseSituation(); p.Execution(p.AnalyseSituation());
p.Execution(t);
recupererInformations(); recupererInformations();
} }
placerDesObjets(); placerDesObjets();
@ -84,6 +83,8 @@ public class SimulationJeu {
for (Personnage p : personnages) { for (Personnage p : personnages) {
int x = rand.nextInt(plateau.length); int x = rand.nextInt(plateau.length);
int y = rand.nextInt(plateau[x].length); int y = rand.nextInt(plateau[x].length);
// int x = 0;
// int y = 0;
p.setCaseCourante(plateau[x][y]); p.setCaseCourante(plateau[x][y]);
plateau[x][y].ajouterOccupant(p); plateau[x][y].ajouterOccupant(p);
} }