Commit ba8aa03f authored by Theo Airey's avatar Theo Airey
Browse files

Fixs mineurs

parent b21fc2c5
Loading
Loading
Loading
Loading
+153 B (667 B)
Loading image diff...
+15 −2
Changes for jeuAssemblage/src/view/component/GamePanel.java: 15 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -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;
@@ -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);
	}
@@ -46,7 +59,7 @@ public class GamePanel extends JPanel {
		 	this.getHeight()
		);

		this.pieceBoard.setBounds(
		this.timerPanel.setBounds(
			this.grid.getWidth(),
		 	0,
		 	getWidthTimesPourcent (this, .2f),
+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
+46 −5
Changes for jeuAssemblage/src/view/screen/SoloGameCreation.java: 46 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -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 {
@@ -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();
@@ -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();
@@ -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) {

+3 −2
Changes for jeuAssemblage/src/view/screen/SoloGameScreen.java: 3 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -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;
@@ -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