Implementation du menu + gestion d'une direction : "Action"

This commit is contained in:
Amaury Joly 2020-12-05 16:42:13 +01:00
parent 98e467e8ab
commit 3ea09a6d32
4 changed files with 134 additions and 30 deletions

View File

@ -16,6 +16,7 @@ import javax.swing.*;
import modele.calculs.Controle4Directions; import modele.calculs.Controle4Directions;
import modele.calculs.Direction; import modele.calculs.Direction;
import modele.calculs.Jeu; import modele.calculs.Jeu;
import modele.calculs.MenuInput;
import modele.donnees.*; import modele.donnees.*;
@ -39,8 +40,33 @@ public class VueControleurGyromite extends JFrame implements Observer {
private ImageIcon icoCorde; private ImageIcon icoCorde;
private ImageIcon icoBombe; private ImageIcon icoBombe;
private JLabel[][] tabJLabel; // cases graphique (au moment du rafraichissement, chaque case va être associée à une icône, suivant ce qui est présent dans le modèle) private ImageIcon titleImage;
private JLabel[][] tabJLabel; // cases graphique (au moment du rafraichissement, chaque case va être associée à une icône, suivant ce qui est présent dans le modèle)
private JComponent grilleJLabels = null;
private JComponent titleScreen = null;
private KeyAdapter listenerJeu = new KeyAdapter() { // new KeyAdapter() { ... } est une instance de classe anonyme, il s'agit d'un objet qui correspond au controleur dans MVC
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) { // on regarde quelle touche a été pressée
case KeyEvent.VK_LEFT : Controle4Directions.getInstance().setDirectionCourante(Direction.gauche); break;
case KeyEvent.VK_RIGHT : Controle4Directions.getInstance().setDirectionCourante(Direction.droite); break;
case KeyEvent.VK_DOWN : Controle4Directions.getInstance().setDirectionCourante(Direction.bas); break;
case KeyEvent.VK_UP : Controle4Directions.getInstance().setDirectionCourante(Direction.haut); break;
}
}
};
private KeyAdapter listenerMenu = new KeyAdapter() { // new KeyAdapter() { ... } est une instance de classe anonyme, il s'agit d'un objet qui correspond au controleur dans MVC
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) { // on regarde quelle touche a été pressée
case KeyEvent.VK_ENTER: MenuInput.getInstance().setDirectionAction(Direction.action); break;
case KeyEvent.VK_DOWN : MenuInput.getInstance().setDirectionAction(Direction.bas); break;
case KeyEvent.VK_UP : MenuInput.getInstance().setDirectionAction(Direction.haut); break;
}
}
};
public VueControleurGyromite(Jeu _jeu) { public VueControleurGyromite(Jeu _jeu) {
sizeX = jeu.SIZE_X; sizeX = jeu.SIZE_X;
@ -48,22 +74,19 @@ public class VueControleurGyromite extends JFrame implements Observer {
jeu = _jeu; jeu = _jeu;
chargerLesIcones(); chargerLesIcones();
placerLesComposantsGraphiques(); setUpFenetre();
ajouterEcouteurClavier(); placerLesComposantsGraphiquesMenu();
ajouterEcouteurClavierMenu();
} }
private void ajouterEcouteurClavier() { private void ajouterEcouteurClavierJeu() {
addKeyListener(new KeyAdapter() { // new KeyAdapter() { ... } est une instance de classe anonyme, il s'agit d'un objet qui correspond au controleur dans MVC removeKeyListener(listenerMenu);
@Override addKeyListener(listenerJeu);
public void keyPressed(KeyEvent e) { }
switch(e.getKeyCode()) { // on regarde quelle touche a été pressée
case KeyEvent.VK_LEFT : Controle4Directions.getInstance().setDirectionCourante(Direction.gauche); break; private void ajouterEcouteurClavierMenu() {
case KeyEvent.VK_RIGHT : Controle4Directions.getInstance().setDirectionCourante(Direction.droite); break; removeKeyListener(listenerJeu);
case KeyEvent.VK_DOWN : Controle4Directions.getInstance().setDirectionCourante(Direction.bas); break; addKeyListener(listenerMenu);
case KeyEvent.VK_UP : Controle4Directions.getInstance().setDirectionCourante(Direction.haut); break;
}
}
});
} }
@ -75,6 +98,8 @@ public class VueControleurGyromite extends JFrame implements Observer {
icoMur = chargerIcone("Images/Mur.png"); icoMur = chargerIcone("Images/Mur.png");
icoCorde = chargerIcone("Images/Corde.png"); icoCorde = chargerIcone("Images/Corde.png");
icoBombe = chargerIcone("Images/Bombe.png"); icoBombe = chargerIcone("Images/Bombe.png");
titleImage = chargerIcone("Images/TitleScreen.png");
} }
private ImageIcon chargerIcone(String urlIcone) { private ImageIcon chargerIcone(String urlIcone) {
@ -90,12 +115,18 @@ public class VueControleurGyromite extends JFrame implements Observer {
return new ImageIcon(image); return new ImageIcon(image);
} }
private void placerLesComposantsGraphiques() { private void setUpFenetre() {
setTitle("Gyromite"); setTitle("Gyromite");
setSize(400, 250); setSize(400, 270);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // permet de terminer l'application à la fermeture de la fenêtre setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // permet de terminer l'application à la fermeture de la fenêtre
}
JComponent grilleJLabels = new JPanel(new GridLayout(sizeY, sizeX)); // grilleJLabels va contenir les cases graphiques et les positionner sous la forme d'une grille private void placerLesComposantsGraphiquesJeu() {
if(titleScreen != null) {
remove(titleScreen);
titleScreen = null;
}
grilleJLabels = new JPanel(new GridLayout(sizeY, sizeX)); // grilleJLabels va contenir les cases graphiques et les positionner sous la forme d'une grille
tabJLabel = new JLabel[sizeX][sizeY]; tabJLabel = new JLabel[sizeX][sizeY];
@ -109,6 +140,16 @@ public class VueControleurGyromite extends JFrame implements Observer {
add(grilleJLabels); add(grilleJLabels);
} }
private void placerLesComposantsGraphiquesMenu() {
if(grilleJLabels != null) {
remove(grilleJLabels);
grilleJLabels = null;
}
titleScreen = new JLabel();
((JLabel) titleScreen).setIcon(titleImage);
add(titleScreen);
}
/** /**
* Il y a une grille du côté du modèle ( jeu.getGrille() ) et une grille du côté de la vue (tabJLabel) * Il y a une grille du côté du modèle ( jeu.getGrille() ) et une grille du côté de la vue (tabJLabel)
@ -139,7 +180,16 @@ public class VueControleurGyromite extends JFrame implements Observer {
@Override @Override
public void update(Observable o, Object arg) { public void update(Observable o, Object arg) {
mettreAJourAffichage(); switch (jeu.getState()) {
case 0:
break;
case 3:
placerLesComposantsGraphiquesJeu();
ajouterEcouteurClavierJeu();
case 4:
mettreAJourAffichage();
break;
}
/* /*
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override

View File

@ -10,5 +10,5 @@ package modele.calculs;
* *
*/ */
public enum Direction { public enum Direction {
haut, bas, gauche, droite haut, bas, gauche, droite, action
} }

View File

@ -11,8 +11,9 @@ import modele.calculs.Gravite;
import modele.calculs.IO.LecteurFichier; import modele.calculs.IO.LecteurFichier;
import modele.calculs.Ordonnanceur; import modele.calculs.Ordonnanceur;
import modele.donnees.*; import modele.donnees.*;
import modele.donnees.Menu;
import java.awt.Point; import java.awt.*;
import java.util.HashMap; import java.util.HashMap;
/** Actuellement, cette classe gère les postions /** Actuellement, cette classe gère les postions
@ -35,8 +36,17 @@ public class Jeu {
private Ordonnanceur ordonnanceur = new Ordonnanceur(this); private Ordonnanceur ordonnanceur = new Ordonnanceur(this);
// Etat du jeu courant. 0 = ecran titre, 2 = Menu choix, 4 = Plateau Jeu (les valeurs entre sont les valeurs de transitions)
private int state = 0;
public synchronized int getState() {
int retour = state;
if (state % 2 == 1) state ++;
return retour;
}
public Jeu() { public Jeu() {
initialisationDesEntites(); startTitleScreen();
} }
public void resetCmptDepl() { public void resetCmptDepl() {
@ -55,12 +65,23 @@ public class Jeu {
public Heros getHector() { public Heros getHector() {
return hector; return hector;
} }
// PARTIE INITIALISATIONS
private void initialisationDesEntites() { private void initialisationDesEntites() {
this.state = 3;
LecteurFichier.loadMap("Map/test.gyro", this); LecteurFichier.loadMap("Map/test.gyro", this);
System.out.println("Map loaded"); System.out.println("Map loaded");
} }
public void startTitleScreen() {
this.state = 0;
MenuInput.getInstance().addEntiteDynamique(new Menu(this));
ordonnanceur.add(MenuInput.getInstance());
}
// PARTIE MANIPULATIONS ENTITE
public void addEntite(ObjetGyromide e, int x, int y) { public void addEntite(ObjetGyromide e, int x, int y) {
if(e instanceof ElementFond) if(e instanceof ElementFond)
grilleEntites[x][y][1] = e; grilleEntites[x][y][1] = e;
@ -198,4 +219,16 @@ public class Jeu {
public Ordonnanceur getOrdonnanceur() { public Ordonnanceur getOrdonnanceur() {
return ordonnanceur; return ordonnanceur;
} }
// PARTIE MANIPULATION MENU
public synchronized boolean updateMenu(Direction d) {
System.out.println("Mis a jour du menu");
switch (getState()) {
case 0:
if (d == Direction.action)
initialisationDesEntites();
break;
}
return true;
}
} }

View File

@ -8,9 +8,15 @@ import static java.lang.Thread.*;
public class Ordonnanceur extends Observable implements Runnable { public class Ordonnanceur extends Observable implements Runnable {
private Jeu jeu; private Jeu jeu;
private ArrayList<RealisateurDeDeplacement> lstDeplacements = new ArrayList<RealisateurDeDeplacement>(); private ArrayList<RealisateurDeDeplacement> lstDeplacements = new ArrayList<RealisateurDeDeplacement>();
private ArrayList<RealisateurDeDeplacement> buffer_lstDeplacements = new ArrayList<RealisateurDeDeplacement>();
private long pause; private long pause;
public void add(RealisateurDeDeplacement deplacement) { public void add(RealisateurDeDeplacement deplacement) {
lstDeplacements.add(deplacement); buffer_lstDeplacements.add(deplacement);
}
private void addBuffer() {
for (RealisateurDeDeplacement r : buffer_lstDeplacements)
lstDeplacements.add(r);
buffer_lstDeplacements.clear();
} }
public Ordonnanceur(Jeu _jeu) { public Ordonnanceur(Jeu _jeu) {
@ -30,19 +36,34 @@ public class Ordonnanceur extends Observable implements Runnable {
notifyObservers(); notifyObservers();
while(true) { while(true) {
jeu.resetCmptDepl(); switch (jeu.getState()) {
for (RealisateurDeDeplacement d : lstDeplacements) { case 0:
if (d.realiserDeplacement()) for (RealisateurDeDeplacement d : lstDeplacements) {
update = true; if (d.realiserDeplacement())
} update = true;
}
Controle4Directions.getInstance().resetDirection(); MenuInput.getInstance().resetDirection();
break;
case 3:
case 4:
jeu.resetCmptDepl();
for (RealisateurDeDeplacement d : lstDeplacements) {
if (d.realiserDeplacement())
update = true;
}
Controle4Directions.getInstance().resetDirection();
break;
}
if (update) { if (update) {
setChanged(); setChanged();
notifyObservers(); notifyObservers();
} }
addBuffer();
try { try {
sleep(pause); sleep(pause);
} catch (InterruptedException e) { } catch (InterruptedException e) {