diff --git a/src/VueControleur/VueControleurGyromite.java b/src/VueControleur/VueControleurGyromite.java index 05cc43b..27c7840 100644 --- a/src/VueControleur/VueControleurGyromite.java +++ b/src/VueControleur/VueControleurGyromite.java @@ -46,6 +46,8 @@ public class VueControleurGyromite extends JFrame implements Observer { private JComponent grilleJLabels = null; private JComponent titleScreen = null; + private int lastStateLoad = -1; + 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) { @@ -77,8 +79,6 @@ public class VueControleurGyromite extends JFrame implements Observer { chargerLesIcones(); setUpFenetre(); - placerLesComposantsGraphiquesMenu(); - ajouterEcouteurClavierMenu(); } private void ajouterEcouteurClavierJeu() { @@ -149,7 +149,7 @@ public class VueControleurGyromite extends JFrame implements Observer { grilleJLabels = null; } titleScreen = new JLabel(); - ((JLabel) titleScreen).setIcon(titleImage); + titleScreen.setBackground(Color.BLACK); add(titleScreen); } @@ -185,11 +185,21 @@ public class VueControleurGyromite extends JFrame implements Observer { public void update(Observable o, Object arg) { switch (jeu.getState()) { case 0: + if(lastStateLoad != 0) { + placerLesComposantsGraphiquesMenu(); + ajouterEcouteurClavierMenu(); + ((JLabel) titleScreen).setIcon(titleImage); + lastStateLoad = 0; + } + ((JLabel) titleScreen).setIcon(titleImage); break; - case 3: - placerLesComposantsGraphiquesJeu(); - ajouterEcouteurClavierJeu(); - case 4: + case 2: + if(lastStateLoad != 2) { + placerLesComposantsGraphiquesJeu(); + ajouterEcouteurClavierJeu(); + mettreAJourAffichage(); + lastStateLoad = 2; + } mettreAJourAffichage(); break; } diff --git a/src/modele/calculs/Jeu.java b/src/modele/calculs/Jeu.java index ed7c014..e9b7a02 100644 --- a/src/modele/calculs/Jeu.java +++ b/src/modele/calculs/Jeu.java @@ -38,16 +38,15 @@ public class Jeu { 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; + // Etat du jeu courant. 0 = ecran titre, 1 = Menu choix, 2 = Plateau Jeu + private int state; public synchronized int getState() { - int retour = state; - if (state % 2 == 1) state ++; - return retour; + return state; } public Jeu() { + MenuInput.getInstance().addEntiteDynamique(new Menu(this)); startTitleScreen(); } @@ -63,6 +62,11 @@ public class Jeu { public ObjetGyromide[][][] getGrille() { return grilleEntites; } + private void resetJeu() { + grilleEntites = new ObjetGyromide[SIZE_X][SIZE_Y][2]; + map.clear(); + hector = null; + } public Heros getHector() { return hector; @@ -70,15 +74,15 @@ public class Jeu { // PARTIE INITIALISATIONS private void initialisationDesEntites() { - this.state = 3; + this.state = 2; + getOrdonnanceur().clear(); + resetJeu(); LecteurFichier.loadMap("Map/test.gyro", this); - System.out.println("Map loaded"); } public void startTitleScreen() { this.state = 0; - - MenuInput.getInstance().addEntiteDynamique(new Menu(this)); + getOrdonnanceur().clear(); ordonnanceur.add(MenuInput.getInstance()); } @@ -170,7 +174,7 @@ public class Jeu { private void killEntite(Entite e, Point pCourant) { grilleEntites[pCourant.x][pCourant.y][1] = null; - map.put(e, null); + map.remove(e); e.tuer(); @@ -180,7 +184,9 @@ public class Jeu { } // TODO private void killPlayer(Entite e) { + startTitleScreen(); System.out.println("Techniquement le joueur est mort"); + } private boolean deplacerColonne(Colonne c, Point pCible, Direction d) { diff --git a/src/modele/calculs/Ordonnanceur.java b/src/modele/calculs/Ordonnanceur.java index 93e88f6..4cffbf5 100644 --- a/src/modele/calculs/Ordonnanceur.java +++ b/src/modele/calculs/Ordonnanceur.java @@ -10,13 +10,21 @@ public class Ordonnanceur extends Observable implements Runnable { private ArrayList lstDeplacements = new ArrayList(); private ArrayList buffer_lstDeplacements = new ArrayList(); private long pause; + private boolean toClear = false; + public void add(RealisateurDeDeplacement deplacement) { buffer_lstDeplacements.add(deplacement); } + + public void clear() { + toClear = true; + } + private void addBuffer() { for (RealisateurDeDeplacement r : buffer_lstDeplacements) lstDeplacements.add(r); buffer_lstDeplacements.clear(); + forceUpdate(); } public Ordonnanceur(Jeu _jeu) { @@ -28,13 +36,15 @@ public class Ordonnanceur extends Observable implements Runnable { new Thread(this).start(); } + public void forceUpdate() { + setChanged(); + notifyObservers(); + } + @Override public void run() { boolean update = false; - setChanged(); - notifyObservers(); - while(true) { switch (jeu.getState()) { case 0: @@ -45,8 +55,7 @@ public class Ordonnanceur extends Observable implements Runnable { MenuInput.getInstance().resetDirection(); break; - case 3: - case 4: + case 2: jeu.resetCmptDepl(); for (RealisateurDeDeplacement d : lstDeplacements) { if (d.realiserDeplacement()) @@ -63,6 +72,8 @@ public class Ordonnanceur extends Observable implements Runnable { notifyObservers(); } + if(toClear) {lstDeplacements.clear();toClear = false;} + addBuffer(); try { diff --git a/src/modele/donnees/DecorFond.java b/src/modele/donnees/DecorFond.java index 2ff6931..9a47bd6 100644 --- a/src/modele/donnees/DecorFond.java +++ b/src/modele/donnees/DecorFond.java @@ -13,7 +13,7 @@ public abstract class DecorFond extends ElementFond { } @Override - public boolean estRectable() { + public boolean estRecoltable() { return false; } }