Implementation des calculs. Done.

This commit is contained in:
Amaury 2020-12-02 16:51:42 +01:00
parent 80f0899bf1
commit acdc361e6c
13 changed files with 61 additions and 47 deletions

View File

@ -5,7 +5,7 @@
*/
import VueControleur.VueControleurGyromite;
import modele.plateau.Jeu;
import modele.calculs.Jeu;
public class Main {
public static void main(String[] args) {

View File

@ -13,9 +13,10 @@ import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;
import modele.deplacements.Controle4Directions;
import modele.deplacements.Direction;
import modele.plateau.*;
import modele.calculs.Controle4Directions;
import modele.calculs.Direction;
import modele.calculs.Jeu;
import modele.donnees.*;
/** Cette classe a deux fonctions :
@ -110,12 +111,12 @@ public class VueControleurGyromite extends JFrame implements Observer {
for (int x = 0; x < sizeX; x++) {
for (int y = 0; y < sizeY; y++) {
if (jeu.getGrille()[x][y] instanceof Heros) { // si la grille du modèle contient un Pacman, on associe l'icône Pacman du côté de la vue
if (jeu.getGrille()[x][y][0] instanceof Heros) { // si la grille du modèle contient un Pacman, on associe l'icône Pacman du côté de la vue
// System.out.println("Héros !");
tabJLabel[x][y].setIcon(icoHero);
} else if (jeu.getGrille()[x][y] instanceof Mur) {
} else if (jeu.getGrille()[x][y][0] instanceof Mur) {
tabJLabel[x][y].setIcon(icoMur);
} else if (jeu.getGrille()[x][y] instanceof Colonne) {
} else if (jeu.getGrille()[x][y][0] instanceof Colonne) {
tabJLabel[x][y].setIcon(icoColonne);
} else {
tabJLabel[x][y].setIcon(icoVide);

View File

@ -1,4 +1,4 @@
package modele.deplacements;
package modele.calculs;
/**
* A la reception d'une commande, toutes les cases (EntitesDynamiques) des colonnes se déplacent dans la direction définie

View File

@ -1,5 +1,6 @@
package modele.deplacements;
package modele.calculs;
import modele.donnees.ElementPhysique;
import modele.donnees.Entite;
import modele.donnees.EntiteDynamique;
@ -24,7 +25,7 @@ public class Controle4Directions extends RealisateurDeDeplacement {
public boolean realiserDeplacement() {
boolean ret = false;
for (EntiteDynamique e : lstEntitesDynamiques) {
for (Entite e : lstEntitesDynamiques) {
if (directionCourante != null)
switch (directionCourante) {
case gauche:
@ -36,7 +37,7 @@ public class Controle4Directions extends RealisateurDeDeplacement {
case haut:
// on ne peut pas sauter sans prendre appui
// (attention, test d'appui réalisé à partir de la position courante, si la gravité à été appliquée, il ne s'agit pas de la position affichée, amélioration possible)
Entite eBas = e.regarderDansLaDirection(Direction.bas);
ElementPhysique eBas = e.regarderDansLaDirection(Direction.bas);
if (eBas != null && eBas.peutServirDeSupport()) {
if (e.avancerDirectionChoisie(Direction.haut))
ret = true;

View File

@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package modele.deplacements;
package modele.calculs;
/** Type énuméré des directions : les directions correspondent à un ensemble borné de valeurs, connu à l'avance
*

View File

@ -1,15 +1,17 @@
package modele.deplacements;
package modele.calculs;
import modele.donnees.ElementPhysique;
import modele.donnees.Entite;
import modele.donnees.EntiteDynamique;
import modele.donnees.ObjetGyromide;
public class Gravite extends RealisateurDeDeplacement {
@Override
public boolean realiserDeplacement() {
boolean ret = false;
for (EntiteDynamique e : lstEntitesDynamiques) {
Entite eBas = e.regarderDansLaDirection(Direction.bas);
for (Entite e : lstEntitesDynamiques) {
ElementPhysique eBas = e.regarderDansLaDirection(Direction.bas);
if (eBas == null || (eBas != null && !eBas.peutServirDeSupport())) {
if (e.avancerDirectionChoisie(Direction.bas))
ret = true;

View File

@ -1,4 +1,4 @@
package modele.deplacements;
package modele.calculs;
public class IA extends RealisateurDeDeplacement {
protected boolean realiserDeplacement() { return false; } // TODO

View File

@ -3,12 +3,13 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package modele.donnees;
package modele.calculs;
import modele.deplacements.Controle4Directions;
import modele.deplacements.Direction;
import modele.deplacements.Gravite;
import modele.deplacements.Ordonnanceur;
import modele.calculs.Controle4Directions;
import modele.calculs.Direction;
import modele.calculs.Gravite;
import modele.calculs.Ordonnanceur;
import modele.donnees.*;
import java.awt.Point;
import java.util.HashMap;
@ -22,13 +23,14 @@ public class Jeu {
public static final int SIZE_Y = 10;
// compteur de déplacements horizontal et vertical (1 max par défaut, à chaque pas de temps)
private HashMap<Entite, Integer> cmptDeplH = new HashMap<Entite, Integer>();
private HashMap<Entite, Integer> cmptDeplV = new HashMap<Entite, Integer>();
private HashMap<ElementPhysique, Integer> cmptDeplH = new HashMap<ElementPhysique, Integer>();
private HashMap<ElementPhysique, Integer> cmptDeplV = new HashMap<ElementPhysique, Integer>();
private Heros hector;
private HashMap<ElementPhysique, Point> map = new HashMap<ElementPhysique, Point>(); // permet de récupérer la position d'une entité à partir de sa référence
private ElementPhysique[][] grilleEntites = new ElementPhysique[SIZE_X][SIZE_Y]; // permet de récupérer une entité à partir de ses coordonnées
private HashMap<ElementDynamique, Point> map = new HashMap<ElementDynamique, Point>(); // permet de récupérer la position d'une entité à partir de sa référence
private HashMap<ObjetGyromide, Point> mapInit = new HashMap<ObjetGyromide, Point>(); // N'est utilisé qu'a l'initialisation. Permet d'initialiser la grille
private ObjetGyromide[][][] grilleEntites = new ObjetGyromide[SIZE_X][SIZE_Y][2]; // permet de récupérer une entité à partir de ses coordonnées
private Ordonnanceur ordonnanceur = new Ordonnanceur(this);
@ -45,7 +47,7 @@ public class Jeu {
ordonnanceur.start(_pause);
}
public Entite[][] getGrille() {
public ObjetGyromide[][][] getGrille() {
return grilleEntites;
}
@ -80,15 +82,21 @@ public class Jeu {
addEntite(new Mur(this), 3, 6);
}
private void addEntite(ElementPhysique e, int x, int y) {
grilleEntites[x][y] = e;
map.put(e, new Point(x, y));
private void addEntite(ObjetGyromide e, int x, int y) {
if(e instanceof ElementFond)
grilleEntites[x][y][1] = e;
else if (e instanceof ElementPhysique)
grilleEntites[x][y][0] = e;
if(e instanceof ElementDynamique)
map.put((ElementDynamique) e, new Point(x, y));
mapInit.put(e, new Point(x, y));
}
/** Permet par exemple a une entité de percevoir sont environnement proche et de définir sa stratégie de déplacement
*
*/
public Entite regarderDansLaDirection(Entite e, Direction d) {
public ElementPhysique regarderDansLaDirection(Entite e, Direction d) {
Point positionEntite = map.get(e);
return objetALaPosition(calculerPointCible(positionEntite, d));
}
@ -147,9 +155,9 @@ public class Jeu {
return pCible;
}
private void deplacerEntite(Point pCourant, Point pCible, ElementPhysique e) {
grilleEntites[pCourant.x][pCourant.y] = null;
grilleEntites[pCible.x][pCible.y] = e;
private void deplacerEntite(Point pCourant, Point pCible, Entite e) {
grilleEntites[pCourant.x][pCourant.y][0] = null;
grilleEntites[pCible.x][pCible.y][0] = e;
map.put(e, pCible);
}
@ -160,13 +168,16 @@ public class Jeu {
}
private ElementPhysique objetALaPosition(Point p) {
Entite retour = null;
ObjetGyromide retour = null;
if (contenuDansGrille(p)) {
retour = grilleEntites[p.x][p.y];
retour = grilleEntites[p.x][p.y][0];
}
return retour;
if(retour instanceof ElementPhysique)
return (ElementPhysique) retour;
else
return null;
}
public Ordonnanceur getOrdonnanceur() {

View File

@ -1,6 +1,4 @@
package modele.deplacements;
import modele.donnees.Jeu;
package modele.calculs;
import java.util.ArrayList;
import java.util.Observable;

View File

@ -1,5 +1,6 @@
package modele.deplacements;
package modele.calculs;
import modele.donnees.Entite;
import modele.donnees.EntiteDynamique;
import java.util.ArrayList;
@ -8,8 +9,8 @@ import java.util.ArrayList;
Tous les déplacement sont déclenchés par cette classe (gravité, controle clavier, IA, etc.)
*/
public abstract class RealisateurDeDeplacement {
protected ArrayList<EntiteDynamique> lstEntitesDynamiques = new ArrayList<EntiteDynamique>();
protected ArrayList<Entite> lstEntitesDynamiques = new ArrayList<Entite>();
protected abstract boolean realiserDeplacement();
public void addEntiteDynamique(EntiteDynamique ed) {lstEntitesDynamiques.add(ed);};
public void addEntiteDynamique(Entite ed) {lstEntitesDynamiques.add(ed);};
}

View File

@ -8,7 +8,7 @@ package modele.donnees;
import modele.calculs.Direction;
import modele.calculs.Jeu;
public abstract class Entite extends ElementPhysique{
public abstract class Entite extends ElementPhysique implements ElementDynamique {
public Entite(Jeu jeu) {
super(jeu);
}
@ -16,7 +16,7 @@ public abstract class Entite extends ElementPhysique{
public boolean avancerDirectionChoisie(Direction d) {
return jeu.deplacerEntite(this, d);
}
public Entite regarderDansLaDirection(Direction d) {
public ElementPhysique regarderDansLaDirection(Direction d) {
return jeu.regarderDansLaDirection(this, d);
}
}

View File

@ -12,5 +12,5 @@ public abstract class EntiteDynamique extends Entite {
public boolean avancerDirectionChoisie(Direction d) {
return jeu.deplacerEntite(this, d);
}
public Entite regarderDansLaDirection(Direction d) {return jeu.regarderDansLaDirection(this, d);}
public ElementPhysique regarderDansLaDirection(Direction d) {return jeu.regarderDansLaDirection(this, d);}
}

View File

@ -2,7 +2,7 @@ package modele.donnees;
import modele.calculs.Jeu;
public abstract class Items extends ElementFond {
public abstract class Items extends ElementFond implements ElementDynamique {
public Items(Jeu jeu) {
super(jeu);
}