Loading jeuAssemblage/output.png +153 B (667 B) Loading image diff... jeuAssemblage/src/view/component/GamePanel.java +15 −2 Changes for jeuAssemblage/src/view/component/GamePanel.java: 15 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -9,6 +9,9 @@ import view.MainFrame; import view.component.board.Finish; import view.component.board.Grid; import view.component.board.PieceBoard; import view.component.board.TimerPanel; import view.component.board.TimerPanel.Timer; import view.screen.SoloGameFinishScreen; import view.utils.SwingUtils; import java.awt.Graphics; Loading @@ -16,20 +19,30 @@ import java.awt.Graphics; public class GamePanel extends JPanel { private final Grid grid; private final TimerPanel timerPanel; private final PieceBoard pieceBoard; private final Finish finish; public GamePanel(MainFrame mainFrame, PlayBoard playBoard) { public GamePanel(MainFrame mainFrame, PlayBoard playBoard, Timer timer) { super(); this.setLayout(null); this.timerPanel = new TimerPanel(timer, new Runnable() { @Override public void run() { mainFrame.setContentPane(new SoloGameFinishScreen(playBoard)); } }); this.pieceBoard = new PieceBoard(playBoard); this.grid = new Grid(playBoard); this.finish = new Finish(mainFrame, playBoard); this.add(this.grid); this.add(this.timerPanel); // this.add(this.pieceBoard); this.add(this.finish); } Loading @@ -46,7 +59,7 @@ public class GamePanel extends JPanel { this.getHeight() ); this.pieceBoard.setBounds( this.timerPanel.setBounds( this.grid.getWidth(), 0, getWidthTimesPourcent (this, .2f), Loading jeuAssemblage/src/view/component/board/TimerPanel.java 0 → 100644 +190 −0 Changes for jeuAssemblage/src/view/component/board/TimerPanel.java: 190 added lines, 0 removed lines. Original line number Diff line number Diff line package view.component.board; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; public class TimerPanel extends JPanel { private final JLabel lblMinutes = new JLabel("00"); private final JLabel lblColon = new JLabel(" : "); private final JLabel lblSeconds = new JLabel("00"); public TimerPanel(Timer timer, Runnable onTimerFinished) { super(); setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); add(lblMinutes); add(lblColon); add(lblSeconds); if (false == (Timer.NO_TIMER == timer)) { lblMinutes.setText(String.format("%02d", timer.getNbMinutes())); lblSeconds.setText(String.format("%02d", timer.getNbSeconds())); timer.addTimerListener(new TimerListener() { @Override public void timerChanged(Object source, Timer timer) { System.out.println("timerChanged"); lblMinutes.setText(String.format("%02d", timer.getCurrentNbMinutes())); lblSeconds.setText(String.format("%02d", timer.getCurrentNbSeconds())); repaint(); } @Override public void timerFinished(Object source, Timer timer) { lblMinutes.setText("00"); lblSeconds.setText("00"); onTimerFinished.run(); repaint(); } }); timer.startTimer(); } } public static class Timer { public static final Timer NO_TIMER = new Timer(-1, -1); private final int nbMinutes; private final int nbSeconds; private int currentNbMinutes; private int currentNbSeconds; private Thread thread; public Timer(int nbMinutes, int nbSeconds) { this.nbMinutes = nbMinutes; this.nbSeconds = nbSeconds; this.currentNbMinutes = nbMinutes; this.currentNbSeconds = nbSeconds; } public int getCurrentNbMinutes() { return currentNbMinutes; } public int getCurrentNbSeconds() { return currentNbSeconds; } public int getNbMinutes() { return nbMinutes; } public int getNbSeconds() { return nbSeconds; } public void startTimer() { if (thread != null) { thread.interrupt(); } thread = new Thread(() -> { while (currentNbMinutes > 0 || currentNbSeconds > 0) { try { Thread.sleep(1000); } catch (InterruptedException e) { return; } if (currentNbSeconds > 0) { currentNbSeconds--; } else { currentNbSeconds = 59; currentNbMinutes--; } fireTimerChanged(); } fireTimerFinished(); }); thread.start(); } private void stopTimer() { if (thread != null) { thread.interrupt(); } } private void fireTimerChanged() { for (TimerListener listener : listeners) { listener.timerChanged(this, this); } } private void fireTimerFinished() { for (TimerListener listener : listeners) { listener.timerFinished(this, this); } } private final List<TimerListener> listeners = new LinkedList<>(); public void addTimerListener(TimerListener listener) { listeners.add(listener); } public void removeTimerListener(TimerListener listener) { listeners.remove(listener); } } public static interface TimerListenable { public abstract void addTimerListener(TimerListener listener); public abstract void removeTimerListener(TimerListener listener); } public static interface TimerListener { public abstract void timerChanged(Object source, Timer timer); public abstract void timerFinished(Object source, Timer timer); } } No newline at end of file jeuAssemblage/src/view/screen/SoloGameCreation.java +46 −5 Changes for jeuAssemblage/src/view/screen/SoloGameCreation.java: 46 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import utils.EDifficulty; import view.MainFrame; import view.component.Separator; import view.component.board.Grid; import view.component.board.TimerPanel.Timer; import view.utils.DocumentAdapter; public class SoloGameCreation extends JPanel { Loading @@ -43,8 +44,8 @@ public class SoloGameCreation extends JPanel { private final JLabel lblDifficulty = new JLabel("Difficulté :"); private final JList<String> difficultyList = new JList<String>(EDifficulty.getDifficultysName()); private final JSpinner nbMinutesSpinner = new JSpinner(); private final JSpinner nbSecondsSpinner = new JSpinner(); private final JSpinner nbMinutesSpinner = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); private final JSpinner nbSecondsSpinner = new JSpinner(new SpinnerNumberModel(0, -1, 60, 1)); private final JCheckBox timeLimitCheckBox = new JCheckBox("Temps limité"); private JPanel gridPreview = new JPanel(); Loading Loading @@ -125,7 +126,39 @@ public class SoloGameCreation extends JPanel { (int) nbPiecesSpinner.getValue() ); mainFrame.setContentPane(new SoloGameScreen(mainFrame, playBoard)); Timer timer = null; if (timeLimitCheckBox.isSelected()) { timer = new Timer((int) nbMinutesSpinner.getValue(), (int) nbSecondsSpinner.getValue()); } else { timer = Timer.NO_TIMER; } mainFrame.setContentPane(new SoloGameScreen(mainFrame, playBoard, timer)); }); nbMinutesSpinner.setEnabled(timeLimitCheckBox.isSelected()); nbSecondsSpinner.setEnabled(timeLimitCheckBox.isSelected()); timeLimitCheckBox.addActionListener(e -> { nbMinutesSpinner.setEnabled(timeLimitCheckBox.isSelected()); nbSecondsSpinner.setEnabled(timeLimitCheckBox.isSelected()); }); nbSecondsSpinner.addChangeListener(e -> { if ((int) nbSecondsSpinner.getValue() == 60) { nbSecondsSpinner.setValue(0); nbMinutesSpinner.setValue((int) nbMinutesSpinner.getValue() + 1); } else if ((int) nbSecondsSpinner.getValue() == -1) { nbSecondsSpinner.setValue(59); nbMinutesSpinner.setValue((int) nbMinutesSpinner.getValue() - 1); } }); updateGridPreview(); Loading Loading @@ -288,20 +321,28 @@ public class SoloGameCreation extends JPanel { private void updateGridPreview() { remove(gridPreview); JPanel temp = null; try { gridPreview = new Grid(PlayBoard.constructPlayBoard( temp = new Grid(PlayBoard.constructPlayBoard( Long.parseLong(txtSeed.getText()), Integer.parseInt(txtSizeX.getText()), Integer.parseInt(txtSizeY.getText()), (int) nbPiecesSpinner.getValue() ), true); } catch (Exception ignored) {} if (temp != null) { remove(gridPreview); gridPreview = temp; add(gridPreview); revalidate(); repaint(); } } private static Runnable createRandomSeedCallback(SoloGameCreation soloGameCreation) { Loading jeuAssemblage/src/view/screen/SoloGameScreen.java +3 −2 Changes for jeuAssemblage/src/view/screen/SoloGameScreen.java: 3 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ import javax.swing.JPanel; import model.PlayBoard; import view.MainFrame; import view.component.GamePanel; import view.component.board.TimerPanel.Timer; import view.utils.SwingUtils; import java.awt.Graphics; Loading @@ -13,11 +14,11 @@ public class SoloGameScreen extends JPanel { private final GamePanel gamePanel; public SoloGameScreen(MainFrame mainFrame, PlayBoard playboard) { public SoloGameScreen(MainFrame mainFrame, PlayBoard playboard, Timer timer) { setLayout(null); this.gamePanel = new GamePanel(mainFrame, playboard); this.gamePanel = new GamePanel(mainFrame, playboard, timer); this.add(this.gamePanel); Loading Loading
jeuAssemblage/src/view/component/GamePanel.java +15 −2 Changes for jeuAssemblage/src/view/component/GamePanel.java: 15 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -9,6 +9,9 @@ import view.MainFrame; import view.component.board.Finish; import view.component.board.Grid; import view.component.board.PieceBoard; import view.component.board.TimerPanel; import view.component.board.TimerPanel.Timer; import view.screen.SoloGameFinishScreen; import view.utils.SwingUtils; import java.awt.Graphics; Loading @@ -16,20 +19,30 @@ import java.awt.Graphics; public class GamePanel extends JPanel { private final Grid grid; private final TimerPanel timerPanel; private final PieceBoard pieceBoard; private final Finish finish; public GamePanel(MainFrame mainFrame, PlayBoard playBoard) { public GamePanel(MainFrame mainFrame, PlayBoard playBoard, Timer timer) { super(); this.setLayout(null); this.timerPanel = new TimerPanel(timer, new Runnable() { @Override public void run() { mainFrame.setContentPane(new SoloGameFinishScreen(playBoard)); } }); this.pieceBoard = new PieceBoard(playBoard); this.grid = new Grid(playBoard); this.finish = new Finish(mainFrame, playBoard); this.add(this.grid); this.add(this.timerPanel); // this.add(this.pieceBoard); this.add(this.finish); } Loading @@ -46,7 +59,7 @@ public class GamePanel extends JPanel { this.getHeight() ); this.pieceBoard.setBounds( this.timerPanel.setBounds( this.grid.getWidth(), 0, getWidthTimesPourcent (this, .2f), Loading
jeuAssemblage/src/view/component/board/TimerPanel.java 0 → 100644 +190 −0 Changes for jeuAssemblage/src/view/component/board/TimerPanel.java: 190 added lines, 0 removed lines. Original line number Diff line number Diff line package view.component.board; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; public class TimerPanel extends JPanel { private final JLabel lblMinutes = new JLabel("00"); private final JLabel lblColon = new JLabel(" : "); private final JLabel lblSeconds = new JLabel("00"); public TimerPanel(Timer timer, Runnable onTimerFinished) { super(); setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); add(lblMinutes); add(lblColon); add(lblSeconds); if (false == (Timer.NO_TIMER == timer)) { lblMinutes.setText(String.format("%02d", timer.getNbMinutes())); lblSeconds.setText(String.format("%02d", timer.getNbSeconds())); timer.addTimerListener(new TimerListener() { @Override public void timerChanged(Object source, Timer timer) { System.out.println("timerChanged"); lblMinutes.setText(String.format("%02d", timer.getCurrentNbMinutes())); lblSeconds.setText(String.format("%02d", timer.getCurrentNbSeconds())); repaint(); } @Override public void timerFinished(Object source, Timer timer) { lblMinutes.setText("00"); lblSeconds.setText("00"); onTimerFinished.run(); repaint(); } }); timer.startTimer(); } } public static class Timer { public static final Timer NO_TIMER = new Timer(-1, -1); private final int nbMinutes; private final int nbSeconds; private int currentNbMinutes; private int currentNbSeconds; private Thread thread; public Timer(int nbMinutes, int nbSeconds) { this.nbMinutes = nbMinutes; this.nbSeconds = nbSeconds; this.currentNbMinutes = nbMinutes; this.currentNbSeconds = nbSeconds; } public int getCurrentNbMinutes() { return currentNbMinutes; } public int getCurrentNbSeconds() { return currentNbSeconds; } public int getNbMinutes() { return nbMinutes; } public int getNbSeconds() { return nbSeconds; } public void startTimer() { if (thread != null) { thread.interrupt(); } thread = new Thread(() -> { while (currentNbMinutes > 0 || currentNbSeconds > 0) { try { Thread.sleep(1000); } catch (InterruptedException e) { return; } if (currentNbSeconds > 0) { currentNbSeconds--; } else { currentNbSeconds = 59; currentNbMinutes--; } fireTimerChanged(); } fireTimerFinished(); }); thread.start(); } private void stopTimer() { if (thread != null) { thread.interrupt(); } } private void fireTimerChanged() { for (TimerListener listener : listeners) { listener.timerChanged(this, this); } } private void fireTimerFinished() { for (TimerListener listener : listeners) { listener.timerFinished(this, this); } } private final List<TimerListener> listeners = new LinkedList<>(); public void addTimerListener(TimerListener listener) { listeners.add(listener); } public void removeTimerListener(TimerListener listener) { listeners.remove(listener); } } public static interface TimerListenable { public abstract void addTimerListener(TimerListener listener); public abstract void removeTimerListener(TimerListener listener); } public static interface TimerListener { public abstract void timerChanged(Object source, Timer timer); public abstract void timerFinished(Object source, Timer timer); } } No newline at end of file
jeuAssemblage/src/view/screen/SoloGameCreation.java +46 −5 Changes for jeuAssemblage/src/view/screen/SoloGameCreation.java: 46 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import utils.EDifficulty; import view.MainFrame; import view.component.Separator; import view.component.board.Grid; import view.component.board.TimerPanel.Timer; import view.utils.DocumentAdapter; public class SoloGameCreation extends JPanel { Loading @@ -43,8 +44,8 @@ public class SoloGameCreation extends JPanel { private final JLabel lblDifficulty = new JLabel("Difficulté :"); private final JList<String> difficultyList = new JList<String>(EDifficulty.getDifficultysName()); private final JSpinner nbMinutesSpinner = new JSpinner(); private final JSpinner nbSecondsSpinner = new JSpinner(); private final JSpinner nbMinutesSpinner = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); private final JSpinner nbSecondsSpinner = new JSpinner(new SpinnerNumberModel(0, -1, 60, 1)); private final JCheckBox timeLimitCheckBox = new JCheckBox("Temps limité"); private JPanel gridPreview = new JPanel(); Loading Loading @@ -125,7 +126,39 @@ public class SoloGameCreation extends JPanel { (int) nbPiecesSpinner.getValue() ); mainFrame.setContentPane(new SoloGameScreen(mainFrame, playBoard)); Timer timer = null; if (timeLimitCheckBox.isSelected()) { timer = new Timer((int) nbMinutesSpinner.getValue(), (int) nbSecondsSpinner.getValue()); } else { timer = Timer.NO_TIMER; } mainFrame.setContentPane(new SoloGameScreen(mainFrame, playBoard, timer)); }); nbMinutesSpinner.setEnabled(timeLimitCheckBox.isSelected()); nbSecondsSpinner.setEnabled(timeLimitCheckBox.isSelected()); timeLimitCheckBox.addActionListener(e -> { nbMinutesSpinner.setEnabled(timeLimitCheckBox.isSelected()); nbSecondsSpinner.setEnabled(timeLimitCheckBox.isSelected()); }); nbSecondsSpinner.addChangeListener(e -> { if ((int) nbSecondsSpinner.getValue() == 60) { nbSecondsSpinner.setValue(0); nbMinutesSpinner.setValue((int) nbMinutesSpinner.getValue() + 1); } else if ((int) nbSecondsSpinner.getValue() == -1) { nbSecondsSpinner.setValue(59); nbMinutesSpinner.setValue((int) nbMinutesSpinner.getValue() - 1); } }); updateGridPreview(); Loading Loading @@ -288,20 +321,28 @@ public class SoloGameCreation extends JPanel { private void updateGridPreview() { remove(gridPreview); JPanel temp = null; try { gridPreview = new Grid(PlayBoard.constructPlayBoard( temp = new Grid(PlayBoard.constructPlayBoard( Long.parseLong(txtSeed.getText()), Integer.parseInt(txtSizeX.getText()), Integer.parseInt(txtSizeY.getText()), (int) nbPiecesSpinner.getValue() ), true); } catch (Exception ignored) {} if (temp != null) { remove(gridPreview); gridPreview = temp; add(gridPreview); revalidate(); repaint(); } } private static Runnable createRandomSeedCallback(SoloGameCreation soloGameCreation) { Loading
jeuAssemblage/src/view/screen/SoloGameScreen.java +3 −2 Changes for jeuAssemblage/src/view/screen/SoloGameScreen.java: 3 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ import javax.swing.JPanel; import model.PlayBoard; import view.MainFrame; import view.component.GamePanel; import view.component.board.TimerPanel.Timer; import view.utils.SwingUtils; import java.awt.Graphics; Loading @@ -13,11 +14,11 @@ public class SoloGameScreen extends JPanel { private final GamePanel gamePanel; public SoloGameScreen(MainFrame mainFrame, PlayBoard playboard) { public SoloGameScreen(MainFrame mainFrame, PlayBoard playboard, Timer timer) { setLayout(null); this.gamePanel = new GamePanel(mainFrame, playboard); this.gamePanel = new GamePanel(mainFrame, playboard, timer); this.add(this.gamePanel); Loading