mirror of
https://forge.univ-lyon1.fr/tplifap4/gyromite_ya.git
synced 2024-02-27 13:31:49 +01:00
Implementation des calculs. Done.
This commit is contained in:
parent
80f0899bf1
commit
acdc361e6c
@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
import VueControleur.VueControleurGyromite;
|
||||
import modele.plateau.Jeu;
|
||||
import modele.calculs.Jeu;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package modele.deplacements;
|
||||
package modele.calculs;
|
||||
|
||||
public class IA extends RealisateurDeDeplacement {
|
||||
protected boolean realiserDeplacement() { return false; } // TODO
|
||||
|
@ -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() {
|
||||
|
@ -1,6 +1,4 @@
|
||||
package modele.deplacements;
|
||||
|
||||
import modele.donnees.Jeu;
|
||||
package modele.calculs;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Observable;
|
||||
|
@ -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);};
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user