mirror of
https://forge.univ-lyon1.fr/tplifap4/gyromite_ya.git
synced 2024-02-27 13:31:49 +01:00
Implementation du menu + gestion d'une direction : "Action"
This commit is contained in:
parent
98e467e8ab
commit
3ea09a6d32
@ -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
|
||||||
|
@ -10,5 +10,5 @@ package modele.calculs;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public enum Direction {
|
public enum Direction {
|
||||||
haut, bas, gauche, droite
|
haut, bas, gauche, droite, action
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user