From acdc361e6c685ac059627ba721e0215db74c126b Mon Sep 17 00:00:00 2001 From: Amaury Date: Wed, 2 Dec 2020 16:51:42 +0100 Subject: [PATCH] Implementation des calculs. Done. --- src/Main.java | 2 +- src/VueControleur/VueControleurGyromite.java | 13 ++--- src/modele/calculs/Colonne.java | 2 +- src/modele/calculs/Controle4Directions.java | 7 +-- src/modele/calculs/Direction.java | 2 +- src/modele/calculs/Gravite.java | 8 +-- src/modele/calculs/IA.java | 2 +- src/modele/calculs/Jeu.java | 53 +++++++++++-------- src/modele/calculs/Ordonnanceur.java | 4 +- .../calculs/RealisateurDeDeplacement.java | 7 +-- src/modele/donnees/Entite.java | 4 +- src/modele/donnees/EntiteDynamique.java | 2 +- src/modele/donnees/Items.java | 2 +- 13 files changed, 61 insertions(+), 47 deletions(-) diff --git a/src/Main.java b/src/Main.java index ee4a2e8..529101b 100644 --- a/src/Main.java +++ b/src/Main.java @@ -5,7 +5,7 @@ */ import VueControleur.VueControleurGyromite; -import modele.plateau.Jeu; +import modele.calculs.Jeu; public class Main { public static void main(String[] args) { diff --git a/src/VueControleur/VueControleurGyromite.java b/src/VueControleur/VueControleurGyromite.java index 3b72dba..e7592bb 100644 --- a/src/VueControleur/VueControleurGyromite.java +++ b/src/VueControleur/VueControleurGyromite.java @@ -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); diff --git a/src/modele/calculs/Colonne.java b/src/modele/calculs/Colonne.java index fd437e4..25d5838 100644 --- a/src/modele/calculs/Colonne.java +++ b/src/modele/calculs/Colonne.java @@ -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 diff --git a/src/modele/calculs/Controle4Directions.java b/src/modele/calculs/Controle4Directions.java index 984fe59..7737e3a 100644 --- a/src/modele/calculs/Controle4Directions.java +++ b/src/modele/calculs/Controle4Directions.java @@ -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; diff --git a/src/modele/calculs/Direction.java b/src/modele/calculs/Direction.java index c04ec96..1432ac9 100644 --- a/src/modele/calculs/Direction.java +++ b/src/modele/calculs/Direction.java @@ -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 * diff --git a/src/modele/calculs/Gravite.java b/src/modele/calculs/Gravite.java index de478ac..73689d8 100644 --- a/src/modele/calculs/Gravite.java +++ b/src/modele/calculs/Gravite.java @@ -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; diff --git a/src/modele/calculs/IA.java b/src/modele/calculs/IA.java index 0f8d1d5..1dc5f5a 100644 --- a/src/modele/calculs/IA.java +++ b/src/modele/calculs/IA.java @@ -1,4 +1,4 @@ -package modele.deplacements; +package modele.calculs; public class IA extends RealisateurDeDeplacement { protected boolean realiserDeplacement() { return false; } // TODO diff --git a/src/modele/calculs/Jeu.java b/src/modele/calculs/Jeu.java index 6254841..76b7998 100644 --- a/src/modele/calculs/Jeu.java +++ b/src/modele/calculs/Jeu.java @@ -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 cmptDeplH = new HashMap(); - private HashMap cmptDeplV = new HashMap(); + private HashMap cmptDeplH = new HashMap(); + private HashMap cmptDeplV = new HashMap(); private Heros hector; - private HashMap map = new HashMap(); // 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 map = new HashMap(); // permet de récupérer la position d'une entité à partir de sa référence + private HashMap mapInit = new HashMap(); // 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() { diff --git a/src/modele/calculs/Ordonnanceur.java b/src/modele/calculs/Ordonnanceur.java index 825888f..ac8382c 100644 --- a/src/modele/calculs/Ordonnanceur.java +++ b/src/modele/calculs/Ordonnanceur.java @@ -1,6 +1,4 @@ -package modele.deplacements; - -import modele.donnees.Jeu; +package modele.calculs; import java.util.ArrayList; import java.util.Observable; diff --git a/src/modele/calculs/RealisateurDeDeplacement.java b/src/modele/calculs/RealisateurDeDeplacement.java index 76dafdf..4ecd666 100644 --- a/src/modele/calculs/RealisateurDeDeplacement.java +++ b/src/modele/calculs/RealisateurDeDeplacement.java @@ -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 lstEntitesDynamiques = new ArrayList(); + protected ArrayList lstEntitesDynamiques = new ArrayList(); protected abstract boolean realiserDeplacement(); - public void addEntiteDynamique(EntiteDynamique ed) {lstEntitesDynamiques.add(ed);}; + public void addEntiteDynamique(Entite ed) {lstEntitesDynamiques.add(ed);}; } diff --git a/src/modele/donnees/Entite.java b/src/modele/donnees/Entite.java index 60d409c..b3a368d 100644 --- a/src/modele/donnees/Entite.java +++ b/src/modele/donnees/Entite.java @@ -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); } } diff --git a/src/modele/donnees/EntiteDynamique.java b/src/modele/donnees/EntiteDynamique.java index e820ff8..124d8d5 100644 --- a/src/modele/donnees/EntiteDynamique.java +++ b/src/modele/donnees/EntiteDynamique.java @@ -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);} } diff --git a/src/modele/donnees/Items.java b/src/modele/donnees/Items.java index 4225c75..9dde3bb 100644 --- a/src/modele/donnees/Items.java +++ b/src/modele/donnees/Items.java @@ -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); }